14 USE iso_c_binding,
ONLY: c_int, c_char, c_double, c_bool, &
15 & c_ptr, c_loc, c_null_ptr, c_associated
31#include "comin_global.inc"
36 TYPE(c_ptr) :: comin_metadata_iterator_current_c = c_null_ptr
37 TYPE(c_ptr) :: comin_metadata_iterator_end_c = c_null_ptr
39 PROCEDURE :: next => comin_metadata_iterator_next
40 PROCEDURE :: is_end => comin_metadata_iterator_is_end
41 PROCEDURE :: key => comin_metadata_get_key_from_iterator
42 PROCEDURE :: delete => comin_metadata_iterator_delete
46 TYPE(c_ptr) :: comin_metadata_c = c_null_ptr
49 PROCEDURE :: delete => comin_metadata_delete
50 PROCEDURE :: query => comin_metadata_query
51 PROCEDURE :: get_iterator => comin_metadata_get_iterator
52 generic,
PUBLIC :: set => set_int, set_double, set_char, set_bool
53 PROCEDURE,
PRIVATE :: set_int => comin_metadata_set_int
54 PROCEDURE,
PRIVATE :: set_double => comin_metadata_set_double
55 PROCEDURE,
PRIVATE :: set_char => comin_metadata_set_char
56 PROCEDURE,
PRIVATE :: set_bool => comin_metadata_set_bool
57 generic,
PUBLIC :: get => get_int, get_double, get_char, get_bool
58 PROCEDURE,
PRIVATE :: get_int => comin_metadata_get_int
59 PROCEDURE,
PRIVATE :: get_double => comin_metadata_get_double
60 PROCEDURE,
PRIVATE :: get_char => comin_metadata_get_char
61 PROCEDURE,
PRIVATE :: get_bool => comin_metadata_get_bool
70 IF ( .NOT. c_associated(this%comin_metadata_c) )
THEN
75 SUBROUTINE comin_metadata_delete(this)
78 END SUBROUTINE comin_metadata_delete
80 INTEGER FUNCTION comin_metadata_query(this, key)
82 CHARACTER(LEN=*),
INTENT(in) :: key
83 INTEGER(KIND=c_int) :: idx
84 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
89 comin_metadata_query = int(idx)
90 END FUNCTION comin_metadata_query
92 SUBROUTINE comin_metadata_set_int(this, key, val)
94 CHARACTER(LEN=*),
INTENT(in) :: key
95 INTEGER(KIND=c_int),
INTENT(in) :: val
96 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
101 END SUBROUTINE comin_metadata_set_int
103 SUBROUTINE comin_metadata_get_int(this, key, val)
105 CHARACTER(LEN=*),
INTENT(in) :: key
106 INTEGER(KIND=c_int),
INTENT(out) :: val
107 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
111 END SUBROUTINE comin_metadata_get_int
113 SUBROUTINE comin_metadata_set_double(this, key, val)
115 CHARACTER(LEN=*),
INTENT(in) :: key
116 REAL(KIND=c_double),
INTENT(in) :: val
117 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
122 END SUBROUTINE comin_metadata_set_double
124 SUBROUTINE comin_metadata_get_double(this, key, val)
126 CHARACTER(LEN=*),
INTENT(in) :: key
127 REAL(KIND=c_double),
INTENT(out) :: val
128 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
132 END SUBROUTINE comin_metadata_get_double
134 SUBROUTINE comin_metadata_set_char(this, key, val)
136 CHARACTER(LEN=*),
INTENT(in) :: key, val
137 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1), cval(LEN(TRIM(val))+1)
143 END SUBROUTINE comin_metadata_set_char
145 SUBROUTINE comin_metadata_get_char(this, key, val)
147 CHARACTER(LEN=*),
INTENT(in) :: key
148 CHARACTER(LEN=:),
ALLOCATABLE,
INTENT(out) :: val
149 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
156 END SUBROUTINE comin_metadata_get_char
158 SUBROUTINE comin_metadata_set_bool(this, key, val)
160 CHARACTER(LEN=*),
INTENT(in) :: key
161 LOGICAL,
INTENT(in) :: val
162 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
167 END SUBROUTINE comin_metadata_set_bool
169 SUBROUTINE comin_metadata_get_bool(this, key, val)
171 CHARACTER(LEN=*),
INTENT(in) :: key
172 LOGICAL,
INTENT(out) :: val
173 CHARACTER(len=1, KIND=c_char),
TARGET :: ckey(LEN(TRIM(key))+1)
174 LOGICAL(KIND=c_bool) :: cval
179 END SUBROUTINE comin_metadata_get_bool
181 SUBROUTINE comin_metadata_get_iterator(this, iterator)
185 IF (c_associated(iterator%comin_metadata_iterator_current_c))
CALL iterator%delete()
188 END SUBROUTINE comin_metadata_get_iterator
190 FUNCTION comin_metadata_get_key_from_iterator(this)
RESULT(key)
192 CHARACTER(LEN=:),
ALLOCATABLE :: key
197 END FUNCTION comin_metadata_get_key_from_iterator
199 SUBROUTINE comin_metadata_iterator_next(this)
203 END SUBROUTINE comin_metadata_iterator_next
205 SUBROUTINE comin_metadata_iterator_delete(this)
210 this%comin_metadata_iterator_current_c = c_null_ptr
211 this%comin_metadata_iterator_end_c = c_null_ptr
214 LOGICAL FUNCTION comin_metadata_iterator_is_end(this)
217 comin_metadata_iterator_is_end =
LOGICAL(comin_keyval_iterator_compare_c( &
& this%comin_metadata_iterator_current_c, this%comin_metadata_iterator_end_c) )
218 END FUNCTION comin_metadata_iterator_is_end
subroutine, public convert_f_string(string, arr)
Convert Fortran string into C-style character array.