00001 #ifndef _STORE_HPP 00002 #define _STORE_HPP 00003 00004 #include <stack> 00005 00014 template <typename T> 00015 class Store { 00016 00017 protected: 00018 00022 std::stack<T*> items; 00023 00024 public: 00025 00029 Store() { } 00030 00034 ~Store(); 00035 00039 T* newItem(); 00040 00044 void deleteItem(T* item); 00045 00046 }; 00047 00048 template <typename T> 00049 Store<T>::~Store() { 00050 while (!items.empty()) { 00051 delete items.top(); 00052 items.pop(); 00053 } 00054 } 00055 00056 template <typename T> 00057 T* Store<T>::newItem() { 00058 if (items.empty()) 00059 return new T(); 00060 else { 00061 T* item = items.top(); 00062 items.pop(); 00063 return item; 00064 } 00065 } 00066 00067 template <typename T> 00068 void Store<T>::deleteItem(T* item) { 00069 items.push(item); 00070 } 00071 00072 #endif