// -*- c++ -*- #ifndef LEMON_MAPPABLE_GRAPH_EXTENDER_H #define LEMON_MAPPABLE_GRAPH_EXTENDER_H namespace lemon { template class DynMap> class MappableGraphExtender : public Base { public: typedef MappableGraphExtender Graph; typedef Base Parent; typedef typename Parent::Node Node; typedef typename Parent::NodeIt NodeIt; typedef typename Parent::NodeObserverRegistry NodeObserverRegistry; typedef typename Parent::Edge Edge; typedef typename Parent::EdgeIt EdgeIt; typedef typename Parent::EdgeObserverRegistry EdgeObserverRegistry; public: class NodeIdMap { private: const Graph* graph; public: NodeIdMap(const Graph& g) : graph(&g) {} int operator[](const Node& node) { return graph->id(node); } int maxId() const {return graph->maxNodeId(); } }; // template // friend class DynMap; class EdgeIdMap { private: const Graph* graph; public: EdgeIdMap(const Graph& g) : graph(&g) {} int operator[](const Edge& edge) const { return graph->id(edge); } int maxId() const {return graph->maxEdgeId(); } }; // template // friend class DynMap; public: template class NodeMap : public DynMap { public: typedef DynMap Parent; NodeMap(const Graph& g) : Parent(g, g.Graph::Parent::getNodeObserverRegistry()) {} NodeMap(const Graph& g, const Value& v) : Parent(g, g.Graph::Parent::getNodeObserverRegistry(), v) {} }; template class EdgeMap : public DynMap { public: typedef DynMap Parent; EdgeMap(const Graph& g) : Parent(g, g.Graph::Parent::getEdgeObserverRegistry()) {} EdgeMap(const Graph& g, const Value& v) : Parent(g, g.Graph::Parent::getEdgeObserverRegistry(), v) {} }; }; } #endif