40 use,
intrinsic :: iso_c_binding
46 kim_log_handle_type, &
56 kim_push_default_verbosity, &
57 kim_pop_default_verbosity, &
70 type, bind(c) :: kim_log_handle_type
71 type(c_ptr) :: p = c_null_ptr
72 end type kim_log_handle_type
77 type(kim_log_handle_type),
protected,
save &
83 interface operator (.eq.)
84 module procedure kim_log_handle_equal
85 end interface operator (.eq.)
90 interface operator (.ne.)
91 module procedure kim_log_handle_not_equal
92 end interface operator (.ne.)
99 interface kim_push_default_verbosity
100 module procedure kim_log_push_default_verbosity
101 end interface kim_push_default_verbosity
108 interface kim_pop_default_verbosity
110 end interface kim_pop_default_verbosity
118 module procedure kim_log_get_id
119 end interface kim_get_id
128 end interface kim_set_id
135 interface kim_push_verbosity
137 end interface kim_push_verbosity
144 interface kim_pop_verbosity
146 end interface kim_pop_verbosity
153 interface kim_log_entry
155 end interface kim_log_entry
161 logical recursive function kim_log_handle_equal(lhs, rhs)
163 type(kim_log_handle_type),
intent(in) :: lhs
164 type(kim_log_handle_type),
intent(in) :: rhs
166 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 167 kim_log_handle_equal = .true.
169 kim_log_handle_equal = c_associated(lhs%p, rhs%p)
171 end function kim_log_handle_equal
176 logical recursive function kim_log_handle_not_equal(lhs, rhs)
178 type(kim_log_handle_type),
intent(in) :: lhs
179 type(kim_log_handle_type),
intent(in) :: rhs
181 kim_log_handle_not_equal = .not. (lhs .eq. rhs)
182 end function kim_log_handle_not_equal
192 integer(c_int) recursive function create(log) &
193 bind(c, name=
"KIM_Log_Create")
194 use,
intrinsic :: iso_c_binding
196 type(c_ptr),
intent(out) :: log
199 type(kim_log_handle_type),
intent(out) :: log_handle
200 integer(c_int),
intent(out) :: ierr
216 recursive subroutine destroy(log) bind(c, name="KIM_Log_Destroy")
217 use,
intrinsic :: iso_c_binding
219 type(c_ptr),
intent(inout) :: log
220 end subroutine destroy
222 type(kim_log_handle_type),
intent(inout) :: log_handle
227 log_handle%p = c_null_ptr
235 recursive subroutine kim_log_push_default_verbosity(log_verbosity)
239 recursive subroutine push_default_verbosity(log_verbosity) &
240 bind(c, name=
"KIM_Log_PushDefaultVerbosity")
241 use,
intrinsic :: iso_c_binding
244 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
245 end subroutine push_default_verbosity
247 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
249 call push_default_verbosity(log_verbosity)
250 end subroutine kim_log_push_default_verbosity
260 recursive subroutine pop_default_verbosity() &
261 bind(c, name=
"KIM_Log_PopDefaultVerbosity")
262 use,
intrinsic :: iso_c_binding
264 end subroutine pop_default_verbosity
267 call pop_default_verbosity()
275 recursive subroutine kim_log_get_id(log_handle, id_string)
276 use kim_convert_string_module
, only : kim_convert_c_char_ptr_to_string
277 use kim_interoperable_types_module
, only : kim_log_type
280 type(c_ptr)
recursive function get_id(log) bind(c, name=
"KIM_Log_GetID")
281 use,
intrinsic :: iso_c_binding
282 use kim_interoperable_types_module
, only : kim_log_type
284 type(kim_log_type),
intent(in) :: log
287 type(kim_log_handle_type),
intent(in) :: log_handle
288 character(len=*, kind=c_char),
intent(out) :: id_string
289 type(kim_log_type),
pointer :: log
293 call c_f_pointer(log_handle%p, log)
295 call kim_convert_c_char_ptr_to_string(p, id_string)
296 end subroutine kim_log_get_id
304 use kim_interoperable_types_module
, only : kim_log_type
307 recursive subroutine set_id(log, id_string) bind(c, name="KIM_Log_SetID")
308 use,
intrinsic :: iso_c_binding
309 use kim_interoperable_types_module
, only : kim_log_type
311 type(kim_log_type),
intent(in) :: log
312 character(c_char),
intent(in) :: id_string(*)
313 end subroutine set_id
315 type(kim_log_handle_type),
intent(in) :: log_handle
316 character(len=*, kind=c_char),
intent(in) :: id_string
317 type(kim_log_type),
pointer :: log
319 call c_f_pointer(log_handle%p, log)
320 call set_id(log, trim(id_string)//c_null_char)
330 use kim_interoperable_types_module
, only : kim_log_type
333 recursive subroutine push_verbosity(log, log_verbosity) &
334 bind(c, name=
"KIM_Log_PushVerbosity")
335 use,
intrinsic :: iso_c_binding
337 use kim_interoperable_types_module
, only : kim_log_type
339 type(kim_log_type),
intent(in) :: log
340 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
341 end subroutine push_verbosity
343 type(kim_log_handle_type),
intent(in) :: log_handle
344 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
345 type(kim_log_type),
pointer :: log
347 call c_f_pointer(log_handle%p, log)
348 call push_verbosity(log, log_verbosity)
357 use kim_interoperable_types_module
, only : kim_log_type
360 recursive subroutine pop_verbosity(log) &
361 bind(c, name=
"KIM_Log_PopVerbosity")
362 use,
intrinsic :: iso_c_binding
363 use kim_interoperable_types_module
, only : kim_log_type
365 type(kim_log_type),
intent(in) :: log
366 end subroutine pop_verbosity
368 type(kim_log_handle_type),
intent(in) :: log_handle
369 type(kim_log_type),
pointer :: log
371 call c_f_pointer(log_handle%p, log)
372 call pop_verbosity(log)
382 use kim_interoperable_types_module
, only : kim_log_type
385 recursive subroutine log_entry(log, log_verbosity, message, line_number, &
386 file_name) bind(c, name="KIM_Log_LogEntry")
387 use,
intrinsic :: iso_c_binding
389 use kim_interoperable_types_module
, only : kim_log_type
391 type(kim_log_type),
intent(in) :: log
392 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
393 character(c_char),
intent(in) :: message(*)
394 integer(c_int),
intent(in),
value :: line_number
395 character(c_char),
intent(in) :: file_name(*)
396 end subroutine log_entry
398 type(kim_log_handle_type),
intent(in) :: log_handle
399 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
400 character(len=*, kind=c_char),
intent(in) :: message
401 type(kim_log_type),
pointer :: log
403 call c_f_pointer(log_handle%p, log)
404 call log_entry(log, log_verbosity, trim(message)//c_null_char, &
recursive subroutine, public kim_log_create(log_handle, ierr)
Create a new KIM API Log object.
recursive subroutine kim_log_set_id(log_handle, id_string)
Set the identity of the Log object.
recursive subroutine, public kim_log_destroy(log_handle)
Destroy a previously Log::Create'd object.
Provides the logging interface for the KIM API.
type(kim_log_handle_type), save, public, protected kim_log_null_handle
NULL handle for use in comparisons.
recursive subroutine kim_log_pop_default_verbosity()
Pop a LogVerbosity from the KIM API global default verbosity stack.
recursive subroutine kim_log_pop_verbosity(log_handle)
Pop a LogVerbosity from the Log object's verbosity stack.
recursive subroutine kim_log_log_entry(log_handle, log_verbosity, message)
Write a log entry into the log file.
recursive subroutine kim_log_push_verbosity(log_handle, log_verbosity)
Push a new LogVerbosity onto the Log object's verbosity stack.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.