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