lemon/bits/extendable_graph_extender.h
changeset 1909 2d806130e700
parent 1842 8abf74160dc4
child 1910 f95eea8c34b0
equal deleted inserted replaced
3:e7ec3e2d85bc 4:6737585d8b94
    46     }
    46     }
    47 
    47 
    48   };
    48   };
    49 
    49 
    50   template <typename _Base> 
    50   template <typename _Base> 
    51   class ExtendableUndirGraphExtender : public _Base {
    51   class ExtendableUGraphExtender : public _Base {
    52   public:
    52   public:
    53 
    53 
    54     typedef ExtendableUndirGraphExtender Graph;
    54     typedef ExtendableUGraphExtender Graph;
    55     typedef _Base Parent;
    55     typedef _Base Parent;
    56 
    56 
    57     typedef typename Parent::Node Node;
    57     typedef typename Parent::Node Node;
    58     typedef typename Parent::Edge Edge;
    58     typedef typename Parent::Edge Edge;
    59     typedef typename Parent::UndirEdge UndirEdge;
    59     typedef typename Parent::UEdge UEdge;
    60 
    60 
    61     Node addNode() {
    61     Node addNode() {
    62       Node node = Parent::addNode();
    62       Node node = Parent::addNode();
    63       Parent::getNotifier(Node()).add(node);
    63       Parent::getNotifier(Node()).add(node);
    64       return node;
    64       return node;
    65     }
    65     }
    66 
    66 
    67     UndirEdge addEdge(const Node& from, const Node& to) {
    67     UEdge addEdge(const Node& from, const Node& to) {
    68       UndirEdge uedge = Parent::addEdge(from, to);
    68       UEdge uedge = Parent::addEdge(from, to);
    69       Parent::getNotifier(UndirEdge()).add(uedge);
    69       Parent::getNotifier(UEdge()).add(uedge);
    70 
    70 
    71       std::vector<Edge> edges;
    71       std::vector<Edge> edges;
    72       edges.push_back(Parent::direct(uedge, true));
    72       edges.push_back(Parent::direct(uedge, true));
    73       edges.push_back(Parent::direct(uedge, false));
    73       edges.push_back(Parent::direct(uedge, false));
    74       Parent::getNotifier(Edge()).add(edges);
    74       Parent::getNotifier(Edge()).add(edges);
    77     }
    77     }
    78 
    78 
    79   };
    79   };
    80 
    80 
    81   template <typename _Base> 
    81   template <typename _Base> 
    82   class ExtendableUndirEdgeSetExtender : public _Base {
    82   class ExtendableUEdgeSetExtender : public _Base {
    83   public:
    83   public:
    84 
    84 
    85     typedef ExtendableUndirEdgeSetExtender Graph;
    85     typedef ExtendableUEdgeSetExtender Graph;
    86     typedef _Base Parent;
    86     typedef _Base Parent;
    87 
    87 
    88     typedef typename Parent::Node Node;
    88     typedef typename Parent::Node Node;
    89     typedef typename Parent::Edge Edge;
    89     typedef typename Parent::Edge Edge;
    90     typedef typename Parent::UndirEdge UndirEdge;
    90     typedef typename Parent::UEdge UEdge;
    91 
    91 
    92     UndirEdge addEdge(const Node& from, const Node& to) {
    92     UEdge addEdge(const Node& from, const Node& to) {
    93       UndirEdge uedge = Parent::addEdge(from, to);
    93       UEdge uedge = Parent::addEdge(from, to);
    94       Parent::getNotifier(UndirEdge()).add(uedge);
    94       Parent::getNotifier(UEdge()).add(uedge);
    95 
    95 
    96       std::vector<Edge> edges;
    96       std::vector<Edge> edges;
    97       edges.push_back(Parent::direct(uedge, true));
    97       edges.push_back(Parent::direct(uedge, true));
    98       edges.push_back(Parent::direct(uedge, false));
    98       edges.push_back(Parent::direct(uedge, false));
    99       Parent::getNotifier(Edge()).add(edges);
    99       Parent::getNotifier(Edge()).add(edges);
   103 
   103 
   104   };
   104   };
   105 
   105 
   106 
   106 
   107   template <typename _Base>
   107   template <typename _Base>
   108   class ExtendableUndirBipartiteGraphExtender : public _Base {
   108   class ExtendableUBipartiteGraphExtender : public _Base {
   109   public:
   109   public:
   110 
   110 
   111     typedef _Base Parent;
   111     typedef _Base Parent;
   112     typedef ExtendableUndirBipartiteGraphExtender Graph;
   112     typedef ExtendableUBipartiteGraphExtender Graph;
   113   
   113   
   114     typedef typename Parent::Node Node;
   114     typedef typename Parent::Node Node;
   115     typedef typename Parent::LowerNode LowerNode;
   115     typedef typename Parent::LowerNode LowerNode;
   116     typedef typename Parent::UpperNode UpperNode;
   116     typedef typename Parent::UpperNode UpperNode;
   117     typedef typename Parent::Edge Edge;
   117     typedef typename Parent::Edge Edge;
   118     typedef typename Parent::UndirEdge UndirEdge;
   118     typedef typename Parent::UEdge UEdge;
   119   
   119   
   120     Node addUpperNode() {
   120     Node addUpperNode() {
   121       Node node = Parent::addUpperNode();
   121       Node node = Parent::addUpperNode();
   122       Parent::getNotifier(UpperNode()).add(node);
   122       Parent::getNotifier(UpperNode()).add(node);
   123       Parent::getNotifier(Node()).add(node);
   123       Parent::getNotifier(Node()).add(node);
   129       Parent::getNotifier(LowerNode()).add(node);
   129       Parent::getNotifier(LowerNode()).add(node);
   130       Parent::getNotifier(Node()).add(node);
   130       Parent::getNotifier(Node()).add(node);
   131       return node;
   131       return node;
   132     }
   132     }
   133   
   133   
   134     UndirEdge addEdge(const Node& source, const Node& target) {
   134     UEdge addEdge(const Node& source, const Node& target) {
   135       UndirEdge undiredge = Parent::addEdge(source, target);
   135       UEdge uedge = Parent::addEdge(source, target);
   136       Parent::getNotifier(UndirEdge()).add(undiredge);
   136       Parent::getNotifier(UEdge()).add(uedge);
   137     
   137     
   138       std::vector<Edge> edges;
   138       std::vector<Edge> edges;
   139       edges.push_back(Parent::direct(undiredge, true));
   139       edges.push_back(Parent::direct(uedge, true));
   140       edges.push_back(Parent::direct(undiredge, false));
   140       edges.push_back(Parent::direct(uedge, false));
   141       Parent::getNotifier(Edge()).add(edges);
   141       Parent::getNotifier(Edge()).add(edges);
   142     
   142     
   143       return undiredge;
   143       return uedge;
   144     }
   144     }
   145 
   145 
   146   };
   146   };
   147 
   147 
   148 }
   148 }