00001 #ifndef __INSTANTIO_BASICREFCTR_H
00002 #define __INSTANTIO_BASICREFCTR_H
00003
00004 #ifdef _MSC_VER
00005 # pragma once
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "InstantIODef.h"
00027 namespace Medusa
00028 {
00029 class Mutex;
00030 }
00031
00032
00033 namespace InstantIO
00034 {
00035
00036
00043 class INSTANTIO_DLLMAPPING BasicRefCtr
00044 {
00045 public:
00046
00048 typedef unsigned long ReferenceCounter;
00049
00055 ReferenceCounter incrementReferenceCounter();
00056
00062 ReferenceCounter decrementReferenceCounter();
00063
00068 ReferenceCounter referenceCounter() const;
00069
00070 protected:
00071
00076 BasicRefCtr();
00077
00081 ~BasicRefCtr();
00082
00083 private:
00084
00086 BasicRefCtr(const BasicRefCtr &);
00087
00089 const BasicRefCtr &operator=(const BasicRefCtr &);
00090
00092 Medusa::Mutex *mutex_;
00093
00095 volatile ReferenceCounter referenceCounter_;
00096 };
00097
00098
00099 }
00100
00101
00102 #endif // __INSTANTIO_BASICREFCTR_H