21 template<
typename T>
class observer_ptr;
31 ref_ptr(T* ptr) : _ptr(ptr) {
if (_ptr) _ptr->ref(); }
35 ~ref_ptr() {
if (_ptr) _ptr->unref(); _ptr = 0; }
51 if (_ptr==ptr)
return *
this;
54 if (_ptr) _ptr->ref();
58 if (tmp_ptr) tmp_ptr->unref();
62 #ifdef OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION
64 operator T*()
const {
return _ptr; }
83 typedef T*
ref_ptr::*unspecified_bool_type;
87 operator unspecified_bool_type()
const {
return valid()? &ref_ptr::_ptr : 0; }
92 T*
get()
const {
return _ptr; }
95 bool valid()
const {
return _ptr!=0; }
101 T*
release() { T* tmp=_ptr;
if (_ptr) _ptr->unref_nodelete(); _ptr=0;
return tmp; }
103 void swap(
ref_ptr& rp) { T* tmp=_ptr; _ptr=rp._ptr; rp._ptr=tmp; }
109 if (_ptr==rp._ptr)
return;
112 if (_ptr) _ptr->ref();
116 if (tmp_ptr) tmp_ptr->unref();
125 template<
class T>
inline
128 template<
class T>
inline
131 template<
class T,
class Y>
inline
134 template<
class T,
class Y>
inline
137 template<
class T,
class Y>
inline
bool operator<(const ref_ptr &rp) const
ref_ptr< T > const_pointer_cast(const ref_ptr< Y > &rp)
ref_ptr(const ref_ptr &rp)
T * get_pointer(const ref_ptr< T > &rp)
void swap(MixinVector< ValueT > &left, MixinVector< ValueT > &right)
ref_ptr & operator=(const ref_ptr &rp)
ref_ptr(const ref_ptr< Other > &rp)
ref_ptr< T > dynamic_pointer_cast(const ref_ptr< Y > &rp)
bool operator!=(const ref_ptr &rp) const
bool lock(ref_ptr< T > &rptr) const
bool operator==(const ref_ptr &rp) const
ref_ptr(observer_ptr< T > &optr)
ref_ptr< T > static_pointer_cast(const ref_ptr< Y > &rp)