COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/deba/edge_map_registry.h @ 356:b4dcbe3e3b8f

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