31 #ifndef PTLIB_SAFE_COLLECTION_H
32 #define PTLIB_SAFE_COLLECTION_H
275 mutable PMutex safetyMutex;
276 unsigned safeReferenceCount;
277 bool safelyBeingRemoved;
601 virtual void Assign(PINDEX idx);
734 virtual void Assign(PINDEX idx);
770 template <
class T,
class BaseClass = PSafePtrBase>
class PSafePtr :
public BaseClass
785 ) : BaseClass(obj, mode) { }
798 ) : BaseClass(safeCollection, mode, idx) { }
811 ) : BaseClass(safeCollection, mode, obj) { }
820 ) : BaseClass(ptr) { }
829 BaseClass::Assign(ptr);
839 BaseClass::Assign(safeCollection);
875 BaseClass::Assign(idx);
897 operator T*()
const {
return dynamic_cast<T *
>(BaseClass::currentObject); }
913 T * previous =
dynamic_cast<T *
>(BaseClass::currentObject);
925 return dynamic_cast<T *
>(BaseClass::currentObject);
934 T * previous =
dynamic_cast<T *
>(BaseClass::currentObject);
935 BaseClass::Previous();
945 BaseClass::Previous();
946 return dynamic_cast<T *
>(BaseClass::currentObject);
955 template <
class Base,
class Derived>
959 if (dynamic_cast<Derived *>(oldPtr.GetObject()) != NULL)
960 newPtr.Assign(oldPtr);
1002 if (&other !=
this) {
1080 ptr.SetSafetyMode(mode);
1156 if (&other !=
this) {
1172 virtual void SetAt(
const Key & key, Base * obj)
1175 if (
SafeAddObject(obj, dynamic_cast<Coll &>(*collection).GetAt(key)))
1176 dynamic_cast<Coll &
>(*collection).SetAt(key, obj);
1192 return SafeRemove(dynamic_cast<Coll &>(*collection).GetAt(key));
1201 return dynamic_cast<Coll &
>(*collection).Contains(key);
1228 ptr.SetSafetyMode(mode);
1238 dynamic_cast<Coll &
>(*collection).AbstractGetKeys(keys);
1250 template <
class K,
class D>
1380 #endif // PTLIB_SAFE_COLLECTION_H