10#ifndef LIBCWD_PRIVATE_STRUCT_TSD_H
11#define LIBCWD_PRIVATE_STRUCT_TSD_H
16namespace libcwd::_private_ {
17struct ThreadSpecificData;
24#define LIBCWD_TSD __libcwd_tsd
25#define LIBCWD_TSD_PARAM ::libcwd::_private_::ThreadSpecificData& __libcwd_tsd
27#define LIBCWD_TSD_PARAM_UNUSED ::libcwd::_private_::ThreadSpecificData&
29#define LIBCWD_TSD_INSTANCE ::libcwd::_private_::ThreadSpecificData::instance()
31#define LIBCWD_TSD_DECLARATION \
32 ::libcwd::_private_::ThreadSpecificData& __libcwd_tsd(::libcwd::_private_::ThreadSpecificData::instance())
34#define LIBCWD_DO_TSD(debug_object) (*__libcwd_tsd.debug_object_array[(debug_object).index_])
36#define LIBCWD_TSD_MEMBER_OFF (__libcwd_tsd.debug_object_off_array[index_])
38#define LIBCWD_DO_TSD_MEMBER_OFF(debug_object) (__libcwd_tsd.debug_object_off_array[(debug_object).index_])
41#define LIBCWD_DO_TSD_MEMBER(debug_object, m) (LIBCWD_DO_TSD(debug_object).m)
42#define LIBCWD_TSD_MEMBER(m) LIBCWD_DO_TSD_MEMBER(*this, m)
45#include "libcwd/DebugObject_ThreadSpecificData.h"
67#ifndef HIDE_FROM_DOXYGEN
70extern int WST_initializing_TSD;
72struct ThreadSpecificData
78 bool lock_interface_is_locked =
80 bool recursive_fatal =
false;
82 bool recursive_assert =
false;
84 int debug_object_off_array[LIBCWD_DO_MAX]{};
85 DebugObject_ThreadSpecificData*
86 debug_object_array[LIBCWD_DO_MAX]{};
92 void cleanup_routine();
93 int off_cnt_array[LIBCWD_DC_MAX]{};
99 ~ThreadSpecificData();
102 bool initialized_ =
false;
103 bool cleaning_up_ =
false;
112 static ThreadSpecificData& S_create(ThreadSpecificData& tsd);
116 static ThreadSpecificData& instance();