00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "referenceCount.h"
00016 #include "atomicAdjust.h"
00017 #include "mutexImpl.h"
00018
00019 TypeHandle ReferenceCount::_type_handle;
00020
00021
00022
00023
00024
00025
00026
00027
00028 bool ReferenceCount::
00029 do_test_ref_count_integrity() const {
00030 nassertr(this != NULL, false);
00031
00032
00033
00034
00035
00036
00037
00038
00039 nassertr(_ref_count != deleted_ref_count, false);
00040
00041
00042
00043
00044 nassertr(_ref_count >= 0, false);
00045
00046 return true;
00047 }
00048
00049
00050
00051
00052
00053
00054
00055 bool ReferenceCount::
00056 do_test_ref_count_nonzero() const {
00057 nassertr(do_test_ref_count_integrity(), false);
00058 nassertr(_ref_count > 0, false);
00059
00060 return true;
00061 }
00062
00063
00064
00065
00066
00067
00068
00069 void ReferenceCount::
00070 create_weak_list() {
00071 WeakReferenceList *weak_list = new WeakReferenceList;
00072 void *orig =
00073 AtomicAdjust::compare_and_exchange_ptr((void *&)_weak_list, NULL, weak_list);
00074 if (orig != (void *)NULL) {
00075
00076 delete weak_list;
00077 }
00078 }
00079