31 #ifndef PTLIB_SAFE_COLLECTION_H
32 #define PTLIB_SAFE_COLLECTION_H
263 mutable PMutex safetyMutex;
264 unsigned safeReferenceCount;
265 bool safelyBeingRemoved;
563 virtual void Assign(PINDEX idx);
693 virtual void Assign(PINDEX idx);
729 template <
class T,
class BaseClass = PSafePtrBase>
class PSafePtr :
public BaseClass
744 ) : BaseClass(obj, mode) { }
757 ) : BaseClass(safeCollection, mode, idx) { }
770 ) : BaseClass(safeCollection, mode, obj) { }
779 ) : BaseClass(ptr) { }
788 BaseClass::Assign(ptr);
798 BaseClass::Assign(safeCollection);
834 BaseClass::Assign(idx);
843 operator T*()
const {
return (T *)BaseClass::currentObject; }
859 T * previous = (T *)BaseClass::currentObject;
871 return (T *)BaseClass::currentObject;
880 T * previous = (T *)BaseClass::currentObject;
881 BaseClass::Previous();
891 BaseClass::Previous();
892 return (T *)BaseClass::currentObject;
916 template <
class Base,
class Derived>
921 Base * realPtr = oldPtr;
923 newPtr.Assign(oldPtr);
965 if (&other !=
this) {
987 obj->SafeReference())
1044 ptr.SetSafetyMode(mode);
1120 if (&other !=
this) {
1136 virtual void SetAt(
const Key & key, Base * obj)
1141 obj->SafeReference())
1194 ptr.SetSafetyMode(mode);
1223 #endif // PTLIB_SAFE_COLLECTION_H