Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cLocker.h
Go to the documentation of this file.
1 //
5 //
6 
7 #ifndef _INC_cLocker_H
8 #define _INC_cLocker_H
9 #ifndef NO_PRAGMA_ONCE
10 #pragma once
11 #endif
12 
13 #include "cPtrFacade.h"
14 
15 namespace Gray
16 {
18  {
24  private:
25  LONG m_nLockCount;
26 
27  protected:
28  cLockableBase() noexcept
29  : m_nLockCount(0)
30  {
31  }
33  {
34  ASSERT(m_nLockCount == 0);
35  }
36  inline LONG get_LockCount() const
37  {
38  ASSERT(m_nLockCount >= 0);
39  return m_nLockCount;
40  }
41  inline bool isLocked() const
42  {
43  ASSERT(m_nLockCount >= 0);
44  return(m_nLockCount != 0);
45  }
46 
47  inline void IncLockCount()
48  {
49  ++m_nLockCount;
50  ASSERT(m_nLockCount >= 0);
51  }
52  inline LONG DecLockCount()
53  {
54  --m_nLockCount;
55  ASSERT(m_nLockCount >= 0);
56  return m_nLockCount;
57  }
58  inline void Lock()
59  {
60  // For template support. cLockerT
61  IncLockCount();
62  }
63  inline LONG Unlock()
64  {
65  // For template support. cLockerT
66  return DecLockCount();
67  }
68  };
69 
70  template<class TYPE = cLockableBase>
71  class cLockerT : public cPtrFacade < TYPE >
72  {
80  //
81  public:
82  explicit cLockerT(TYPE* pLock, bool bLockSuccess) noexcept
83  : cPtrFacade<TYPE>(bLockSuccess ? pLock : nullptr)
84  {
85  // The lock may not always work ! this->m_p == nullptr
86  }
87  explicit cLockerT(TYPE& rLock)
88  : cPtrFacade<TYPE>(&rLock)
89  {
90  ASSERT(this->m_p == &rLock && this->m_p != nullptr);
91  rLock.Lock();
92  }
94  {
95  if (this->m_p != nullptr)
96  {
97  this->m_p->Unlock();
98  }
99  }
100  };
101 }
102 
103 #endif
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define TYPE
Definition: StrT.cpp:38
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cLocker.h:18
bool isLocked() const
Definition: cLocker.h:41
void Lock()
Definition: cLocker.h:58
~cLockableBase()
Definition: cLocker.h:32
LONG get_LockCount() const
Definition: cLocker.h:36
cLockableBase() noexcept
Definition: cLocker.h:28
LONG DecLockCount()
Definition: cLocker.h:52
LONG Unlock()
Definition: cLocker.h:63
void IncLockCount()
Definition: cLocker.h:47
Definition: cLocker.h:72
cLockerT(TYPE &rLock)
Definition: cLocker.h:87
~cLockerT()
Definition: cLocker.h:93
cLockerT(TYPE *pLock, bool bLockSuccess) noexcept
Definition: cLocker.h:82
Definition: cPtrFacade.h:19
cLockableBase * m_p
Pointer to some object of TYPE.
Definition: cPtrFacade.h:28
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14