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