#ifndef KMP_WAIT_RELEASE_H
#define KMP_WAIT_RELEASE_H
#include "kmp.h"
#include "kmp_itt.h"
#include "kmp_stats.h"
#if OMPT_SUPPORT
#include "ompt-specific.h"
#endif
struct flag_properties { … };
template <enum flag_type FlagType> struct flag_traits { … };
template <> struct flag_traits<flag32> { … };
template <> struct flag_traits<atomic_flag64> { … };
template <> struct flag_traits<flag64> { … };
template <> struct flag_traits<flag_oncore> { … };
template <flag_type FlagType> class kmp_flag { … };
template <typename PtrType, flag_type FlagType, bool Sleepable>
class kmp_flag_native : public kmp_flag<FlagType> { … };
template <typename PtrType, flag_type FlagType, bool Sleepable>
class kmp_flag_atomic : public kmp_flag<FlagType> { … };
#if OMPT_SUPPORT
OMPT_NOINLINE
static void __ompt_implicit_task_end(kmp_info_t *this_thr,
ompt_state_t ompt_state,
ompt_data_t *tId) { … }
#endif
template <class C, bool final_spin, bool Cancellable = false,
bool Sleepable = true>
static inline bool
__kmp_wait_template(kmp_info_t *this_thr,
C *flag USE_ITT_BUILD_ARG(void *itt_sync_obj)) { … }
#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
template <class C>
static inline void __kmp_mwait_template(int th_gtid, C *flag) { … }
#endif
template <class C> static inline void __kmp_release_template(C *flag) { … }
template <bool Cancellable, bool Sleepable>
class kmp_flag_32 : public kmp_flag_atomic<kmp_uint32, flag32, Sleepable> { … };
template <bool Cancellable, bool Sleepable>
class kmp_flag_64 : public kmp_flag_native<kmp_uint64, flag64, Sleepable> { … };
template <bool Cancellable, bool Sleepable>
class kmp_atomic_flag_64
: public kmp_flag_atomic<kmp_uint64, atomic_flag64, Sleepable> { … };
class kmp_flag_oncore : public kmp_flag_native<kmp_uint64, flag_oncore, false> { … };
static inline void __kmp_null_resume_wrapper(kmp_info_t *thr) { … }
#endif