31 #ifndef PTLIB_SAFE_COLLECTION_H
32 #define PTLIB_SAFE_COLLECTION_H
263 mutable PMutex safetyMutex;
264 unsigned safeReferenceCount;
265 bool safelyBeingRemoved;
573 virtual void Assign(PINDEX idx);
706 virtual void Assign(PINDEX idx);
742 template <
class T,
class BaseClass = PSafePtrBase>
class PSafePtr :
public BaseClass
757 ) : BaseClass(obj, mode) { }
770 ) : BaseClass(safeCollection, mode, idx) { }
783 ) : BaseClass(safeCollection, mode, obj) { }
792 ) : BaseClass(ptr) { }
801 BaseClass::Assign(ptr);
811 BaseClass::Assign(safeCollection);
847 BaseClass::Assign(idx);
869 operator T*()
const {
return (T *)BaseClass::currentObject; }
885 T * previous = (T *)BaseClass::currentObject;
897 return (T *)BaseClass::currentObject;
906 T * previous = (T *)BaseClass::currentObject;
907 BaseClass::Previous();
917 BaseClass::Previous();
918 return (T *)BaseClass::currentObject;
927 template <
class Base,
class Derived>
932 Base * realPtr = oldPtr;
934 newPtr.Assign(oldPtr);
976 if (&other !=
this) {
998 obj->SafeReference())
1055 ptr.SetSafetyMode(mode);
1131 if (&other !=
this) {
1147 virtual void SetAt(
const Key & key, Base * obj)
1152 obj->SafeReference())
1205 ptr.SetSafetyMode(mode);
1234 #endif // PTLIB_SAFE_COLLECTION_H