src/lemon/bits/extendable_graph_extender.h
changeset 1435 8e85e6bbefdf
parent 1307 d4acebef7276
equal deleted inserted replaced
1:164543496c7b -1:000000000000
     1 // -*- c++ -*-
       
     2 
       
     3 #ifndef LEMON_EXTENDABLE_GRAPH_EXTENDER_H
       
     4 #define LEMON_EXTENDABLE_GRAPH_EXTENDER_H
       
     5 
       
     6 namespace lemon {
       
     7 
       
     8   template <typename _Base> 
       
     9   class ExtendableGraphExtender : public _Base {
       
    10   public:
       
    11 
       
    12     typedef ExtendableGraphExtender Graph;
       
    13     typedef _Base Parent;
       
    14 
       
    15     typedef typename Parent::Node Node;
       
    16     typedef typename Parent::Edge Edge;
       
    17 
       
    18     Node addNode() {
       
    19       Node node = Parent::addNode();
       
    20       Parent::getNotifier(Node()).add(node);
       
    21       return node;
       
    22     }
       
    23     
       
    24     Edge addEdge(const Node& from, const Node& to) {
       
    25       Edge edge = Parent::addEdge(from, to);
       
    26       Parent::getNotifier(Edge()).add(edge);
       
    27       return edge;
       
    28     }
       
    29 
       
    30   };
       
    31 
       
    32   template <typename _Base> 
       
    33   class ExtendableUndirGraphExtender : public _Base {
       
    34   public:
       
    35 
       
    36     typedef ExtendableUndirGraphExtender Graph;
       
    37     typedef _Base Parent;
       
    38 
       
    39     typedef typename Parent::Node Node;
       
    40     typedef typename Parent::Edge Edge;
       
    41     typedef typename Parent::UndirEdge UndirEdge;
       
    42 
       
    43     Node addNode() {
       
    44       Node node = Parent::addNode();
       
    45       Parent::getNotifier(Node()).add(node);
       
    46       return node;
       
    47     }
       
    48 
       
    49     UndirEdge addEdge(const Node& from, const Node& to) {
       
    50       UndirEdge uedge = Parent::addEdge(from, to);
       
    51       Parent::getNotifier(UndirEdge()).add(uedge);
       
    52 
       
    53       std::vector<Edge> edges;
       
    54       edges.push_back(Edge(uedge, true));
       
    55       edges.push_back(Edge(uedge, false));
       
    56       Parent::getNotifier(Edge()).add(edges);
       
    57 
       
    58       return uedge;
       
    59     }
       
    60 
       
    61   };
       
    62 
       
    63 }
       
    64 
       
    65 #endif