45 template <typename _Graph, typename _Item, typename _Value> |
45 template <typename _Graph, typename _Item, typename _Value> |
46 class ArrayMap |
46 class ArrayMap |
47 : public ItemSetTraits<_Graph, _Item>::ItemNotifier::ObserverBase { |
47 : public ItemSetTraits<_Graph, _Item>::ItemNotifier::ObserverBase { |
48 public: |
48 public: |
49 // The graph type. |
49 // The graph type. |
50 typedef _Graph Graph; |
50 typedef _Graph GraphType; |
51 // The item type. |
51 // The item type. |
52 typedef _Item Item; |
52 typedef _Item Item; |
53 // The reference map tag. |
53 // The reference map tag. |
54 typedef True ReferenceMapTag; |
54 typedef True ReferenceMapTag; |
55 |
55 |
61 // The const reference type of the map. |
61 // The const reference type of the map. |
62 typedef const _Value& ConstReference; |
62 typedef const _Value& ConstReference; |
63 // The reference type of the map. |
63 // The reference type of the map. |
64 typedef _Value& Reference; |
64 typedef _Value& Reference; |
65 |
65 |
|
66 // The map type. |
|
67 typedef ArrayMap Map; |
|
68 |
66 // The notifier type. |
69 // The notifier type. |
67 typedef typename ItemSetTraits<_Graph, _Item>::ItemNotifier Notifier; |
70 typedef typename ItemSetTraits<_Graph, _Item>::ItemNotifier Notifier; |
68 |
71 |
|
72 private: |
|
73 |
69 // The MapBase of the Map which imlements the core regisitry function. |
74 // The MapBase of the Map which imlements the core regisitry function. |
70 typedef typename Notifier::ObserverBase Parent; |
75 typedef typename Notifier::ObserverBase Parent; |
71 |
76 |
72 private: |
|
73 typedef std::allocator<Value> Allocator; |
77 typedef std::allocator<Value> Allocator; |
74 |
78 |
75 public: |
79 public: |
76 |
80 |
77 // \brief Graph initialized map constructor. |
81 // \brief Graph initialized map constructor. |
78 // |
82 // |
79 // Graph initialized map constructor. |
83 // Graph initialized map constructor. |
80 explicit ArrayMap(const Graph& graph) { |
84 explicit ArrayMap(const GraphType& graph) { |
81 Parent::attach(graph.notifier(Item())); |
85 Parent::attach(graph.notifier(Item())); |
82 allocate_memory(); |
86 allocate_memory(); |
83 Notifier* nf = Parent::notifier(); |
87 Notifier* nf = Parent::notifier(); |
84 Item it; |
88 Item it; |
85 for (nf->first(it); it != INVALID; nf->next(it)) { |
89 for (nf->first(it); it != INVALID; nf->next(it)) { |
89 } |
93 } |
90 |
94 |
91 // \brief Constructor to use default value to initialize the map. |
95 // \brief Constructor to use default value to initialize the map. |
92 // |
96 // |
93 // It constructs a map and initialize all of the the map. |
97 // It constructs a map and initialize all of the the map. |
94 ArrayMap(const Graph& graph, const Value& value) { |
98 ArrayMap(const GraphType& graph, const Value& value) { |
95 Parent::attach(graph.notifier(Item())); |
99 Parent::attach(graph.notifier(Item())); |
96 allocate_memory(); |
100 allocate_memory(); |
97 Notifier* nf = Parent::notifier(); |
101 Notifier* nf = Parent::notifier(); |
98 Item it; |
102 Item it; |
99 for (nf->first(it); it != INVALID; nf->next(it)) { |
103 for (nf->first(it); it != INVALID; nf->next(it)) { |