Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cFiberLocal.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cFiberLocal_H
7 #define _INC_cFiberLocal_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 #include "../GrayLibBase.h"
12 
13 #if !defined(UNDER_CE) && defined(_MT) && defined(_WIN32)
14 
15 namespace GrayLib
16 {
17  template <class _TYPE>
18  class cFiberLocalStorage
19  {
25  public:
26  DWORD m_id;
27  public:
28  cFiberLocalStorage()
29  {
31  m_id = ::FlsAlloc();
32  ASSERT(m_id != FLS_OUT_OF_INDEXES);
33  ASSERT(m_id);
34  }
35  ~cFiberLocalStorage()
36  {
37  ASSERT(m_id);
38  ASSERT(m_id != FLS_OUT_OF_INDEXES);
39  ::FlsFree(m_id);
40  }
41  _TYPE* Get() const
42  {
44  ASSERT(m_id != FLS_OUT_OF_INDEXES);
45  ASSERT(m_id);
46  return (_TYPE*) ::FlsGetValue(m_id);
47  }
48  bool Put(_TYPE* pData)
49  {
51  ASSERT(m_id != FLS_OUT_OF_INDEXES);
52  ASSERT(m_id);
53  if (!::FlsSetValue(m_id, pData))
54  {
55  ASSERT(0);
56  return false;
57  }
58  return true;
59  }
60  void OnFiberClose(THREADID_t nThreadID)
61  {
63  }
64  void OnFiberClose()
65  {
66  }
67  };
68 };
69 #endif
70 #endif
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cMesh.h:22