! Copyright (c) 2019-2020 University of Oregon
! Distributed under the BSD Software License
! (See accompanying file LICENSE.txt)

#ifdef PERFSTUBS_USE_TIMERS

!
!    Macro API for option of entirely disabling at compile time
!    To use this API, set the Macro PERFSTUBS_USE_TIMERS on the command
!    line or in a config.h file, however your project does it
!

#define PERFSTUBS_INITIALIZE() call ps_initialize()
#define PERFSTUBS_FINALIZE() call ps_finalize()
#define PERFSTUBS_DUMP_DATA() call ps_dump_data()
#define PERFSTUBS_REGISTER_THREAD() call ps_register_thread()
#define PERFSTUBS_TIMER_CREATE(_timer_object, _timer_name) \
    call ps_timer_create_fortran(_timer_object, _timer_name//CHAR(0))
#define PERFSTUBS_TIMER_START(_timer_object) \
    call ps_timer_start_fortran(_timer_object)
#define PERFSTUBS_TIMER_STOP(_timer_object) \
    call ps_timer_stop_fortran(_timer_object)
#define PERFSTUBS_START_STRING(_timer_name) \
    call ps_start_string(_timer_name//CHAR(0))
#define PERFSTUBS_STOP_STRING(_timer_name) \
    call ps_stop_string(_timer_name//CHAR(0))
#define PERFSTUBS_STOP_CURRENT() \
    call ps_stop_current()
#define PERFSTUBS_SET_PARAMETER(_parameter_name, parameter_value) \
    call ps_set_parameter(_parameter_name//CHAR(0), parameter_value)
#define PERFSTUBS_DYNAMIC_PHASE_START(_phase_prefix, _iteration_index) \
    call ps_dynamic_phase_start(_phase_prefix//CHAR(0), _iteration_index)
#define PERFSTUBS_DYNAMIC_PHASE_STOP(_phase_prefix, _iteration_index) \
    call ps_dynamic_phase_stop(_phase_prefix//CHAR(0), _iteration_index)
#define PERFSTUBS_CREATE_COUNTER(_counter_object, _name) \
    call ps_create_counter_fortran(_counter_object, _name//CHAR(0))
#define PERFSTUBS_SAMPLE_COUNTER(_counter_object, _value) \
    call ps_sample_counter_fortran(_counter_object, _value)
#define PERFSTUBS_METADATA(_name, _value) \
    call ps_set_metadata(_name//CHAR(0), _value//CHAR(0))

! // defined(PERFSTUBS_USE_TIMERS)
#else

#define PERFSTUBS_INITIALIZE()
#define PERFSTUBS_FINALIZE()
#define PERFSTUBS_DUMP_DATA()
#define PERFSTUBS_REGISTER_THREAD()
#define PERFSTUBS_TIMER_CREATE(_timer_object, _timer_name)
#define PERFSTUBS_TIMER_START(_timer_object)
#define PERFSTUBS_TIMER_STOP(_timer_object)
#define PERFSTUBS_START_STRING(_timer_name)
#define PERFSTUBS_STOP_STRING(_timer_name)
#define PERFSTUBS_STOP_CURRENT()
#define PERFSTUBS_SET_PARAMETER(_parameter_name, _parameter_value)
#define PERFSTUBS_DYNAMIC_PHASE_START(_phase_prefix, _iteration_index)
#define PERFSTUBS_DYNAMIC_PHASE_STOP(_phase_prefix, _iteration_index)
#define PERFSTUBS_CREATE_COUNTER(_counter_object, _name)
#define PERFSTUBS_SAMPLE_COUNTER(_counter_object, _value)
#define PERFSTUBS_METADATA(_name, _value)

! // defined(PERFSTUBS_USE_TIMERS)
#endif

