3 #ifndef LEMON_MAPPABLE_GRAPH_EXTENDER_H
4 #define LEMON_MAPPABLE_GRAPH_EXTENDER_H
8 template <typename Base, template <class,class,class,class,class,class> class DynMap>
9 class MappableGraphExtender : public Base {
12 typedef MappableGraphExtender Graph;
15 typedef typename Parent::Node Node;
16 typedef typename Parent::NodeIt NodeIt;
17 typedef typename Parent::NodeObserverRegistry NodeObserverRegistry;
19 typedef typename Parent::Edge Edge;
20 typedef typename Parent::EdgeIt EdgeIt;
21 typedef typename Parent::EdgeObserverRegistry EdgeObserverRegistry;
30 NodeIdMap(const Graph& g) : graph(&g) {}
32 int operator[](const Node& node) { return graph->id(node); }
34 int maxId() const {return graph->maxNodeId(); }
38 // template <typename Value>
39 // friend class DynMap<NodeObserverRegistry, Graph, Node, NodeIt,
47 EdgeIdMap(const Graph& g) : graph(&g) {}
49 int operator[](const Edge& edge) const { return graph->id(edge); }
51 int maxId() const {return graph->maxEdgeId(); }
55 // template <typename Value>
56 // friend class DynMap<EdgeObserverRegistry, Graph, Edge, EdgeIt,
61 template <typename Value>
63 : public DynMap<NodeObserverRegistry, Graph, Node, NodeIt,
66 typedef DynMap<NodeObserverRegistry, Graph, Node, NodeIt,
67 NodeIdMap, Value> Parent;
69 NodeMap(const Graph& g)
70 : Parent(g, g.Graph::Parent::getNodeObserverRegistry()) {}
71 NodeMap(const Graph& g, const Value& v)
72 : Parent(g, g.Graph::Parent::getNodeObserverRegistry(), v) {}
76 template <typename Value>
78 : public DynMap<EdgeObserverRegistry, Graph, Edge, EdgeIt,
81 typedef DynMap<EdgeObserverRegistry, Graph, Edge, EdgeIt,
82 EdgeIdMap, Value> Parent;
84 EdgeMap(const Graph& g)
85 : Parent(g, g.Graph::Parent::getEdgeObserverRegistry()) {}
86 EdgeMap(const Graph& g, const Value& v)
87 : Parent(g, g.Graph::Parent::getEdgeObserverRegistry(), v) {}