/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.09.17 * ³» ¿ë : ¸Þ¸ð¸® Ç® * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Allocator.h" #include "HashSet.h" template class tPool; /// ¸Þ¸ð¸® Ç® ³ëµå template > class tPoolNode { typedef tPoolNode cSelf; friend class tPool; protected: tPoolNode( unsigned int capacity ); ~tPoolNode(); /// ¿ÀºêÁ§Æ®¸¦ ¸®ÅÏ T* GetObject( unsigned int i ); protected: /// ¿ÀºêÁ§Æ® ¹è¿­ T* mpObjectArray; /// Å©±â (¿ÀºêÁ§Æ® ¼ö) unsigned int mCapacity; /// ´ÙÀ½ ³ëµå cSelf* mpNext; private: tPoolNode( const cSelf& ); cSelf& operator = ( const cSelf& ); }; /// ¸Þ¸ð¸® Ç® template class tPool { typedef tPool cSelf; typedef tPoolNode cNode; public: explicit tPool( unsigned int initialCapacity = 0, unsigned int stepCapacity = 0, unsigned int hashHint = 1000 ); ~tPool(); /// ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ¸ðµÎ Á¦°Å void Clear(); /// ¿ë·®À» ¼³Á¤ void Reserve( unsigned int capacity, unsigned int stepCapacity = 0 ); /// ÇÒ´ç T* Alloc(); /// ÇØÁ¦ void Free( T* p ); /// Å©±â(ÇÒ´çµÈ ¿ÀºêÁ§Æ® ¼ö)¸¦ ¸®ÅÏ unsigned int GetSize() const; /// ¿ë·®À» ¸®ÅÏ unsigned int GetCapacity() const; protected: /// »õ·Î¿î ³ëµå¸¦ »ý¼º bool CreateNode( unsigned int capacity ); protected: /// ÀÚÀ¯ ¿ÀºêÁ§Æ® ™V typedef tHashSet cObjectSet; cObjectSet mFreeObjectSet; /// ·çÆ® ³ëµå cNode* mpRootNode; /// Å©±â unsigned int mSize; /// ¿ë·® unsigned int mCapacity; /// Ãʱ⠿뷮 unsigned int mInitialCapacity; /// Áõ°¡ ¿ë·® unsigned int mStepCapacity; private: tPool( const cSelf& ); cSelf& operator = ( const cSelf& ); }; #include "Pool.inl"