ICON Community Interface 0.4.0
Loading...
Searching...
No Matches
comin_keyval_ifc.F90
Go to the documentation of this file.
1
3!
4! @authors 06/2025 :: ICON Community Interface <icon@dwd.de>
5!
6! SPDX-License-Identifier: BSD-3-Clause
7!
8! See LICENSES for license information.
9! Where software is supplied by third parties, it is indicated in the
10! headers of the routines.
11!
13 use, INTRINSIC :: iso_c_binding, only: c_int, c_int64_t, c_ptr, c_char, c_bool, c_double
14
15 PRIVATE
16
17 PUBLIC :: comin_keyval_create_c
18 PUBLIC :: comin_keyval_delete_c
19 PUBLIC :: comin_keyval_query_c
34
35 PUBLIC :: comin_varmap_new
36 PUBLIC :: comin_varmap_delete
37
38 PUBLIC :: comin_varmap_get
39 PUBLIC :: comin_varmap_put
40
46
47 INTERFACE
48 SUBROUTINE comin_keyval_create_c(comin_keyval_c) BIND(C)
49 IMPORT c_ptr
50 TYPE(c_ptr) :: comin_keyval_c
51 END SUBROUTINE comin_keyval_create_c
52
53 SUBROUTINE comin_keyval_delete_c(comin_keyval_c) BIND(C)
54 IMPORT c_ptr
55 TYPE(c_ptr), VALUE, INTENT(in) :: comin_keyval_c
56 END SUBROUTINE comin_keyval_delete_c
57
58 SUBROUTINE comin_keyval_query_c(ckey, idx, keyval_c) BIND(C)
59 IMPORT c_ptr, c_int
60 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
61 INTEGER(KIND=c_int), INTENT(out) :: idx
62 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
63 END SUBROUTINE comin_keyval_query_c
64
65 SUBROUTINE comin_keyval_set_int_c(ckey, val, keyval_c) BIND(C)
66 IMPORT c_ptr, c_int
67 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
68 INTEGER(KIND=c_int), VALUE, INTENT(in) :: val
69 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
70 END SUBROUTINE comin_keyval_set_int_c
71
72 SUBROUTINE comin_keyval_get_int_c(ckey, val, keyval_c) BIND(C)
73 IMPORT c_ptr, c_int
74 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
75 INTEGER(KIND=c_int), INTENT(out) :: val
76 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
77 END SUBROUTINE comin_keyval_get_int_c
78
79 SUBROUTINE comin_keyval_set_double_c(ckey, val, keyval_c) BIND(C)
80 IMPORT c_ptr, c_double
81 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
82 REAL(KIND=c_double), VALUE, INTENT(in) :: val
83 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
84 END SUBROUTINE comin_keyval_set_double_c
85
86 SUBROUTINE comin_keyval_get_double_c(ckey, val, keyval_c) BIND(C)
87 IMPORT c_ptr, c_double
88 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
89 REAL(KIND=c_double), INTENT(out) :: val
90 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
91 END SUBROUTINE comin_keyval_get_double_c
92
93 SUBROUTINE comin_keyval_set_char_c(ckey, cval, keyval_c) BIND(C)
94 IMPORT c_ptr
95 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
96 TYPE(c_ptr), VALUE, INTENT(in) :: cval
97 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
98 END SUBROUTINE comin_keyval_set_char_c
99
100 SUBROUTINE comin_keyval_get_char_c(ckey, cval, keyval_c) BIND(C)
101 IMPORT c_ptr
102 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
103 TYPE(c_ptr) :: cval
104 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
105 END SUBROUTINE comin_keyval_get_char_c
106
107 SUBROUTINE comin_keyval_set_bool_c(ckey, val, keyval_c) BIND(C)
108 IMPORT c_ptr, c_bool
109 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
110 LOGICAL(KIND=c_bool), VALUE, INTENT(in) :: val
111 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
112 END SUBROUTINE comin_keyval_set_bool_c
113
114 SUBROUTINE comin_keyval_get_bool_c(ckey, val, keyval_c) BIND(C)
115 IMPORT c_ptr, c_bool
116 TYPE(c_ptr), VALUE, INTENT(in) :: ckey
117 LOGICAL(KIND=c_bool), INTENT(out) :: val
118 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
119 END SUBROUTINE comin_keyval_get_bool_c
120
121 SUBROUTINE comin_keyval_iterator_begin_c(keyval_c, iterator) BIND(C)
122 IMPORT c_ptr
123 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
124 TYPE(c_ptr) :: iterator
125 END SUBROUTINE comin_keyval_iterator_begin_c
126
127 SUBROUTINE comin_keyval_iterator_end_c(keyval_c, iterator) BIND(C)
128 IMPORT c_ptr
129 TYPE(c_ptr), VALUE, INTENT(in) :: keyval_c
130 TYPE(c_ptr) :: iterator
131 END SUBROUTINE comin_keyval_iterator_end_c
132
133 FUNCTION comin_keyval_iterator_get_key_c(iterator) RESULT(ckey) BIND(C)
134 IMPORT c_ptr
135 TYPE(c_ptr), VALUE, INTENT(in) :: iterator
136 TYPE(c_ptr) :: ckey
138
139 SUBROUTINE comin_keyval_iterator_next_c(iterator) BIND(C)
140 IMPORT c_ptr
141 TYPE(c_ptr), VALUE, INTENT(in) :: iterator
142 END SUBROUTINE comin_keyval_iterator_next_c
143
144 SUBROUTINE comin_keyval_iterator_delete_c(iterator) BIND(C)
145 IMPORT c_ptr
146 TYPE(c_ptr), VALUE, INTENT(in) :: iterator
147 END SUBROUTINE comin_keyval_iterator_delete_c
148
149 FUNCTION comin_keyval_iterator_compare_c(iterator1, iterator2) BIND(C)
150 IMPORT c_ptr, c_bool
151 TYPE(c_ptr), VALUE, INTENT(in) :: iterator1, iterator2
152 LOGICAL(KIND=c_bool) :: comin_keyval_iterator_compare_c
154 END INTERFACE
155
156 ! Varmap functions
157 INTERFACE
158 SUBROUTINE comin_varmap_new(map) bind(C, name='comin_varmap_new_c')
159 IMPORT c_ptr
160 TYPE(c_ptr), INTENT(OUT) :: map
161 END SUBROUTINE
162 SUBROUTINE comin_varmap_delete(map) bind(C, name='comin_varmap_delete_c')
163 IMPORT c_ptr
164 TYPE(c_ptr), VALUE :: map
165 END SUBROUTINE
166 TYPE(c_ptr) FUNCTION comin_varmap_get_c (map, name, len, id) BIND(C)
167 IMPORT c_ptr, c_int64_t, c_char, c_int
168 TYPE(c_ptr), VALUE, INTENT(IN) :: map
169 INTEGER(c_int64_t), VALUE, INTENT(IN) :: len
170 CHARACTER(kind=c_char), INTENT(IN) :: name(len)
171 INTEGER(c_int), VALUE, INTENT(IN) :: id
172 END FUNCTION
173 SUBROUTINE comin_varmap_put_c (map, name, len, id, ptr) BIND(C)
174 IMPORT c_ptr, c_int64_t, c_char, c_int
175 TYPE(c_ptr), VALUE :: map
176 INTEGER(c_int64_t), VALUE, INTENT(IN) :: len
177 CHARACTER(kind=c_char), INTENT(IN) :: name(len)
178 INTEGER(c_int), VALUE, INTENT(IN) :: id
179 TYPE(c_ptr), VALUE, INTENT(IN) :: ptr
180 END SUBROUTINE
181 SUBROUTINE comin_varmap_iterator_begin (map, it) bind(C, name='comin_varmap_iterator_begin_c')
182 IMPORT c_ptr
183 TYPE(c_ptr), VALUE :: map
184 TYPE(c_ptr), INTENT(OUT) :: it
185 END SUBROUTINE
186 SUBROUTINE comin_varmap_iterator_delete (it) bind(C, name='comin_varmap_iterator_delete_c')
187 IMPORT c_ptr
188 TYPE(c_ptr), VALUE :: it
189 END SUBROUTINE
190 SUBROUTINE comin_varmap_iterator_next (it) bind(C, name='comin_varmap_iterator_next_c')
191 IMPORT c_ptr
192 TYPE(c_ptr), VALUE :: it
193 END SUBROUTINE
194 LOGICAL(c_bool) FUNCTION comin_varmap_iterator_is_end (map, it) bind(C, name='comin_varmap_iterator_is_end_c')
195 IMPORT c_ptr, c_bool
196 TYPE(c_ptr), VALUE, INTENT(IN) :: map
197 TYPE(c_ptr), VALUE, INTENT(IN) :: it
198 END FUNCTION
199 SUBROUTINE comin_varmap_iterator_value (it, ptr) bind(C, name='comin_varmap_iterator_value_c')
200 IMPORT c_ptr
201 TYPE(c_ptr), VALUE, INTENT(IN) :: it
202 TYPE(c_ptr), INTENT(OUT) :: ptr
203 END SUBROUTINE
204 END INTERFACE
205
206CONTAINS
207
208 SUBROUTINE comin_varmap_put (map, name, id, ptr)
209 TYPE(c_ptr), INTENT(INOUT) :: map
210 CHARACTER(kind=c_char, len=*), INTENT(IN) :: name
211 INTEGER(c_int), INTENT(IN) :: id
212 TYPE(c_ptr), INTENT(IN) :: ptr
213
214 CALL comin_varmap_put_c(map, name, len(name, kind=c_int64_t), id, ptr)
215 END SUBROUTINE
216
217 TYPE(c_ptr) function comin_varmap_get (map, name, id)
218 TYPE(c_ptr), INTENT(IN) :: map
219 CHARACTER(kind=c_char, len=*), INTENT(IN) :: name
220 INTEGER(c_int), INTENT(IN) :: id
221
222 comin_varmap_get = comin_varmap_get_c(map, name, len(name, kind=c_int64_t), id)
223 END FUNCTION
224END MODULE
subroutine, public comin_varmap_put(map, name, id, ptr)
type(c_ptr) function, public comin_varmap_get(map, name, id)