src/work/deba/vector_map_factory.h
author alpar
Tue, 13 Jul 2004 07:19:34 +0000
changeset 699 59f8d173968e
parent 627 6cc21a9c9fda
child 700 236117f60eee
permissions -rw-r--r--
Benchmarks
     1 #ifndef VECTOR_MAP_H
     2 #define VECTOR_MAP_H
     3 
     4 #include <vector>
     5 
     6 namespace hugo {
     7 	
     8   template <typename MapRegistry>
     9     class VectorMapFactory {
    10     public:
    11 		
    12     typedef typename MapRegistry::Graph Graph;
    13     typedef typename MapRegistry::Key Key;
    14     typedef typename MapRegistry::KeyIt KeyIt;
    15 
    16     typedef typename MapRegistry::MapBase MapBase;
    17 
    18 		
    19     template <typename V> 
    20       class Map : public MapBase {
    21       public:
    22       typedef V Value;
    23 	
    24       typedef std::vector<Value> Container;
    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       typename Container::reference operator[](const Key& key) {
    38 	int id = graph->id(key);
    39 	return container[id];
    40       } 
    41 		
    42       typename Container::const_reference operator[](const Key& key) const {
    43 	int id = graph->id(key);
    44 	return container[id];
    45       }
    46 	
    47       void set(const Key& key, const Value& val) {
    48 	int id = graph->id(key);
    49 	container[id] = val;
    50       }
    51 		
    52       void add(const Key& key) {
    53 	int id = graph->id(key);
    54 	if (id >= container.size()) {
    55 	  container.resize(id + 1);
    56 	}
    57       }
    58 		
    59       void erase(const Key& key) {}
    60 	
    61       class const_iterator {
    62 
    63       private:
    64       
    65       };
    66 
    67       class iterator {
    68       public:
    69 	iterator() {}
    70       
    71 	std::pair<const Key&, Value&> operator*() {
    72 	  return std::pair<const Key&, Value&>(static_cast<Key&>(it), map[it]);
    73 	}
    74 
    75 	iterator& operator++() { ++it; return *this; }
    76 	iterator operator++(int) { iterator tmp(it); ++it; return tmp; }
    77       private:
    78 	Map& map;
    79 	KeyIt it;
    80       };
    81 
    82       private:
    83       typedef std::vector<Value> Container;
    84 		
    85       Container container;
    86 
    87 
    88     };
    89 
    90     
    91 
    92 		
    93   };
    94 }
    95 
    96 #endif