40 use,
intrinsic :: iso_c_binding
46 kim_language_name_type, &
68 type, bind(c) :: kim_language_name_type
74 integer(c_int) :: language_name_id
75 end type kim_language_name_type
82 type(kim_language_name_type),
protected,
save, &
83 bind(c, name=
"KIM_LANGUAGE_NAME_cpp") &
91 type(kim_language_name_type),
protected,
save, &
92 bind(c, name=
"KIM_LANGUAGE_NAME_c") &
100 type(kim_language_name_type),
protected,
save, &
101 bind(c, name=
"KIM_LANGUAGE_NAME_fortran") &
110 module procedure kim_language_name_known
111 end interface kim_known
118 interface operator (.eq.)
119 module procedure kim_language_name_equal
120 end interface operator (.eq.)
127 interface operator (.ne.)
128 module procedure kim_language_name_not_equal
129 end interface operator (.ne.)
137 interface kim_from_string
138 module procedure kim_language_name_from_string
139 end interface kim_from_string
146 interface kim_to_string
147 module procedure kim_language_name_to_string
148 end interface kim_to_string
156 logical recursive function kim_language_name_known(language_name)
159 integer(c_int) recursive function known(language_name) &
160 bind(c, name=
"KIM_LanguageName_Known")
161 use,
intrinsic :: iso_c_binding
162 import kim_language_name_type
164 type(kim_language_name_type),
intent(in),
value :: language_name
167 type(kim_language_name_type),
intent(in) :: language_name
169 kim_language_name_known = (known(language_name) /= 0)
170 end function kim_language_name_known
177 logical recursive function kim_language_name_equal(lhs, rhs)
179 type(kim_language_name_type),
intent(in) :: lhs
180 type(kim_language_name_type),
intent(in) :: rhs
182 kim_language_name_equal &
183 = (lhs%language_name_id .eq. rhs%language_name_id)
184 end function kim_language_name_equal
191 logical recursive function kim_language_name_not_equal(lhs, rhs)
193 type(kim_language_name_type),
intent(in) :: lhs
194 type(kim_language_name_type),
intent(in) :: rhs
196 kim_language_name_not_equal = .not. (lhs .eq. rhs)
197 end function kim_language_name_not_equal
205 recursive subroutine kim_language_name_from_string(string, language_name)
208 type(kim_language_name_type)
recursive function from_string(string) &
209 bind(c, name=
"KIM_LanguageName_FromString")
210 use,
intrinsic :: iso_c_binding
211 import kim_language_name_type
213 character(c_char),
intent(in) :: string(*)
214 end function from_string
216 character(len=*, kind=c_char),
intent(in) :: string
217 type(kim_language_name_type),
intent(out) :: language_name
219 language_name = from_string(trim(string)//c_null_char)
220 end subroutine kim_language_name_from_string
227 recursive subroutine kim_language_name_to_string(language_name, string)
228 use kim_convert_string_module
, only : kim_convert_c_char_ptr_to_string
231 type(c_ptr)
recursive function get_string(language_name) &
232 bind(c, name=
"KIM_LanguageName_ToString")
233 use,
intrinsic :: iso_c_binding
234 import kim_language_name_type
236 type(kim_language_name_type),
intent(in),
value :: language_name
237 end function get_string
239 type(kim_language_name_type),
intent(in) :: language_name
240 character(len=*, kind=c_char),
intent(out) :: string
244 p = get_string(language_name)
245 call kim_convert_c_char_ptr_to_string(p, string)
246 end subroutine kim_language_name_to_string
255 number_of_language_names)
258 recursive subroutine get_number_of_language_names( &
259 number_of_language_names) &
260 bind(c, name=
"KIM_LANGUAGE_NAME_GetNumberOfLanguageNames")
261 use,
intrinsic :: iso_c_binding
262 integer(c_int),
intent(out) :: number_of_language_names
263 end subroutine get_number_of_language_names
265 integer(c_int),
intent(out) :: number_of_language_names
267 call get_number_of_language_names(number_of_language_names)
278 integer(c_int) recursive function get_language_name(index, &
279 language_name) bind(c, name="KIM_LANGUAGE_NAME_GetLanguageName")
280 use,
intrinsic :: iso_c_binding
281 import kim_language_name_type
282 integer(c_int),
intent(in),
value :: index
283 type(kim_language_name_type),
intent(out) :: language_name
284 end function get_language_name
286 integer(c_int),
intent(in) :: index
287 type(kim_language_name_type),
intent(out) :: language_name
288 integer(c_int),
intent(out) :: ierr
290 ierr = get_language_name(index-1, language_name)
type(kim_language_name_type), save, public, protected kim_language_name_cpp
recursive subroutine, public kim_get_number_of_language_names(number_of_language_names)
Get the number of standard LanguageName's defined by the KIM API.
recursive subroutine, public kim_get_language_name(index, language_name, ierr)
Get the identity of each defined standard LanguageName.
type(kim_language_name_type), save, public, protected kim_language_name_c
An Extensible Enumeration for the LanguageName's supported by the KIM API.
type(kim_language_name_type), save, public, protected kim_language_name_fortran