src/work/deba/vector_map_factory.h
author athos
Tue, 11 May 2004 15:42:11 +0000
changeset 607 327f7cf13843
parent 571 9632ea8be6ca
child 627 6cc21a9c9fda
permissions -rw-r--r--
Finished MinLengthPaths: a specialization of MinCostFlows.
     1 #ifndef VECTOR_MAP_H
     2 #define VECTOR_MAP_H
     3 
     4 #include <vector>
     5 
     6 #include "map_base.h"
     7 
     8 namespace hugo {
     9 	
    10 	template <typename G, typename K, typename KIt>
    11 	class VectorMapFactory {
    12 	
    13 	
    14 	public:
    15 		
    16 		typedef G Graph;
    17 		typedef K Key;
    18 		typedef KIt KeyIt;
    19 		
    20 		template <typename V> 
    21 		class Map : public MapBase<G, K, KIt> {
    22 		public:
    23 			typedef V Value;
    24 	
    25 			Map() {}
    26 			
    27 			Map(Graph& g, MapRegistry<G, K, KIt>& r) 
    28 				: MapBase<G, K, KIt>(g, r) {
    29 				init();
    30 			}
    31 				
    32 			virtual ~Map() {
    33 				destroy();
    34 			}
    35 	
    36 	
    37 			Value& operator[](const K& key) {
    38 				int id = graph->id(key);
    39 				return container[id];
    40 			} 
    41 		
    42 			const Value& operator[](const K& key) const {
    43 				int id = graph->id(key);
    44 				return container[id];
    45 			}
    46 	
    47 			const Value& get(const K& key) const {
    48 				int id = graph->id(key);
    49 				return container[id];
    50 			} 
    51 		
    52 			void set(const K& key, const Value& val) {
    53 				int id = graph->id(key);
    54 				container[id] = val;
    55 			}
    56 		
    57 			void add(const K& key) {
    58 				int id = graph->id(key);
    59 				if (id >= container.size()) {
    60 					container.resize(id + 1);
    61 				}
    62 			}
    63 		
    64 			void erase(const K& key) {}
    65 	
    66 		private:
    67 			typedef std::vector<Value> Container;
    68 		
    69 			Container container;
    70 		};
    71 		
    72 	};
    73 }
    74 
    75 #endif