00001 #ifndef COMMONS_DEQUE_H 00002 #define COMMONS_DEQUE_H 00003 00004 #include <list> 00005 #include <vector> 00006 00007 namespace commons 00008 { 00009 using namespace std; 00010 00019 template <typename T> 00020 class deque 00021 { 00022 private: 00023 class chunk 00024 { 00025 public: 00026 chunk() : xs(node_size) {} 00027 private: 00028 vector<T> xs; 00029 }; 00030 00031 list<chunk> chunks; 00032 size_t node_size; 00033 public: 00034 deque(size_t node_size = 8192) : node_size(node_size) {} 00035 00036 void push_back(const T& x) 00037 { 00038 chunk& last = chunks.back(); 00039 if (last.xs.size() == last.xs.capacity()) { 00040 chunks.push_back(chunk()); 00041 } 00042 last.push_back(x); 00043 } 00044 }; 00045 } 00046 00047 #endif