src/work/deba/vector_map_factory.h
author alpar
Wed, 16 Jun 2004 09:44:30 +0000
changeset 686 fc8a3393e0d9
parent 595 e10b5e9419ef
child 698 625de6f1e766
permissions -rw-r--r--
src/work/alpar/path.h (docs) is merged into src/work/klao/path.h
(and removed)
     1 #ifndef VECTOR_MAP_H
     2 #define VECTOR_MAP_H
     3 
     4 #include <vector>
     5 
     6 #include "map_registry.h"
     7 
     8 namespace hugo {
     9 	
    10   template <typename MapRegistry>
    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       }
    35 	
    36 	
    37       Value& operator[](const Key& key) {
    38 	int id = graph->id(key);
    39 	return container[id];
    40       } 
    41 		
    42       const Value& operator[](const Key& key) const {
    43 	int id = graph->id(key);
    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       } 
    51 		
    52       void set(const Key& key, const Value& val) {
    53 	int id = graph->id(key);
    54 	container[id] = val;
    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) {}
    65 	
    66       private:
    67       typedef std::vector<Value> Container;
    68 		
    69       Container container;
    70     };
    71 		
    72   };
    73 }
    74 
    75 #endif