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 |