Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

extendable_graph_extender.h

00001 // -*- c++ -*-
00002 
00003 #ifndef LEMON_EXTENDABLE_GRAPH_EXTENDER_H
00004 #define LEMON_EXTENDABLE_GRAPH_EXTENDER_H
00005 
00006 namespace lemon {
00007 
00008   template <typename _Base> 
00009   class ExtendableGraphExtender : public _Base {
00010   public:
00011 
00012     typedef ExtendableGraphExtender Graph;
00013     typedef _Base Parent;
00014 
00015     typedef typename Parent::Node Node;
00016     typedef typename Parent::Edge Edge;
00017 
00018     Node addNode() {
00019       Node node = Parent::addNode();
00020       Parent::getNotifier(Node()).add(node);
00021       return node;
00022     }
00023     
00024     Edge addEdge(const Node& from, const Node& to) {
00025       Edge edge = Parent::addEdge(from, to);
00026       Parent::getNotifier(Edge()).add(edge);
00027       return edge;
00028     }
00029 
00030   };
00031 
00032   template <typename _Base> 
00033   class ExtendableUndirGraphExtender : public _Base {
00034   public:
00035 
00036     typedef ExtendableUndirGraphExtender Graph;
00037     typedef _Base Parent;
00038 
00039     typedef typename Parent::Node Node;
00040     typedef typename Parent::Edge Edge;
00041     typedef typename Parent::UndirEdge UndirEdge;
00042 
00043     Node addNode() {
00044       Node node = Parent::addNode();
00045       Parent::getNotifier(Node()).add(node);
00046       return node;
00047     }
00048 
00049     UndirEdge addEdge(const Node& from, const Node& to) {
00050       UndirEdge uedge = Parent::addEdge(from, to);
00051       Parent::getNotifier(UndirEdge()).add(uedge);
00052 
00053       Edge edge_forward(uedge, true);
00054       Edge edge_backward(uedge, false);
00055       Parent::getNotifier(Edge()).add(edge_forward);
00056       Parent::getNotifier(Edge()).add(edge_backward);
00057 
00058       return uedge;
00059     }
00060 
00061   };
00062 
00063 }
00064 
00065 #endif

Generated on Sat Mar 19 10:58:39 2005 for LEMON by  doxygen 1.4.1