/* -*- C++ -*- * * lemon/undir_graph_extender.h - Part of LEMON, a generic C++ * optimization library * * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi * Kutatocsoport (Egervary Research Group on Combinatorial Optimization, * EGRES). * * Permission to use, modify and distribute this software is granted * provided that this copyright notice appears in all copies. For * precise terms see the accompanying LICENSE file. * * This software is provided "AS IS" with no warranty of any kind, * express or implied, and with no claim as to its suitability for any * purpose. * */ #ifndef LEMON_UNDIR_GRAPH_EXTENDER_H #define LEMON_UNDIR_GRAPH_EXTENDER_H #include namespace lemon { template class UndirGraphExtender : public _Base { typedef _Base Parent; typedef UndirGraphExtender Graph; public: typedef typename Parent::Edge UndirEdge; typedef typename Parent::Node Node; class Edge : public UndirEdge { friend class UndirGraphExtender; protected: // FIXME: Marci use opposite logic in his graph adaptors. It would // be reasonable to syncronize... bool forward; Edge(const UndirEdge &ue, bool _forward) : UndirEdge(ue), forward(_forward) {} public: Edge() {} /// Invalid edge constructor Edge(Invalid i) : UndirEdge(i), forward(true) {} bool operator==(const Edge &that) const { return forward==that.forward && UndirEdge(*this)==UndirEdge(that); } bool operator!=(const Edge &that) const { return forward!=that.forward || UndirEdge(*this)!=UndirEdge(that); } bool operator<(const Edge &that) const { return forward