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