COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/deba/node_map_registry.h @ 339:768ebc700bae

Last change on this file since 339:768ebc700bae was 337:6e1b7efa577f, checked in by Balazs Dezso, 17 years ago
File size: 1.1 KB
RevLine 
[337]1#ifndef NODE_MAP_REGISTRY_H
2#define NODE_MAP_REGISTRY_H
3
4#include <vector>
5
6template <typename G, typename E>
7class NodeMapRegistry {
8public:
9        typedef G Graph;
10        typedef E Node
11       
12        typedef NodeMapBase<Graph, Node> NodeMapBase;
13
14protected:
15        typedef std::vector<NodeMapBase*> Container;
16       
17        Container container;
18       
19        void add(NodeMapBase& map_base) {
20                if (map_base.graph) {
21                        map_base.graph->node_maps.erase(map_base);
22                }
23                container.push_back(&map_base);
24                map_base.graph = this;
25                map_base.graph_index = container.size()-1;
26        }
27       
28        void erase(NodeMapBase& map_base) {
29                if (map_base.graph != this) return;
30                container.back()->graph_index = map_base.graph_index;
31                container[map_base.graph_index] = container.back();
32                container.pop_back();
33                map_base.graph = 0;
34        }
35       
36        void addNode(Node& node) {
37                typename Container::iterator it;
38                for (it = container.begin(); it != container.end(); ++it) {
39                        (*it)->add(node);
40                }
41        }
42       
43        void eraseNode(Node& node) {
44                typename Container::iterator it;
45                for (it = container.begin(); it != container.end(); ++it) {
46                        (*it)->erase(node);
47                }
48        }
49
50        friend class NodeMapBase;
51};
52
53#endif
Note: See TracBrowser for help on using the repository browser.