deba@571: #ifndef VECTOR_MAP_H
deba@571: #define VECTOR_MAP_H
deba@571: 
deba@571: #include <vector>
deba@571: 
deba@627: #include "map_registry.h"
deba@571: 
deba@571: namespace hugo {
deba@571: 	
deba@627:   template <typename MapRegistry>
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 <typename V> 
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<Value> Container;
deba@571: 		
deba@627:       Container container;
deba@627:     };
deba@571: 		
deba@627:   };
deba@571: }
deba@571: 
deba@571: #endif