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);
78 const data_type&
data()
const {
return m_data; }
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();
#define END_NAMESPACE_PBORI
Finish project's namespace.
Definition: pbori_defs.h:77
~CExtrusivePtr()
Destructor.
Definition: CExtrusivePtr.h:69
self & operator=(const self &rhs)
Assignment.
Definition: CExtrusivePtr.h:72
CExtrusivePtr(const data_type &data, value_type *ptr)
Construct managed pointer with additional data.
Definition: CExtrusivePtr.h:58
#define BEGIN_NAMESPACE_PBORI
Start project's namespace.
Definition: pbori_defs.h:74
value_type * get() const
Get actual pointer.
Definition: CExtrusivePtr.h:81
const value_type & operator*() const
Constant dereferencing.
Definition: CExtrusivePtr.h:86
const data_type & data() const
Accessing helpter data.
Definition: CExtrusivePtr.h:78
CExtrusivePtr(const self &rhs)
Copy constructor.
Definition: CExtrusivePtr.h:62
bool operator==(Type1 *lhs, const CExtrusivePtr< Data2, Type2 > &rhs)
Equality check from a pointer.
Definition: CExtrusivePtr.h:157
void extrusive_ptr_add_ref(const DataType &, DdNode *ptr)
Incrememting reference counts to raw pointers to decision diagrams.
Definition: CCuddDDFacade.h:75
value_type * p_ptr
Store actual pointer.
Definition: CExtrusivePtr.h:121
ValueType value_type
Value type.
Definition: CExtrusivePtr.h:55
DataType data_type
Type for additional data storange.
Definition: CExtrusivePtr.h:52
data_type m_data
Store helper data.
Definition: CExtrusivePtr.h:118
value_type * operator->() const
Pointer operator.
Definition: CExtrusivePtr.h:98
#define PBORI_ASSERT(arg)
Definition: pbori_defs.h:118
void swap(self &rhs)
Swap.
Definition: CExtrusivePtr.h:104
void release()
Definition: CExtrusivePtr.h:113
This template class defines a reimplementation of the interface from boost:intrusive_ptr, but with an additional data field.
Definition: CExtrusivePtr.h:44
CExtrusivePtr()
Definition: CExtrusivePtr.h:65
value_type & operator*()
Nonconstant dereference.
Definition: CExtrusivePtr.h:92
void extrusive_ptr_release(const DataType &data, DdNode *ptr)
Releasing raw pointers to decision diagrams here.
Definition: CCuddDDFacade.h:66
bool operator!=(Type1 *lhs, const CExtrusivePtr< Data2, Type2 > &rhs)
Nonequality check from a pointer.
Definition: CExtrusivePtr.h:164
void lock()
Definition: CExtrusivePtr.h:110