23 #ifndef USSHAREDDATA_H
24 #define USSHAREDDATA_H
26 #include <usAtomicInt_p.h>
44 mutable AtomicInt
ref;
70 inline void Detach() {
if (d && d->ref != 1) Detach_helper(); }
75 inline operator T*() {
Detach();
return d; }
76 inline operator const T*()
const {
return d; }
78 inline const T*
Data()
const {
return d; }
98 if (old && !old->ref.Deref())
112 if (old && !old->ref.Deref())
130 void Detach_helper();
154 inline T*
Data()
const {
return d; }
157 inline void Detach() {
if (d && d->ref != 1) Detach_helper(); }
161 if(d && !d->ref.Deref())
167 inline operator bool ()
const {
return d !=
nullptr; }
171 inline bool operator==(
const T* ptr)
const {
return d == ptr; }
172 inline bool operator!=(
const T* ptr)
const {
return d != ptr; }
179 : d(o.d) {
if (d) d->ref.Ref(); }
183 : d(static_cast<T*>(o.
Data()))
197 if (old && !old->ref.Deref())
211 if (old && !old->ref.Deref())
229 void Detach_helper();
237 {
if (d) d->ref.Ref(); }
274 {
if (d) d->ref.Ref(); }
A pointer to explicitly shared data requiring manual detach for copy-on-write.
bool operator==(const ExplicitlySharedDataPointer< T > &other) const
ExplicitlySharedDataPointer(const ExplicitlySharedDataPointer< X > &o)
ExplicitlySharedDataPointer & operator=(T *o)
const T * ConstData() const
bool operator!=(const T *ptr) const
bool operator!=(const ExplicitlySharedDataPointer< T > &other) const
ExplicitlySharedDataPointer< T > & operator=(const ExplicitlySharedDataPointer< T > &o)
~ExplicitlySharedDataPointer()
ExplicitlySharedDataPointer(T *data)
ExplicitlySharedDataPointer(const ExplicitlySharedDataPointer< T > &o)
bool operator==(const T *ptr) const
ExplicitlySharedDataPointer()
void Swap(ExplicitlySharedDataPointer &other)
A pointer to implicitly shared data with automatic copy-on-write semantics.
const T * ConstData() const
bool operator!=(const SharedDataPointer< T > &other) const
SharedDataPointer & operator=(T *o)
const T & operator*() const
void Swap(SharedDataPointer &other)
SharedDataPointer(T *data)
SharedDataPointer< T > & operator=(const SharedDataPointer< T > &o)
const T * operator->() const
SharedDataPointer(const SharedDataPointer< T > &o)
bool operator==(const SharedDataPointer< T > &other) const
Base class for implicitly shared data with reference counting.
SharedData(const SharedData &)
void swap(us::SharedDataPointer< T > &p1, us::SharedDataPointer< T > &p2)
void swap(us::ExplicitlySharedDataPointer< T > &p1, us::ExplicitlySharedDataPointer< T > &p2)