src/work/deba/vector_map_factory.h
changeset 686 fc8a3393e0d9
parent 595 e10b5e9419ef
child 698 625de6f1e766
equal deleted inserted replaced
1:d068dfc4078a 2:c9898764938d
     1 #ifndef VECTOR_MAP_H
     1 #ifndef VECTOR_MAP_H
     2 #define VECTOR_MAP_H
     2 #define VECTOR_MAP_H
     3 
     3 
     4 #include <vector>
     4 #include <vector>
     5 
     5 
     6 #include "map_base.h"
     6 #include "map_registry.h"
     7 
     7 
     8 namespace hugo {
     8 namespace hugo {
     9 	
     9 	
    10 	template <typename G, typename K, typename KIt>
    10   template <typename MapRegistry>
    11 	class VectorMapFactory {
    11   class VectorMapFactory {
       
    12   public:
       
    13 		
       
    14     typedef typename MapRegistry::Graph Graph;
       
    15     typedef typename MapRegistry::Key Key;
       
    16     typedef typename MapRegistry::KeyIt KeyIt;
       
    17 
       
    18     typedef typename MapRegistry::MapBase MapBase;
       
    19 		
       
    20     template <typename V> 
       
    21       class Map : public MapBase {
       
    22       public:
       
    23       typedef V Value;
       
    24 	
       
    25       Map() {}
       
    26 			
       
    27       Map(Graph& g, MapRegistry& r) : MapBase(g, r) {
       
    28 	init();
       
    29       }
       
    30 			
       
    31 						
       
    32       virtual ~Map() {
       
    33 	destroy();
       
    34       }
    12 	
    35 	
    13 	
    36 	
    14 	public:
    37       Value& operator[](const Key& key) {
       
    38 	int id = graph->id(key);
       
    39 	return container[id];
       
    40       } 
    15 		
    41 		
    16 		typedef G Graph;
    42       const Value& operator[](const Key& key) const {
    17 		typedef K Key;
    43 	int id = graph->id(key);
    18 		typedef KIt KeyIt;
    44 	return container[id];
       
    45       }
       
    46 	
       
    47       const Value& get(const Key& key) const {
       
    48 	int id = graph->id(key);
       
    49 	return container[id];
       
    50       } 
    19 		
    51 		
    20 		template <typename V> 
    52       void set(const Key& key, const Value& val) {
    21 		class Map : public MapBase<G, K, KIt> {
    53 	int id = graph->id(key);
    22 		public:
    54 	container[id] = val;
    23 			typedef V Value;
    55       }
       
    56 		
       
    57       void add(const Key& key) {
       
    58 	int id = graph->id(key);
       
    59 	if (id >= container.size()) {
       
    60 	  container.resize(id + 1);
       
    61 	}
       
    62       }
       
    63 		
       
    64       void erase(const Key& key) {}
    24 	
    65 	
    25 			Map() {}
    66       private:
    26 			
    67       typedef std::vector<Value> Container;
    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 		
    68 		
    42 			const Value& operator[](const K& key) const {
    69       Container container;
    43 				int id = graph->id(key);
    70     };
    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 		
    71 		
    52 			void set(const K& key, const Value& val) {
    72   };
    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 }
    73 }
    74 
    74 
    75 #endif
    75 #endif