00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _QORE_QOREREFERENCECOUNTER_H
00025
00026 #define _QORE_QOREREFERENCECOUNTER_H
00027
00028 #include <qore/common.h>
00029 #include <qore/macros.h>
00030
00031 class QoreThreadLock;
00032
00034 class QoreReferenceCounter
00035 {
00036 protected:
00037 mutable int references;
00038 #ifndef HAVE_ATOMIC_MACROS
00040 mutable QoreThreadLock mRO;
00041 #endif
00042
00043 public:
00045 DLLEXPORT QoreReferenceCounter();
00046
00048 DLLEXPORT ~QoreReferenceCounter();
00049
00051
00054 DLLEXPORT int reference_count() const
00055 {
00056 return references;
00057 }
00058
00060
00063 DLLEXPORT bool is_unique() const
00064 {
00065 return references == 1;
00066 }
00067
00069 DLLEXPORT void ROreference() const;
00070
00072
00076 DLLEXPORT bool ROdereference() const;
00077 };
00078
00079 #endif // _QORE_QOREREFERENCECOUNTER_H