diff -r d8475431bbbb -r 8e85e6bbefdf lemon/bits/extendable_graph_extender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lemon/bits/extendable_graph_extender.h Mon May 23 04:48:14 2005 +0000 @@ -0,0 +1,65 @@ +// -*- c++ -*- + +#ifndef LEMON_EXTENDABLE_GRAPH_EXTENDER_H +#define LEMON_EXTENDABLE_GRAPH_EXTENDER_H + +namespace lemon { + + template + class ExtendableGraphExtender : public _Base { + public: + + typedef ExtendableGraphExtender Graph; + typedef _Base Parent; + + typedef typename Parent::Node Node; + typedef typename Parent::Edge Edge; + + Node addNode() { + Node node = Parent::addNode(); + Parent::getNotifier(Node()).add(node); + return node; + } + + Edge addEdge(const Node& from, const Node& to) { + Edge edge = Parent::addEdge(from, to); + Parent::getNotifier(Edge()).add(edge); + return edge; + } + + }; + + template + class ExtendableUndirGraphExtender : public _Base { + public: + + typedef ExtendableUndirGraphExtender Graph; + typedef _Base Parent; + + typedef typename Parent::Node Node; + typedef typename Parent::Edge Edge; + typedef typename Parent::UndirEdge UndirEdge; + + Node addNode() { + Node node = Parent::addNode(); + Parent::getNotifier(Node()).add(node); + return node; + } + + UndirEdge addEdge(const Node& from, const Node& to) { + UndirEdge uedge = Parent::addEdge(from, to); + Parent::getNotifier(UndirEdge()).add(uedge); + + std::vector edges; + edges.push_back(Edge(uedge, true)); + edges.push_back(Edge(uedge, false)); + Parent::getNotifier(Edge()).add(edges); + + return uedge; + } + + }; + +} + +#endif