deba@571: #ifndef VECTOR_MAP_H deba@571: #define VECTOR_MAP_H deba@571: deba@571: #include deba@571: deba@627: #include "map_registry.h" deba@571: deba@571: namespace hugo { deba@571: deba@627: template deba@627: class VectorMapFactory { deba@627: public: deba@627: deba@627: typedef typename MapRegistry::Graph Graph; deba@627: typedef typename MapRegistry::Key Key; deba@627: typedef typename MapRegistry::KeyIt KeyIt; deba@627: deba@627: typedef typename MapRegistry::MapBase MapBase; deba@627: deba@627: template deba@627: class Map : public MapBase { deba@627: public: deba@627: typedef V Value; deba@571: deba@627: Map() {} deba@627: deba@627: Map(Graph& g, MapRegistry& r) : MapBase(g, r) { deba@627: init(); deba@627: } deba@627: deba@627: deba@627: virtual ~Map() { deba@627: destroy(); deba@627: } deba@571: deba@627: deba@627: Value& operator[](const Key& key) { deba@627: int id = graph->id(key); deba@627: return container[id]; deba@627: } deba@571: deba@627: const Value& operator[](const Key& key) const { deba@627: int id = graph->id(key); deba@627: return container[id]; deba@627: } deba@627: deba@627: const Value& get(const Key& key) const { deba@627: int id = graph->id(key); deba@627: return container[id]; deba@627: } deba@571: deba@627: void set(const Key& key, const Value& val) { deba@627: int id = graph->id(key); deba@627: container[id] = val; deba@627: } deba@627: deba@627: void add(const Key& key) { deba@627: int id = graph->id(key); deba@627: if (id >= container.size()) { deba@627: container.resize(id + 1); deba@627: } deba@627: } deba@627: deba@627: void erase(const Key& key) {} deba@571: deba@627: private: deba@627: typedef std::vector Container; deba@571: deba@627: Container container; deba@627: }; deba@571: deba@627: }; deba@571: } deba@571: deba@571: #endif