You.i Engine
YiWeakArray.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_WEAK_ARRAY_H_
3 #define _YI_WEAK_ARRAY_H_
4 
5 #include "smartptr/YiWeakPtr.h"
6 
94 template<typename YI_ARRAY_TYPE>
95 class CYIWeakArray
96 {
97  template<typename YI_OTHER_PTR_TYPE> friend class CYISharedArray;
98  template<typename YI_OTHER_PTR_TYPE> friend class CYIWeakArray;
99 
100 public:
101  typedef CYIWeakPtr<YI_ARRAY_TYPE> CYIWeakArray<YI_ARRAY_TYPE>::* YI_UNSPECIFIED_BOOL_TYPE;
102 
106  inline CYIWeakArray()
107  {
108  }
109 
115  m_pPtr(rOther.m_pPtr)
116  {
117  }
118 
124  template<typename YI_OTHER_ARRAY_TYPE>
126  m_pPtr(rOther.m_pPtr)
127  {
128  }
129 
135  m_pPtr(rOther.m_pPtr)
136  {
137  }
138 
144  template<typename YI_OTHER_ARRAY_TYPE>
146  m_pPtr(rOther.m_pPtr)
147  {
148  }
149 
154  inline void Reset()
155  {
156  m_pPtr.Reset();
157  }
158 
162  inline YI_ARRAY_TYPE *Get() const
163  {
164  return m_pPtr.Get();
165  }
166 
170  inline bool IsNull() const
171  {
172  return m_pPtr.IsNull();
173  }
174 
178  inline uint32_t GetUseCount() const
179  {
180  return m_pPtr.GetUseCount();
181  }
182 
187  {
188  m_pPtr.Swap(rPtr.m_pPtr);
189  }
190 
194  inline bool operator!() const
195  {
196  return !m_pPtr;
197  }
198 
222  inline operator YI_UNSPECIFIED_BOOL_TYPE() const
223  {
224  return m_pPtr.IsNull() ? nullptr : &CYIWeakArray<YI_ARRAY_TYPE>::m_pPtr;
225  }
226 
233  {
234  m_pPtr = rOther.m_pPtr;
235  return *this;
236  }
237 
243  template<typename YI_OTHER_PTR_TYPE>
245  {
246  m_pPtr = rOther.m_pPtr;
247  return *this;
248  }
249 
250 
257  {
258  m_pPtr = rOther.m_pPtr;
259  return *this;
260  }
261 
267  template<typename YI_OTHER_PTR_TYPE>
269  {
270  m_pPtr = rOther.m_pPtr;
271  return *this;
272  }
273 
284  {
285  return CYISharedArray<YI_ARRAY_TYPE>(*this);
286  }
287 
288 private:
290 };
291 
293 
294 template<typename YI_L_ARRAY_TYPE, typename YI_R_ARRAY_TYPE>
296 {
297  return rLhs.Get() == rRhs.Get();
298 }
299 
300 template<typename YI_L_ARRAY_TYPE, typename YI_R_ARRAY_TYPE>
302 {
303  return rLhs.Get() != rRhs.Get();
304 }
305 
306 template<typename YI_L_ARRAY_TYPE, typename YI_R_ARRAY_TYPE>
308 {
309  return rLhs.Get() == rRhs.Get();
310 }
311 
312 template<typename YI_L_ARRAY_TYPE, typename YI_R_ARRAY_TYPE>
314 {
315  return rLhs.Get() != rRhs.Get();
316 }
317 
318 template<typename YI_L_PTR_TYPE, typename YI_R_PTR_TYPE>
319 inline bool operator==(const CYIWeakArray<YI_L_PTR_TYPE> &rLhs, const YI_R_PTR_TYPE *pRhs)
320 {
321  return rLhs.Get() == pRhs;
322 }
323 
324 template<typename YI_L_PTR_TYPE, typename YI_R_PTR_TYPE>
325 inline bool operator!=(const CYIWeakArray<YI_L_PTR_TYPE> &rLhs, const YI_R_PTR_TYPE *pRhs)
326 {
327  return rLhs.Get() != pRhs;
328 }
329 
330 template<typename YI_L_PTR_TYPE, typename YI_R_PTR_TYPE>
331 inline bool operator==(const YI_L_PTR_TYPE *pLhs, const CYIWeakArray<YI_R_PTR_TYPE> &rRhs)
332 {
333  return pLhs == rRhs.Get();
334 }
335 
336 template<typename YI_L_PTR_TYPE, typename YI_R_PTR_TYPE>
337 inline bool operator!=(const YI_L_PTR_TYPE *pLhs, const CYIWeakArray<YI_R_PTR_TYPE> &rRhs)
338 {
339  return pLhs != rRhs.Get();
340 }
341 
344 #endif /* _YI_WEAK_ARRAY_H_ */
bool IsNull() const
CYIWeakArray(const CYIWeakArray< YI_ARRAY_TYPE > &rOther)
Definition: YiWeakArray.h:114
CYIWeakArray(const CYISharedArray< YI_OTHER_ARRAY_TYPE > &rOther)
Definition: YiWeakArray.h:145
uint32_t GetUseCount() const
CYIWeakArray(const CYISharedArray< YI_ARRAY_TYPE > &rOther)
Definition: YiWeakArray.h:134
CYISharedArray< YI_ARRAY_TYPE > ToStrongArray() const
Definition: YiWeakArray.h:283
bool operator!() const
Definition: YiWeakArray.h:194
The CYISharedArray is a smart pointer that takes shared ownership of a dynamically allocated array of...
Definition: YiSharedArray.h:138
The CYIWeakArray is a smart pointer that does not take ownership of a dynamically allocated array of ...
Definition: YiSharedArray.h:13
bool operator==(const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYIWeakArray< YI_R_ARRAY_TYPE > &rRhs)
Definition: YiWeakArray.h:295
CYIWeakArray< YI_ARRAY_TYPE > & operator=(const CYISharedArray< YI_OTHER_PTR_TYPE > &rOther)
Definition: YiWeakArray.h:268
CYIWeakArray< YI_ARRAY_TYPE > & operator=(const CYIWeakArray< YI_ARRAY_TYPE > &rOther)
Definition: YiWeakArray.h:232
uint32_t GetUseCount() const
Definition: YiWeakArray.h:178
YI_PTR_TYPE * Get() const
bool operator!=(const CYISharedArray< YI_L_ARRAY_TYPE > &rLhs, const CYIWeakArray< YI_R_ARRAY_TYPE > &rRhs)
Definition: YiWeakArray.h:301
void Reset()
Definition: YiWeakArray.h:154
CYIWeakArray(const CYIWeakArray< YI_OTHER_ARRAY_TYPE > &rOther)
Definition: YiWeakArray.h:125
CYIWeakArray()
Definition: YiWeakArray.h:106
CYIWeakArray< YI_ARRAY_TYPE > & operator=(const CYISharedArray< YI_ARRAY_TYPE > &rOther)
Definition: YiWeakArray.h:256
void Swap(CYIWeakPtr< YI_PTR_TYPE > &rPtr)
YI_ARRAY_TYPE * Get() const
Definition: YiWeakArray.h:162
void Reset()
YI_ARRAY_TYPE * Get() const
Definition: YiSharedArray.h:332
CYIWeakArray< YI_ARRAY_TYPE > & operator=(const CYIWeakArray< YI_OTHER_PTR_TYPE > &rOther)
Definition: YiWeakArray.h:244
void Swap(CYIWeakArray< YI_ARRAY_TYPE > &rPtr)
Definition: YiWeakArray.h:186
bool IsNull() const
Definition: YiWeakArray.h:170