00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <vector>
00011 using namespace std;
00012
00013 #include <windows.h>
00014
00015 #ifndef _SIMPLEUNIT_MANAGER_HH_
00016 #define _SIMPLEUNIT_MANAGER_HH_
00017
00018 namespace NSSimpleUnit
00019 {
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 template <typename T>
00031 class TManager
00032 {
00033
00034 public:
00035 TManager(void);
00036 TManager(DWORD size);
00037 ~TManager( void );
00038
00039 T* GetItem(void);
00040 void PushItem(T * item );
00041
00042
00043 public:
00044 static DWORD GetAllocCount(void);
00045
00046
00047 private:
00048 TManager( const TManager & orig);
00049 void operator=( const TManager & orig );
00050
00051
00052 private:
00053 vector<T*> m_objects;
00054
00055 static DWORD ms_alloc_count;
00056 };
00057
00058
00059
00060
00061
00062
00063 template <typename T>
00064 inline TManager<T>::TManager(void)
00065 {
00066 }
00067
00068
00069
00070
00071
00072 template <typename T>
00073 inline TManager<T>::TManager(DWORD size)
00074 {
00075 for ( DWORD i = 0; i < size ; i++ )
00076 {
00077 ms_alloc_count++;
00078 m_objects.push_back( new T );
00079 }
00080 }
00081
00082
00083
00084
00085
00086
00087 template <typename T>
00088 inline TManager<T>::~TManager(void)
00089 {
00090 while ( ! m_objects.empty() )
00091 {
00092 T * ptr = m_objects.back();
00093 delete ptr;
00094 m_objects.pop_back();
00095 }
00096 }
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 template <typename T>
00107 inline T* TManager<T>::GetItem(void)
00108 {
00109 if ( ! m_objects.empty() )
00110 {
00111
00112 T * ptr = m_objects.back();
00113 m_objects.pop_back();
00114
00115 return ptr;
00116 }
00117 else
00118 {
00119
00120 ms_alloc_count++;
00121 return new T;
00122 }
00123 }
00124
00125
00126
00127
00128
00129
00130 template <typename T>
00131 inline void TManager<T>::PushItem( T * item )
00132 {
00133 m_objects.push_back( item );
00134 }
00135
00136
00137
00138
00139 template <typename T>
00140 inline DWORD TManager<T>::GetAllocCount(void)
00141 {
00142 return ms_alloc_count;
00143 }
00144
00145
00146 };
00147 using namespace NSSimpleUnit;
00148
00149 #endif