38 #ifndef BLOCXX_COWREFERENCE_HPP_INCLUDE_GUARD_
39 #define BLOCXX_COWREFERENCE_HPP_INCLUDE_GUARD_
40 #include "blocxx/BLOCXX_config.h"
45 namespace BLOCXX_NAMESPACE
148 COWReference<U>
cast_to() const;
153 #if !defined(__GNUC__) || __GNUC__ > 2 // causes gcc 2.95 to ICE
155 template <
class U>
friend class COWReference;
204 typedef char type_must_be_complete[
sizeof(T)];
257 #ifdef BLOCXX_CHECK_NULL_REFERENCES
258 ReferenceHelpers::checkNull(
this);
259 ReferenceHelpers::checkNull(m_pObj);
269 #ifdef BLOCXX_CHECK_NULL_REFERENCES
270 ReferenceHelpers::checkNull(
this);
271 ReferenceHelpers::checkNull(m_pObj);
281 #ifdef BLOCXX_CHECK_NULL_REFERENCES
282 ReferenceHelpers::checkNull(
this);
283 ReferenceHelpers::checkNull(m_pObj);
292 #ifdef BLOCXX_CHECK_NULL_REFERENCES
293 ReferenceHelpers::checkNull(
this);
294 ReferenceHelpers::checkNull(m_pObj);
309 return (m_pObj == 0);
318 rval.
m_pObj =
dynamic_cast<U*
>(m_pObj);
335 template <
class T,
class U>
341 template <
class T,
class U>
347 template <
class T,
class U>
350 return a.
getPtr() < b.getPtr();
364 #endif // BLOCXX_COWREFERENCE_HPP_
void swap(COWReferenceBase &arg)
bool operator!=(const Array< T > &x, const Array< T > &y)
Determine two Arrays are not equal.
void useRefCountOf(const COWReference< U > &)
const UInt32 INFINITE_TIMEOUT BLOCXX_DEPRECATED
Value that means infinite timeout.
void swap(Array< T > &x, Array< T > &y)
void swap(COWReference< T > &arg)
#define BLOCXX_SAFE_BOOL_IMPL(classname, type, variable, test)
~COWReference()
Destroy this COWReference.
COWReference()
Default constructor The underlying object pointer will be NULL.
void useRefCountOf(const COWReferenceBase &arg)
bool operator==(const Array< T > &x, const Array< T > &y)
bool refCountGreaterThanOne() const
bool isNull() const BLOCXX_DEPRECATED
COWReference A smart pointer that uses non-intrusive reference counting.
COWReference< U > cast_to() const
COWReference< T > & operator=(const COWReference< T > &arg)
Assignment operator.
T * COWReferenceClone(T *obj)
void COWRefSwap(T &x, T &y)