kim-api  2.2.1+v2.2.1.GNU.GNU.
An Application Programming Interface (API) for the Knowledgebase of Interatomic Models (KIM).
kim_language_name_module.f90
Go to the documentation of this file.
1 !
2 ! CDDL HEADER START
3 !
4 ! The contents of this file are subject to the terms of the Common Development
5 ! and Distribution License Version 1.0 (the "License").
6 !
7 ! You can obtain a copy of the license at
8 ! http://www.opensource.org/licenses/CDDL-1.0. See the License for the
9 ! specific language governing permissions and limitations under the License.
10 !
11 ! When distributing Covered Code, include this CDDL HEADER in each file and
12 ! include the License file in a prominent location with the name LICENSE.CDDL.
13 ! If applicable, add the following below this CDDL HEADER, with the fields
14 ! enclosed by brackets "[]" replaced with your own identifying information:
15 !
16 ! Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved.
17 !
18 ! CDDL HEADER END
19 !
20 
21 !
22 ! Copyright (c) 2016--2020, Regents of the University of Minnesota.
23 ! All rights reserved.
24 !
25 ! Contributors:
26 ! Ryan S. Elliott
27 !
28 
29 !
30 ! Release: This file is part of the kim-api-2.2.1 package.
31 !
32 
39  use, intrinsic :: iso_c_binding
40  implicit none
41  private
42 
43  public &
44  ! Derived types
45  kim_language_name_type, &
46  ! Constants
50  ! Routines
51  kim_known, &
52  operator(.eq.), &
53  operator(.ne.), &
54  kim_from_string, &
55  kim_to_string, &
58 
64  type, bind(c) :: kim_language_name_type
70  integer(c_int) :: language_name_id
71  end type kim_language_name_type
72 
78  type(kim_language_name_type), protected, save, &
79  bind(c, name="KIM_LANGUAGE_NAME_cpp") &
81 
87  type(kim_language_name_type), protected, save, &
88  bind(c, name="KIM_LANGUAGE_NAME_c") &
90 
96  type(kim_language_name_type), protected, save, &
97  bind(c, name="KIM_LANGUAGE_NAME_fortran") &
99 
105  interface kim_known
106  module procedure kim_language_name_known
107  end interface kim_known
108 
114  interface operator(.eq.)
115  module procedure kim_language_name_equal
116  end interface operator(.eq.)
117 
123  interface operator(.ne.)
124  module procedure kim_language_name_not_equal
125  end interface operator(.ne.)
126 
133  interface kim_from_string
134  module procedure kim_language_name_from_string
135  end interface kim_from_string
136 
142  interface kim_to_string
143  module procedure kim_language_name_to_string
144  end interface kim_to_string
145 
146 contains
152  logical recursive function kim_language_name_known(language_name)
153  implicit none
154  interface
155  integer(c_int) recursive function known(language_name) &
156  bind(c, name="KIM_LanguageName_Known")
157  use, intrinsic :: iso_c_binding
158  import kim_language_name_type
159  implicit none
160  type(kim_language_name_type), intent(in), value :: language_name
161  end function known
162  end interface
163  type(kim_language_name_type), intent(in) :: language_name
164 
165  kim_language_name_known = (known(language_name) /= 0)
166  end function kim_language_name_known
167 
173  logical recursive function kim_language_name_equal(lhs, rhs)
174  implicit none
175  type(kim_language_name_type), intent(in) :: lhs
176  type(kim_language_name_type), intent(in) :: rhs
177 
178  kim_language_name_equal &
179  = (lhs%language_name_id == rhs%language_name_id)
180  end function kim_language_name_equal
181 
187  logical recursive function kim_language_name_not_equal(lhs, rhs)
188  implicit none
189  type(kim_language_name_type), intent(in) :: lhs
190  type(kim_language_name_type), intent(in) :: rhs
191 
192  kim_language_name_not_equal = .not. (lhs == rhs)
193  end function kim_language_name_not_equal
194 
201  recursive subroutine kim_language_name_from_string(string, language_name)
202  implicit none
203  interface
204  type(kim_language_name_type) recursive function from_string(string) &
205  bind(c, name="KIM_LanguageName_FromString")
206  use, intrinsic :: iso_c_binding
207  import kim_language_name_type
208  implicit none
209  character(c_char), intent(in) :: string(*)
210  end function from_string
211  end interface
212  character(len=*, kind=c_char), intent(in) :: string
213  type(kim_language_name_type), intent(out) :: language_name
214 
215  language_name = from_string(trim(string)//c_null_char)
216  end subroutine kim_language_name_from_string
217 
223  recursive subroutine kim_language_name_to_string(language_name, string)
224  use kim_convert_string_module, only: kim_convert_c_char_ptr_to_string
225  implicit none
226  interface
227  type(c_ptr) recursive function get_string(language_name) &
228  bind(c, name="KIM_LanguageName_ToString")
229  use, intrinsic :: iso_c_binding
230  import kim_language_name_type
231  implicit none
232  type(kim_language_name_type), intent(in), value :: language_name
233  end function get_string
234  end interface
235  type(kim_language_name_type), intent(in) :: language_name
236  character(len=*, kind=c_char), intent(out) :: string
237 
238  type(c_ptr) :: p
239 
240  p = get_string(language_name)
241  call kim_convert_c_char_ptr_to_string(p, string)
242  end subroutine kim_language_name_to_string
243 
250  recursive subroutine kim_get_number_of_language_names( &
251  number_of_language_names)
252  implicit none
253  interface
254  recursive subroutine get_number_of_language_names( &
255  number_of_language_names) &
256  bind(c, name="KIM_LANGUAGE_NAME_GetNumberOfLanguageNames")
257  use, intrinsic :: iso_c_binding
258  integer(c_int), intent(out) :: number_of_language_names
259  end subroutine get_number_of_language_names
260  end interface
261  integer(c_int), intent(out) :: number_of_language_names
262 
263  call get_number_of_language_names(number_of_language_names)
264  end subroutine kim_get_number_of_language_names
265 
271  recursive subroutine kim_get_language_name(index, language_name, ierr)
272  implicit none
273  interface
274  integer(c_int) recursive function get_language_name(index, &
275  language_name) &
276  bind(c, name="KIM_LANGUAGE_NAME_GetLanguageName")
277  use, intrinsic :: iso_c_binding
278  import kim_language_name_type
279  integer(c_int), intent(in), value :: index
280  type(kim_language_name_type), intent(out) :: language_name
281  end function get_language_name
282  end interface
283  integer(c_int), intent(in) :: index
284  type(kim_language_name_type), intent(out) :: language_name
285  integer(c_int), intent(out) :: ierr
286 
287  ierr = get_language_name(index - 1, language_name)
288  end subroutine kim_get_language_name
289 end module kim_language_name_module
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