00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef NEWNET_REFCOUNTER_H
00021 #define NEWNET_REFCOUNTER_H
00022
00023 #ifdef NN_PTR_DEBUG
00024 #ifdef NN_PTR_DEBUG_ASSERT
00025 #include <assert.h>
00026 #else
00027 #include <iostream>
00028 #endif // NN_PTR_DEBUG_ASSERT
00029 #endif // NN_PTR_DEBUG
00030
00031 namespace NewNet
00032 {
00034
00038 class RefCounter
00039 {
00040 public:
00042
00044 RefCounter() : m_RefCount(0)
00045 {
00046 }
00047
00049
00050 void operator++()
00051 {
00052 m_RefCount += 1;
00053 }
00054
00056
00058 bool operator--()
00059 {
00060 #ifdef NN_PTR_DEBUG
00061 #ifdef NN_PTR_DEBUG_ASSERT
00062 assert(m_RefCount > 0);
00063 #else
00064 if(m_RefCount == 0)
00065 {
00066 std::cerr << "Warning: Attempting to decrement refcount of unreferenced object!" << std::endl;
00067 return true;
00068 }
00069 #endif // NN_PTR_DEBUG_ASSERT
00070 #endif // NN_PTR_DEBUG
00071 m_RefCount -= 1;
00072 return m_RefCount == 0;
00073 }
00074
00076
00077 unsigned int count()
00078 {
00079 return m_RefCount;
00080 }
00081
00082 private:
00083 unsigned int m_RefCount;
00084 };
00085 }
00086
00087 #endif // NEWNET_REFCOUNTER_H