6 #ifndef _INC_cThreadLocalSys_H
7 #define _INC_cThreadLocalSys_H
19 #if defined(_WIN32) && defined(__GNUC__)
20 typedef VOID (NTAPI *PFLS_CALLBACK_FUNCTION) ( PVOID lpFlsData );
21 WINBASEAPI DWORD WINAPI FlsAlloc( PFLS_CALLBACK_FUNCTION lpCallback );
22 WINBASEAPI BOOL WINAPI FlsFree( DWORD dwFlsIndex );
23 WINBASEAPI PVOID WINAPI FlsGetValue( DWORD dwFlsIndex );
24 WINBASEAPI BOOL WINAPI FlsSetValue( DWORD dwFlsIndex, PVOID lpFlsData );
50 #ifndef TLS_OUT_OF_INDEXES
51 #define TLS_OUT_OF_INDEXES 0xffffffff
53 typedef DWORD TYPESLOT_t;
54 #elif defined(__linux__)
55 #define TLS_OUT_OF_INDEXES ((pthread_key_t)-1)
57 typedef pthread_key_t TYPESLOT_t;
58 typedef void (NTAPI *PFLS_CALLBACK_FUNCTION)(IN
void *p);
64 TYPESLOT_t m_nTypeSlot;
73 #if (_WIN32_WINNT >= 0x0600)
74 m_nTypeSlot = ::FlsAlloc(pDestruct);
76 m_nTypeSlot = ::TlsAlloc();
79 int iRet = ::pthread_key_create( &m_nTypeSlot, pDestruct);
82 m_nTypeSlot = TLS_OUT_OF_INDEXES;
91 #if (_WIN32_WINNT >= 0x0600)
92 ::FlsFree(m_nTypeSlot);
94 ::TlsFree(m_nTypeSlot);
97 int iRet = ::pthread_key_delete(m_nTypeSlot);
106 if (m_nTypeSlot == 0)
109 if (m_nTypeSlot == TLS_OUT_OF_INDEXES)
124 #if (_WIN32_WINNT >= 0x0600)
125 return ::FlsGetValue(m_nTypeSlot);
127 return ::TlsGetValue(m_nTypeSlot);
130 return ::pthread_getspecific(m_nTypeSlot);
139 #if (_WIN32_WINNT >= 0x0600)
140 return ::FlsSetValue(m_nTypeSlot, pData) ? true :
false;
142 return ::TlsSetValue(m_nTypeSlot, pData) ? true :
false;
145 int iRet = ::pthread_setspecific(m_nTypeSlot, pData );
151 template <
class TYPE>
177 template <
class TYPE>
204 if (pData ==
nullptr)
221 if (pData !=
nullptr)
#define IGNORE_WARN_INTERFACE(c)
Definition: GrayCore.h:79
#define TYPE
Definition: StrT.cpp:38
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define STATIC_ASSERT(exp, name)
Definition: cDebugAssert.h:24
#define DEBUG_CHECK(exp)
Definition: cDebugAssert.h:90
Definition: cThreadLocalSys.h:179
static void NTAPI OnThreadClose(IN void *pData)
Definition: cThreadLocalSys.h:186
virtual void * GetDataNewV()
Definition: cThreadLocalSys.h:211
void FreeDataManually()
Definition: cThreadLocalSys.h:217
cThreadLocalSysNew() noexcept
Definition: cThreadLocalSys.h:195
TYPE * GetDataNew()
Definition: cThreadLocalSys.h:200
Definition: cThreadLocalSys.h:153
TYPE GetData() const noexcept
Definition: cThreadLocalSys.h:167
bool PutData(TYPE nData) noexcept
Definition: cThreadLocalSys.h:171
cThreadLocalSysT(PFLS_CALLBACK_FUNCTION pDestruct=nullptr) noexcept
Definition: cThreadLocalSys.h:162
Definition: cThreadLocalSys.h:41
~cThreadLocalSys()
Definition: cThreadLocalSys.h:87
cThreadLocalSys(PFLS_CALLBACK_FUNCTION pDestruct=nullptr) noexcept
Definition: cThreadLocalSys.h:67
void * GetData() const noexcept
Definition: cThreadLocalSys.h:114
bool isInit() const noexcept
Definition: cThreadLocalSys.h:102
bool PutData(void *pData) noexcept
Definition: cThreadLocalSys.h:134
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
DECLARE_INTERFACE(IRandomNoise)
Definition: cThreadLocalSys.h:30
virtual void * GetDataNewV()=0