00001 #if !defined(__MCREFCOUNT_H_)
00002 #define __MCREFCOUNT_H_
00003
00004 #ident "@(#)$Id: MCRefCount.h,v 1.7 2004/12/02 07:05:20 mike Exp $"
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "mcllib/MCTypes.h"
00026 #include "mcllib/MCTypeTraits.h"
00027
00028 namespace mcllib
00029 {
00030 class MCRefCountAccessorBase;
00031
00041 class MCRefCount
00042 {
00043 public:
00045 MCRefCount();
00047 MCRefCount(const MCRefCount& rc);
00049 MCRefCount& operator=(const MCRefCount& rc);
00051 ~MCRefCount();
00052 private:
00054 mcatomic_t m_cnt;
00056 friend class MCRefCountAccessorBase;
00057 };
00058
00065 template<typename T>
00066 class MCRefCountWrap : public MCRefCount
00067 {
00068 private:
00069 typedef MCTypeTraits<T> traits;
00070 typedef typename traits::copy_param_type copy_param_type;
00071 typedef typename traits::copy_return_type copy_return_type;
00072 public:
00074 MCRefCountWrap();
00076 MCRefCountWrap(copy_param_type data)
00077 : m_data(data)
00078 {
00079 }
00081 inline operator T&()
00082 {
00083 return(m_data);
00084 }
00085 private:
00086 T m_data;
00087 };
00088
00089
00090
00091
00092 template<typename T>
00093 MCRefCountWrap<T>::MCRefCountWrap()
00094 {
00095 }
00096
00097 };
00098
00099 #endif