|
|
|
@ -76,8 +76,9 @@ public: |
|
|
|
* |
|
|
|
* |
|
|
|
* @param ptr Naked pointer to assign |
|
|
|
* @param ptr Naked pointer to assign |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
inline void setToUnsafe(T *ptr) |
|
|
|
inline void set(T *ptr) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
zero(); |
|
|
|
++ptr->__refCount; |
|
|
|
++ptr->__refCount; |
|
|
|
_ptr = ptr; |
|
|
|
_ptr = ptr; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -116,27 +117,13 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Set this pointer to NULL if this is the only pointer holding the object |
|
|
|
* @return Number of references according to this object's ref count or 0 if NULL |
|
|
|
* |
|
|
|
|
|
|
|
* @return True if object was deleted and SharedPtr is now NULL (or was already NULL) |
|
|
|
|
|
|
|
*/ |
|
|
|
*/ |
|
|
|
inline bool reclaimIfWeak() |
|
|
|
inline int references() |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (_ptr) { |
|
|
|
if (_ptr) |
|
|
|
if (++_ptr->__refCount <= 2) { |
|
|
|
return _ptr->__refCount.load(); |
|
|
|
if (--_ptr->__refCount <= 1) { |
|
|
|
return 0; |
|
|
|
delete _ptr; |
|
|
|
|
|
|
|
_ptr = (T *)0; |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline bool operator==(const SharedPtr &sp) const { return (_ptr == sp._ptr); } |
|
|
|
inline bool operator==(const SharedPtr &sp) const { return (_ptr == sp._ptr); } |
|
|
|
|