00001 #ifndef SCTDATA_OBJECTPOOL_H 00002 #define SCTDATA_OBJECTPOOL_H 00003 00004 #include <list> 00005 #include <boost/shared_ptr.hpp> 00006 #include <boost/thread/mutex.hpp> 00007 00008 using boost::shared_ptr; 00009 using boost::mutex; 00010 using std::list; 00011 00012 namespace SctData { 00013 00014 template<typename T> class ObjectPoolDeleter; 00015 00031 template<typename T> 00032 class ObjectPool { 00033 public: 00034 ~ObjectPool(); 00035 00040 shared_ptr<T> get(); 00041 00047 void clear(); 00048 00053 unsigned int poolSize() const; 00054 00059 void resize(unsigned int n); 00060 00061 private: 00066 shared_ptr<T> wrap(T* ptr); 00067 00071 T* create(); 00072 00073 friend class ObjectPoolDeleter<T>; 00074 list<T*> pool; 00075 mutex poolMutex; 00076 }; 00077 00078 00079 } 00080 #include "ObjectPool.inl" 00081 00082 #endif //SCTDATA_OBJECTPOOL_H