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