39 use,
intrinsic :: iso_c_binding
45 kim_log_handle_type, &
53 kim_push_default_verbosity, &
54 kim_pop_default_verbosity, &
55 kim_push_default_print_function, &
56 kim_pop_default_print_function, &
57 kim_convert_c_string, &
69 type, bind(c) :: kim_log_handle_type
70 type(c_ptr) :: p = c_null_ptr
71 end type kim_log_handle_type
76 type(kim_log_handle_type),
protected,
save &
82 interface operator(.eq.)
83 module procedure kim_log_handle_equal
84 end interface operator(.eq.)
89 interface operator(.ne.)
90 module procedure kim_log_handle_not_equal
91 end interface operator(.ne.)
98 interface kim_push_default_verbosity
99 module procedure kim_log_push_default_verbosity
100 end interface kim_push_default_verbosity
107 interface kim_pop_default_verbosity
109 end interface kim_pop_default_verbosity
116 interface kim_push_default_print_function
117 module procedure kim_log_push_default_print_function
118 end interface kim_push_default_print_function
125 interface kim_pop_default_print_function
127 end interface kim_pop_default_print_function
132 interface kim_convert_c_string
133 module procedure kim_log_convert_c_string
134 end interface kim_convert_c_string
143 end interface kim_get_id
152 end interface kim_set_id
159 interface kim_push_verbosity
161 end interface kim_push_verbosity
168 interface kim_pop_verbosity
170 end interface kim_pop_verbosity
177 interface kim_log_entry
179 end interface kim_log_entry
185 logical recursive function kim_log_handle_equal(lhs, rhs)
187 type(kim_log_handle_type),
intent(in) :: lhs
188 type(kim_log_handle_type),
intent(in) :: rhs
190 if ((.not. c_associated(lhs%p)) .and. (.not. c_associated(rhs%p)))
then 191 kim_log_handle_equal = .true.
193 kim_log_handle_equal = c_associated(lhs%p, rhs%p)
195 end function kim_log_handle_equal
200 logical recursive function kim_log_handle_not_equal(lhs, rhs)
202 type(kim_log_handle_type),
intent(in) :: lhs
203 type(kim_log_handle_type),
intent(in) :: rhs
205 kim_log_handle_not_equal = .not. (lhs == rhs)
206 end function kim_log_handle_not_equal
216 integer(c_int) recursive function create(log) &
217 bind(c, name=
"KIM_Log_Create")
218 use,
intrinsic :: iso_c_binding
220 type(c_ptr),
intent(out) :: log
223 type(kim_log_handle_type),
intent(out) :: log_handle
224 integer(c_int),
intent(out) :: ierr
240 recursive subroutine destroy(log) bind(c, name="KIM_Log_Destroy")
241 use,
intrinsic :: iso_c_binding
243 type(c_ptr),
intent(inout) :: log
244 end subroutine destroy
246 type(kim_log_handle_type),
intent(inout) :: log_handle
251 log_handle%p = c_null_ptr
259 recursive subroutine kim_log_push_default_verbosity(log_verbosity)
263 recursive subroutine push_default_verbosity(log_verbosity) &
264 bind(c, name=
"KIM_Log_PushDefaultVerbosity")
265 use,
intrinsic :: iso_c_binding
268 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
269 end subroutine push_default_verbosity
271 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
273 call push_default_verbosity(log_verbosity)
274 end subroutine kim_log_push_default_verbosity
284 recursive subroutine pop_default_verbosity() &
285 bind(c, name=
"KIM_Log_PopDefaultVerbosity")
286 use,
intrinsic :: iso_c_binding
288 end subroutine pop_default_verbosity
291 call pop_default_verbosity()
337 recursive subroutine kim_log_push_default_print_function(language_name, fptr)
341 recursive subroutine push_default_print_function(language_name, fptr) &
342 bind(c, name=
"KIM_Log_PushDefaultPrintFunction")
343 use,
intrinsic :: iso_c_binding
346 type(kim_language_name_type),
intent(in),
value :: language_name
347 type(c_funptr),
intent(in),
value :: fptr
348 end subroutine push_default_print_function
350 type(kim_language_name_type),
intent(in) :: language_name
351 type(c_funptr),
intent(in),
value :: fptr
353 call push_default_print_function(language_name, fptr)
354 end subroutine kim_log_push_default_print_function
364 recursive subroutine pop_default_print_function() &
365 bind(c, name=
"KIM_Log_PopDefaultPrintFunction")
366 use,
intrinsic :: iso_c_binding
368 end subroutine pop_default_print_function
371 call pop_default_print_function()
383 recursive subroutine kim_log_convert_c_string(c_char_ptr, string)
384 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
386 type(c_ptr),
intent(in),
value :: c_char_ptr
387 character(len=*, kind=c_char),
intent(out) :: string
389 call kim_convert_c_char_ptr_to_string(c_char_ptr, string)
390 end subroutine kim_log_convert_c_string
398 use kim_convert_string_module
, only: kim_convert_c_char_ptr_to_string
399 use kim_interoperable_types_module
, only: kim_log_type
402 type(c_ptr)
recursive function get_id(log) bind(c, name=
"KIM_Log_GetID")
403 use,
intrinsic :: iso_c_binding
404 use kim_interoperable_types_module
, only: kim_log_type
406 type(kim_log_type),
intent(in) :: log
409 type(kim_log_handle_type),
intent(in) :: log_handle
410 character(len=*, kind=c_char),
intent(out) :: id_string
411 type(kim_log_type),
pointer :: log
415 call c_f_pointer(log_handle%p, log)
417 call kim_convert_c_char_ptr_to_string(p, id_string)
426 use kim_interoperable_types_module
, only: kim_log_type
429 recursive subroutine set_id(log, id_string) bind(c, name="KIM_Log_SetID")
430 use,
intrinsic :: iso_c_binding
431 use kim_interoperable_types_module
, only: kim_log_type
433 type(kim_log_type),
intent(in) :: log
434 character(c_char),
intent(in) :: id_string(*)
435 end subroutine set_id
437 type(kim_log_handle_type),
intent(in) :: log_handle
438 character(len=*, kind=c_char),
intent(in) :: id_string
439 type(kim_log_type),
pointer :: log
441 call c_f_pointer(log_handle%p, log)
442 call set_id(log, trim(id_string)//c_null_char)
452 use kim_interoperable_types_module
, only: kim_log_type
455 recursive subroutine push_verbosity(log, log_verbosity) &
456 bind(c, name=
"KIM_Log_PushVerbosity")
457 use,
intrinsic :: iso_c_binding
459 use kim_interoperable_types_module
, only: kim_log_type
461 type(kim_log_type),
intent(in) :: log
462 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
463 end subroutine push_verbosity
465 type(kim_log_handle_type),
intent(in) :: log_handle
466 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
467 type(kim_log_type),
pointer :: log
469 call c_f_pointer(log_handle%p, log)
470 call push_verbosity(log, log_verbosity)
479 use kim_interoperable_types_module
, only: kim_log_type
482 recursive subroutine pop_verbosity(log) &
483 bind(c, name=
"KIM_Log_PopVerbosity")
484 use,
intrinsic :: iso_c_binding
485 use kim_interoperable_types_module
, only: kim_log_type
487 type(kim_log_type),
intent(in) :: log
488 end subroutine pop_verbosity
490 type(kim_log_handle_type),
intent(in) :: log_handle
491 type(kim_log_type),
pointer :: log
493 call c_f_pointer(log_handle%p, log)
494 call pop_verbosity(log)
504 use kim_interoperable_types_module
, only: kim_log_type
507 recursive subroutine log_entry(log, log_verbosity, message, line_number, &
508 file_name) bind(c, name="KIM_Log_LogEntry")
509 use,
intrinsic :: iso_c_binding
511 use kim_interoperable_types_module
, only: kim_log_type
513 type(kim_log_type),
intent(in) :: log
514 type(kim_log_verbosity_type),
intent(in),
value :: log_verbosity
515 character(c_char),
intent(in) :: message(*)
516 integer(c_int),
intent(in),
value :: line_number
517 character(c_char),
intent(in) :: file_name(*)
518 end subroutine log_entry
520 type(kim_log_handle_type),
intent(in) :: log_handle
521 type(kim_log_verbosity_type),
intent(in) :: log_verbosity
522 character(len=*, kind=c_char),
intent(in) :: message
523 type(kim_log_type),
pointer :: log
525 call c_f_pointer(log_handle%p, log)
526 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_get_id(log_handle, id_string)
Get the identity of the Log object.
An Extensible Enumeration for the LanguageName's supported by the KIM API.
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.
recursive subroutine kim_log_pop_default_print_function()
Pop a log PrintFunction from the KIM API global default log PrintFunction stack.
An Extensible Enumeration for the LogVerbosity's supported by the KIM API.