Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cPtrFacade.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cPtrFacade_H
7 #define _INC_cPtrFacade_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "PtrCast.h"
13 #include "cDebugAssert.h"
14 
15 namespace Gray
16 {
17  template<class TYPE>
18  class cPtrFacade
19  {
24 
25  typedef cPtrFacade<TYPE> THIS_t;
26 
27  protected:
28  TYPE* m_p;
29 
30  public:
31  cPtrFacade(TYPE* p = nullptr) noexcept
32  : m_p(p)
33  {
34  }
35  cPtrFacade(THIS_t&& ref) noexcept
36  {
38  this->m_p = ref.m_p; ref.m_p = nullptr;
39  }
40 
41  bool isValidPtr() const noexcept
42  {
44  return m_p != nullptr;
45  }
46 
48  {
50  ASSERT(m_p == nullptr); // MUST not have current value.
51  return &m_p;
52  }
53  TYPE* get_Ptr() const noexcept
54  {
55  return m_p;
56  }
57 
58  void put_Ptr(TYPE* p) noexcept
59  {
62  m_p = p;
63  }
64  void ReleasePtr() noexcept
65  {
68  m_p = nullptr;
69  }
70 
71  void AttachPtr(TYPE* p) noexcept
72  {
74  m_p = p;
75  }
76  TYPE* DetachPtr() noexcept
77  {
81  TYPE* p = m_p;
82  m_p = nullptr; // NOT ReleasePtr();
83  return p;
84  }
85 
86  THIS_t& operator = (TYPE* p) noexcept
87  {
89  m_p = p;
90  return *this;
91  }
92  THIS_t& operator = (THIS_t&& ref) noexcept
93  {
95  this->m_p = ref.m_p; ref.m_p = nullptr;
96  return *this;
97  }
98 
101  operator TYPE* () const noexcept
102  {
103  return m_p;
104  }
105 
106  TYPE& get_Ref() const
107  {
108  ASSERT(m_p != nullptr); return *m_p;
109  }
110 
111  TYPE& operator * () const
112  {
113  return get_Ref();
114  }
115 
117  {
118  ASSERT(m_p != nullptr); return m_p;
119  }
120 
122  bool operator!() const noexcept
123  {
124  return m_p == nullptr;
125  }
126  bool operator != ( /* const*/ TYPE* p2) const noexcept
127  {
128  return p2 != m_p;
129  }
130  bool operator == ( /* const*/ TYPE* p2) const noexcept
131  {
132  return p2 == m_p;
133  }
134  };
135 
136  // Similar to COM QueryInterface() this checks to see if the class is supported.
137 #define SMART_CAST(_DSTCLASS,p) DYNPTR_CAST(_DSTCLASS,(p).get_Ptr())
138 #define SMARTS_CAST(_DSTCLASS,p) CHECKPTR_CAST(_DSTCLASS,(p).get_Ptr())
139 
140 }
141 
142 #endif // _INC_cPtrFacade_H
#define TYPE
Definition: StrT.cpp:38
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cPtrFacade.h:19
TYPE * m_p
Pointer to some object of TYPE.
Definition: cPtrFacade.h:28
TYPE & operator*() const
Definition: cPtrFacade.h:111
bool operator!() const noexcept
Comparison ops.
Definition: cPtrFacade.h:122
void ReleasePtr() noexcept
Definition: cPtrFacade.h:64
bool operator==(TYPE *p2) const noexcept
Definition: cPtrFacade.h:130
TYPE ** get_PPtr()
Definition: cPtrFacade.h:47
void put_Ptr(TYPE *p) noexcept
Definition: cPtrFacade.h:58
bool isValidPtr() const noexcept
Definition: cPtrFacade.h:41
cPtrFacade(THIS_t &&ref) noexcept
Definition: cPtrFacade.h:35
void AttachPtr(TYPE *p) noexcept
Definition: cPtrFacade.h:71
THIS_t & operator=(TYPE *p) noexcept
Definition: cPtrFacade.h:86
TYPE * get_Ptr() const noexcept
Definition: cPtrFacade.h:53
TYPE * operator->() const
Definition: cPtrFacade.h:116
TYPE & get_Ref() const
Definition: cPtrFacade.h:106
bool operator!=(TYPE *p2) const noexcept
Definition: cPtrFacade.h:126
cPtrFacade(TYPE *p=nullptr) noexcept
Definition: cPtrFacade.h:31
TYPE * DetachPtr() noexcept
Definition: cPtrFacade.h:76
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14