48 #ifndef BLOCXX_COW_INTRUSIVE_REFERENCE_HPP_INCLUDE_GUARD_
49 #define BLOCXX_COW_INTRUSIVE_REFERENCE_HPP_INCLUDE_GUARD_
51 #include "blocxx/BLOCXX_config.h"
83 template<
class T>
class COWIntrusiveReference
203 #ifdef BLOCXX_CHECK_NULL_REFERENCES
204 ReferenceHelpers::checkNull(
this);
205 ReferenceHelpers::checkNull(
m_pObj);
216 #ifdef BLOCXX_CHECK_NULL_REFERENCES
217 ReferenceHelpers::checkNull(
this);
218 ReferenceHelpers::checkNull(
m_pObj);
229 #ifdef BLOCXX_CHECK_NULL_REFERENCES
230 ReferenceHelpers::checkNull(
this);
231 ReferenceHelpers::checkNull(
m_pObj);
243 #ifdef BLOCXX_CHECK_NULL_REFERENCES
244 ReferenceHelpers::checkNull(
this);
245 ReferenceHelpers::checkNull(
m_pObj);
274 #if !defined(__GNUC__) || __GNUC__ > 2 // causes gcc 2.95 to ICE
296 template<
class T,
class U>
inline bool operator==(COWIntrusiveReference<T>
const & a, COWIntrusiveReference<U>
const & b)
298 return a.getPtr() == b.getPtr();
300 template<
class T,
class U>
inline bool operator!=(COWIntrusiveReference<T>
const & a, COWIntrusiveReference<U>
const & b)
302 return a.getPtr() != b.getPtr();
306 return a.getPtr() == b;
308 template<
class T>
inline bool operator!=(COWIntrusiveReference<T>
const & a,
const T * b)
310 return a.getPtr() != b;
314 return a == b.getPtr();
318 return a != b.getPtr();
320 #if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
324 return a.getPtr() != b.getPtr();
329 return a.getPtr() < b.getPtr();
331 template<
class T>
void swap(COWIntrusiveReference<T> & lhs, COWIntrusiveReference<T> & rhs)