18 #ifndef polybori_common_CExtrusivePtr_h_
19 #define polybori_common_CExtrusivePtr_h_
43 template <
class DataType,
class ValueType>
59 m_data(data), p_ptr(ptr) { lock(); }
63 m_data(rhs.m_data), p_ptr(rhs.p_ptr) { lock(); }
66 m_data(), p_ptr(NULL) { }
73 self(rhs).swap(*
this);
81 value_type*
get()
const {
105 std::swap(m_data, rhs.m_data);
106 std::swap(p_ptr, rhs.p_ptr);
125 template <
class Data1,
class Type1,
class Data2,
class Type2>
129 return lhs.
get() == rhs.
get();
133 template <
class Data1,
class Type1,
class Data2,
class Type2>
137 return lhs.
get() != rhs.
get();
141 template <
class Data1,
class Type1,
class Type2>
144 return lhs.
get() == rhs;
148 template <
class Data1,
class Type1,
class Type2>
151 return lhs.
get() != rhs;
155 template <
class Type1,
class Data2,
class Type2>
158 return lhs == rhs.
get();
162 template <
class Type1,
class Data2,
class Type2>
165 return lhs != rhs.
get();