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