00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "weakReferenceList.h"
00016 #include "weakPointerToVoid.h"
00017 #include "pnotify.h"
00018
00019
00020
00021
00022
00023
00024 WeakReferenceList::
00025 WeakReferenceList() {
00026 }
00027
00028
00029
00030
00031
00032
00033
00034 WeakReferenceList::
00035 ~WeakReferenceList() {
00036 _lock.acquire();
00037 Pointers::iterator pi;
00038 for (pi = _pointers.begin(); pi != _pointers.end(); ++pi) {
00039 (*pi)->mark_deleted();
00040 }
00041 _lock.release();
00042 }
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 void WeakReferenceList::
00058 add_reference(WeakPointerToVoid *ptv) {
00059 _lock.acquire();
00060 bool inserted = _pointers.insert(ptv).second;
00061 _lock.release();
00062 nassertv(inserted);
00063 }
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 void WeakReferenceList::
00075 clear_reference(WeakPointerToVoid *ptv) {
00076 _lock.acquire();
00077 Pointers::iterator pi = _pointers.find(ptv);
00078 bool valid = (pi != _pointers.end());
00079 if (valid) {
00080 _pointers.erase(pi);
00081 }
00082 _lock.release();
00083 nassertv(valid);
00084 }