Changes in / [469:04c0631fd332:468:68fe66e2b34a] in lemon-1.2
- Files:
-
- 3 added
- 20 deleted
- 112 edited
Legend:
- Unmodified
- Added
- Removed
-
.hgignore
r456 r385 27 27 .deps/* 28 28 demo/*.eps 29 m4/libtool.m430 m4/ltoptions.m431 m4/ltsugar.m432 m4/ltversion.m433 m4/lt~obsolete.m434 29 35 30 syntax: regexp -
LICENSE
r440 r107 2 2 copyright/license. 3 3 4 Copyright (C) 2003-200 9Egervary Jeno Kombinatorikus Optimalizalasi4 Copyright (C) 2003-2008 Egervary Jeno Kombinatorikus Optimalizalasi 5 5 Kutatocsoport (Egervary Combinatorial Optimization Research Group, 6 6 EGRES). -
configure.ac
r459 r363 51 51 52 52 dnl Checks for libraries. 53 LX_CHECK_GLPK 54 LX_CHECK_CPLEX 55 LX_CHECK_SOPLEX 56 LX_CHECK_CLP 57 58 AM_CONDITIONAL([HAVE_LP], [test x"$lx_lp_found" = x"yes"]) 59 AM_CONDITIONAL([HAVE_MIP], [test x"$lx_mip_found" = x"yes"]) 53 #LX_CHECK_GLPK 54 #LX_CHECK_CPLEX 55 #LX_CHECK_SOPLEX 60 56 61 57 dnl Disable/enable building the demo programs. … … 119 115 echo C++ compiles flags............ : $WARNINGCXXFLAGS $CXXFLAGS 120 116 echo 121 echo GLPK support.................. : $lx_glpk_found 122 echo CPLEX support................. : $lx_cplex_found 123 echo SOPLEX support................ : $lx_soplex_found 124 echo CLP support................... : $lx_clp_found 125 echo 117 #echo GLPK support.................. : $lx_glpk_found 118 #echo CPLEX support................. : $lx_cplex_found 119 #echo SOPLEX support................ : $lx_soplex_found 120 #echo 126 121 echo Build demo programs........... : $enable_demo 127 122 echo Build additional tools........ : $enable_tools -
demo/arg_parser_demo.cc
r440 r311 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
demo/graph_to_eps_demo.cc
r440 r313 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 86 86 coords(coords). 87 87 title("Sample .eps figure"). 88 copyright("(C) 2003-200 9LEMON Project").88 copyright("(C) 2003-2008 LEMON Project"). 89 89 run(); 90 90 … … 93 93 coords(coords). 94 94 title("Sample .eps figure"). 95 copyright("(C) 2003-200 9LEMON Project").95 copyright("(C) 2003-2008 LEMON Project"). 96 96 absoluteNodeSizes().absoluteArcWidths(). 97 97 nodeScale(2).nodeSizes(sizes). … … 106 106 graphToEps(g,"graph_to_eps_demo_out_3_arr.eps"). 107 107 title("Sample .eps figure (with arrowheads)"). 108 copyright("(C) 2003-200 9LEMON Project").108 copyright("(C) 2003-2008 LEMON Project"). 109 109 absoluteNodeSizes().absoluteArcWidths(). 110 110 nodeColors(composeMap(palette,colors)). … … 133 133 graphToEps(g,"graph_to_eps_demo_out_4_par.eps"). 134 134 title("Sample .eps figure (parallel arcs)"). 135 copyright("(C) 2003-200 9LEMON Project").135 copyright("(C) 2003-2008 LEMON Project"). 136 136 absoluteNodeSizes().absoluteArcWidths(). 137 137 nodeShapes(shapes). … … 148 148 graphToEps(g,"graph_to_eps_demo_out_5_par_arr.eps"). 149 149 title("Sample .eps figure (parallel arcs and arrowheads)"). 150 copyright("(C) 2003-200 9LEMON Project").150 copyright("(C) 2003-2008 LEMON Project"). 151 151 absoluteNodeSizes().absoluteArcWidths(). 152 152 nodeScale(2).nodeSizes(sizes). … … 164 164 graphToEps(g,"graph_to_eps_demo_out_6_par_arr_a4.eps"). 165 165 title("Sample .eps figure (fits to A4)"). 166 copyright("(C) 2003-200 9LEMON Project").166 copyright("(C) 2003-2008 LEMON Project"). 167 167 scaleToA4(). 168 168 absoluteNodeSizes().absoluteArcWidths(). … … 194 194 scale(60). 195 195 title("Sample .eps figure (Palette demo)"). 196 copyright("(C) 2003-200 9LEMON Project").196 copyright("(C) 2003-2008 LEMON Project"). 197 197 coords(hcoords). 198 198 absoluteNodeSizes().absoluteArcWidths(). -
demo/lgf_demo.cc
r440 r294 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/coding_style.dox
r440 r210 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/dirs.dox
r440 r318 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 72 72 \brief Auxiliary tools for implementation. 73 73 74 This directory contains some auxiliary classes for implementing graphs, 74 This directory contains some auxiliary classes for implementing graphs, 75 75 maps and some other classes. 76 76 As a user you typically don't have to deal with these files. -
doc/groups.dox
r455 r418 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 63 63 64 64 /** 65 @defgroup graph_adaptors Adaptor Classes for Graphs65 @defgroup graph_adaptors Adaptor Classes for graphs 66 66 @ingroup graphs 67 \brief Adaptor classes for digraphs and graphs 68 69 This group contains several useful adaptor classes for digraphs and graphs. 67 \brief This group contains several adaptor classes for digraphs and graphs 70 68 71 69 The main parts of LEMON are the different graph structures, generic 72 graph algorithms, graph concepts , which couple them, and graph70 graph algorithms, graph concepts which couple these, and graph 73 71 adaptors. While the previous notions are more or less clear, the 74 72 latter one needs further explanation. Graph adaptors are graph classes … … 76 74 77 75 A short example makes this much clearer. Suppose that we have an 78 instance \c g of a directed graph type ,say ListDigraph and an algorithm76 instance \c g of a directed graph type say ListDigraph and an algorithm 79 77 \code 80 78 template <typename Digraph> … … 84 82 (in time or in memory usage) to copy \c g with the reversed 85 83 arcs. In this case, an adaptor class is used, which (according 86 to LEMON \ref concepts::Digraph "digraph concepts") works as a digraph.87 The adaptor uses the original digraph structure and digraph operations when 88 methods of the reversed oriented graph are called. This means that the adaptor 89 haveminor memory usage, and do not perform sophisticated algorithmic84 to LEMON digraph concepts) works as a digraph. The adaptor uses the 85 original digraph structure and digraph operations when methods of the 86 reversed oriented graph are called. This means that the adaptor have 87 minor memory usage, and do not perform sophisticated algorithmic 90 88 actions. The purpose of it is to give a tool for the cases when a 91 89 graph have to be used in a specific alteration. If this alteration is 92 obtained by a usual construction like filtering the node or the arcset or90 obtained by a usual construction like filtering the arc-set or 93 91 considering a new orientation, then an adaptor is worthwhile to use. 94 92 To come back to the reverse oriented graph, in this situation … … 99 97 \code 100 98 ListDigraph g; 101 ReverseDigraph<List Digraph> rg(g);99 ReverseDigraph<ListGraph> rg(g); 102 100 int result = algorithm(rg); 103 101 \endcode 104 During running the algorithm, the original digraph \c g is untouched.105 This techniques give rise to an elegant code, and based on stable102 After running the algorithm, the original graph \c g is untouched. 103 This techniques gives rise to an elegant code, and based on stable 106 104 graph adaptors, complex algorithms can be implemented easily. 107 105 108 In flow, circulation and matching problems, the residual106 In flow, circulation and bipartite matching problems, the residual 109 107 graph is of particular importance. Combining an adaptor implementing 110 this with shortest path algorithms orminimum mean cycle algorithms,108 this, shortest path algorithms and minimum mean cycle algorithms, 111 109 a range of weighted and cardinality optimization algorithms can be 112 110 obtained. For other examples, the interested user is referred to the … … 115 113 The behavior of graph adaptors can be very different. Some of them keep 116 114 capabilities of the original graph while in other cases this would be 117 meaningless. This means that the concepts that they meet depend 118 on the graph adaptor, and the wrapped graph. 119 For example, if an arc of a reversed digraph is deleted, this is carried 120 out by deleting the corresponding arc of the original digraph, thus the 121 adaptor modifies the original digraph. 122 However in case of a residual digraph, this operation has no sense. 123 115 meaningless. This means that the concepts that they are models of depend 116 on the graph adaptor, and the wrapped graph(s). 117 If an arc of \c rg is deleted, this is carried out by deleting the 118 corresponding arc of \c g, thus the adaptor modifies the original graph. 119 120 But for a residual graph, this operation has no sense. 124 121 Let us stand one more example here to simplify your work. 125 Rev erseDigraphhas constructor122 RevGraphAdaptor has constructor 126 123 \code 127 124 ReverseDigraph(Digraph& digraph); 128 125 \endcode 129 This means that in a situation, when a <tt>const %ListDigraph&</tt>126 This means that in a situation, when a <tt>const ListDigraph&</tt> 130 127 reference to a graph is given, then it have to be instantiated with 131 <tt>Digraph=const %ListDigraph</tt>.128 <tt>Digraph=const ListDigraph</tt>. 132 129 \code 133 130 int algorithm1(const ListDigraph& g) { 134 Rev erseDigraph<const ListDigraph> rg(g);131 RevGraphAdaptor<const ListDigraph> rg(g); 135 132 return algorithm2(rg); 136 133 } -
doc/lgf.dox
r440 r313 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/license.dox
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/mainpage.dox
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/migration.dox
r440 r343 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/named-param.dox
r440 r269 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/namespaces.dox
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
doc/template.h
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/Makefile.am
r469 r468 8 8 9 9 lemon_libemon_la_SOURCES = \ 10 lemon/arg_parser.cc \ 11 lemon/base.cc \ 12 lemon/color.cc \ 13 lemon/lp_base.cc \ 14 lemon/lp_skeleton.cc \ 15 lemon/random.cc 10 lemon/arg_parser.cc \ 11 lemon/base.cc \ 12 lemon/color.cc \ 13 lemon/random.cc 16 14 17 18 lemon_libemon_la_CXXFLAGS = \ 19 $(GLPK_CFLAGS) \ 20 $(CPLEX_CFLAGS) \ 21 $(SOPLEX_CXXFLAGS) \ 22 $(CLP_CXXFLAGS) 23 24 lemon_libemon_la_LDFLAGS = \ 25 $(GLPK_LIBS) \ 26 $(CPLEX_LIBS) \ 27 $(SOPLEX_LIBS) \ 28 $(CLP_LIBS) 29 30 if HAVE_GLPK 31 lemon_libemon_la_SOURCES += lemon/glpk.cc 32 endif 33 34 if HAVE_CPLEX 35 lemon_libemon_la_SOURCES += lemon/cplex.cc 36 endif 37 38 if HAVE_SOPLEX 39 lemon_libemon_la_SOURCES += lemon/soplex.cc 40 endif 41 42 if HAVE_CLP 43 lemon_libemon_la_SOURCES += lemon/clp.cc 44 endif 15 #lemon_libemon_la_CXXFLAGS = $(GLPK_CFLAGS) $(CPLEX_CFLAGS) $(SOPLEX_CXXFLAGS) $(AM_CXXFLAGS) 16 #lemon_libemon_la_LDFLAGS = $(GLPK_LIBS) $(CPLEX_LIBS) $(SOPLEX_LIBS) 45 17 46 18 lemon_HEADERS += \ 47 19 lemon/adaptors.h \ 48 20 lemon/arg_parser.h \ 49 21 lemon/assert.h \ 50 lemon/bfs.h \ 51 lemon/bin_heap.h \ 52 lemon/circulation.h \ 53 lemon/clp.h \ 54 lemon/color.h \ 22 lemon/bfs.h \ 23 lemon/bin_heap.h \ 24 lemon/circulation.h \ 25 lemon/color.h \ 55 26 lemon/concept_check.h \ 56 27 lemon/counter.h \ 57 28 lemon/core.h \ 58 lemon/cplex.h \ 59 lemon/dfs.h \ 60 lemon/dijkstra.h \ 61 lemon/dim2.h \ 62 lemon/dimacs.h \ 29 lemon/dfs.h \ 30 lemon/dijkstra.h \ 31 lemon/dim2.h \ 32 lemon/dimacs.h \ 63 33 lemon/edge_set.h \ 64 34 lemon/elevator.h \ 65 35 lemon/error.h \ 66 36 lemon/full_graph.h \ 67 lemon/glpk.h \ 68 lemon/graph_to_eps.h \ 69 lemon/grid_graph.h \ 37 lemon/graph_to_eps.h \ 38 lemon/grid_graph.h \ 70 39 lemon/hypercube_graph.h \ 71 40 lemon/kruskal.h \ … … 73 42 lemon/lgf_reader.h \ 74 43 lemon/lgf_writer.h \ 75 lemon/list_graph.h \76 lemon/lp.h \77 lemon/lp_base.h \78 lemon/lp_skeleton.h \79 44 lemon/list_graph.h \ 80 45 lemon/maps.h \ … … 84 49 lemon/path.h \ 85 50 lemon/preflow.h \ 86 lemon/radix_sort.h \ 87 lemon/random.h \ 51 lemon/random.h \ 88 52 lemon/smart_graph.h \ 89 lemon/soplex.h \90 53 lemon/suurballe.h \ 91 92 54 lemon/time_measure.h \ 55 lemon/tolerance.h \ 93 56 lemon/unionfind.h 94 57 … … 97 60 lemon/bits/array_map.h \ 98 61 lemon/bits/base_extender.h \ 99 62 lemon/bits/bezier.h \ 100 63 lemon/bits/default_map.h \ 101 64 lemon/bits/edge_set_extender.h \ 102 65 lemon/bits/enable_if.h \ 103 66 lemon/bits/graph_adaptor_extender.h \ 104 67 lemon/bits/graph_extender.h \ 105 68 lemon/bits/map_extender.h \ 106 69 lemon/bits/path_dump.h \ 107 lemon/bits/solver_bits.h \108 70 lemon/bits/traits.h \ 109 71 lemon/bits/variant.h \ -
lemon/adaptors.h
r464 r416 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 22 22 /// \ingroup graph_adaptors 23 23 /// \file 24 /// \brief Adaptor classes for digraphs and graphs24 /// \brief Several graph adaptors 25 25 /// 26 26 /// This file contains several useful adaptors for digraphs and graphs. … … 71 71 int nodeNum() const { return _digraph->nodeNum(); } 72 72 73 typedef ArcNumTagIndicator<Digraph> ArcNumTag;73 typedef EdgeNumTagIndicator<Digraph> EdgeNumTag; 74 74 int arcNum() const { return _digraph->arcNum(); } 75 75 76 typedef Find ArcTagIndicator<Digraph> FindArcTag;77 Arc findArc(const Node& u, const Node& v, const Arc& prev = INVALID) const{76 typedef FindEdgeTagIndicator<Digraph> FindEdgeTag; 77 Arc findArc(const Node& u, const Node& v, const Arc& prev = INVALID) { 78 78 return _digraph->findArc(u, v, prev); 79 79 } … … 82 82 Arc addArc(const Node& u, const Node& v) { return _digraph->addArc(u, v); } 83 83 84 void erase(const Node& n) { _digraph->erase(n); }85 void erase(const Arc& a) { _digraph->erase(a); }86 87 void clear() { _digraph->clear(); }84 void erase(const Node& n) const { _digraph->erase(n); } 85 void erase(const Arc& a) const { _digraph->erase(a); } 86 87 void clear() const { _digraph->clear(); } 88 88 89 89 int id(const Node& n) const { return _digraph->id(n); } … … 199 199 int nodeNum() const { return _graph->nodeNum(); } 200 200 201 typedef ArcNumTagIndicator<Graph> ArcNumTag;201 typedef EdgeNumTagIndicator<Graph> EdgeNumTag; 202 202 int arcNum() const { return _graph->arcNum(); } 203 204 typedef EdgeNumTagIndicator<Graph> EdgeNumTag;205 203 int edgeNum() const { return _graph->edgeNum(); } 206 204 207 typedef FindArcTagIndicator<Graph> FindArcTag; 208 Arc findArc(const Node& u, const Node& v, 209 const Arc& prev = INVALID) const { 205 typedef FindEdgeTagIndicator<Graph> FindEdgeTag; 206 Arc findArc(const Node& u, const Node& v, const Arc& prev = INVALID) { 210 207 return _graph->findArc(u, v, prev); 211 208 } 212 213 typedef FindEdgeTagIndicator<Graph> FindEdgeTag; 214 Edge findEdge(const Node& u, const Node& v, 215 const Edge& prev = INVALID) const { 209 Edge findEdge(const Node& u, const Node& v, const Edge& prev = INVALID) { 216 210 return _graph->findEdge(u, v, prev); 217 211 } … … 337 331 Arc addArc(const Node& u, const Node& v) { return Parent::addArc(v, u); } 338 332 339 typedef Find ArcTagIndicator<Digraph> FindArcTag;333 typedef FindEdgeTagIndicator<Digraph> FindEdgeTag; 340 334 Arc findArc(const Node& u, const Node& v, 341 const Arc& prev = INVALID) const{335 const Arc& prev = INVALID) { 342 336 return Parent::findArc(v, u, prev); 343 337 } … … 347 341 /// \ingroup graph_adaptors 348 342 /// 349 /// \brief Adaptor class for reversing the orientation of the arcs in 350 /// a digraph. 351 /// 352 /// ReverseDigraph can be used for reversing the arcs in a digraph. 353 /// It conforms to the \ref concepts::Digraph "Digraph" concept. 354 /// 355 /// The adapted digraph can also be modified through this adaptor 356 /// by adding or removing nodes or arcs, unless the \c GR template 357 /// parameter is set to be \c const. 358 /// 359 /// \tparam GR The type of the adapted digraph. 360 /// It must conform to the \ref concepts::Digraph "Digraph" concept. 361 /// It can also be specified to be \c const. 362 /// 363 /// \note The \c Node and \c Arc types of this adaptor and the adapted 364 /// digraph are convertible to each other. 365 template<typename GR> 366 #ifdef DOXYGEN 367 class ReverseDigraph { 368 #else 343 /// \brief A digraph adaptor which reverses the orientation of the arcs. 344 /// 345 /// ReverseDigraph reverses the arcs in the adapted digraph. The 346 /// SubDigraph is conform to the \ref concepts::Digraph 347 /// "Digraph concept". 348 /// 349 /// \tparam _Digraph It must be conform to the \ref concepts::Digraph 350 /// "Digraph concept". The type can be specified to be const. 351 template<typename _Digraph> 369 352 class ReverseDigraph : 370 public DigraphAdaptorExtender<ReverseDigraphBase<GR> > { 371 #endif 372 public: 373 /// The type of the adapted digraph. 374 typedef GR Digraph; 375 typedef DigraphAdaptorExtender<ReverseDigraphBase<GR> > Parent; 353 public DigraphAdaptorExtender<ReverseDigraphBase<_Digraph> > { 354 public: 355 typedef _Digraph Digraph; 356 typedef DigraphAdaptorExtender< 357 ReverseDigraphBase<_Digraph> > Parent; 376 358 protected: 377 359 ReverseDigraph() { } … … 380 362 /// \brief Constructor 381 363 /// 382 /// Creates a reverse digraph adaptor for the given digraph .364 /// Creates a reverse digraph adaptor for the given digraph 383 365 explicit ReverseDigraph(Digraph& digraph) { 384 366 Parent::setDigraph(digraph); … … 386 368 }; 387 369 388 /// \brief Returns a read-only ReverseDigraph adaptor 389 /// 390 /// This function just returns a read-only \ref ReverseDigraph adaptor. 391 /// \ingroup graph_adaptors 392 /// \relates ReverseDigraph 393 template<typename GR> 394 ReverseDigraph<const GR> reverseDigraph(const GR& digraph) { 395 return ReverseDigraph<const GR>(digraph); 370 /// \brief Just gives back a reverse digraph adaptor 371 /// 372 /// Just gives back a reverse digraph adaptor 373 template<typename Digraph> 374 ReverseDigraph<const Digraph> reverseDigraph(const Digraph& digraph) { 375 return ReverseDigraph<const Digraph>(digraph); 396 376 } 397 398 377 399 378 template <typename _Digraph, typename _NodeFilterMap, … … 479 458 } 480 459 481 void status(const Node& n, bool v) const { _node_filter->set(n, v); } 482 void status(const Arc& a, bool v) const { _arc_filter->set(a, v); } 483 484 bool status(const Node& n) const { return (*_node_filter)[n]; } 485 bool status(const Arc& a) const { return (*_arc_filter)[a]; } 460 void hide(const Node& n) const { _node_filter->set(n, false); } 461 void hide(const Arc& a) const { _arc_filter->set(a, false); } 462 463 void unHide(const Node& n) const { _node_filter->set(n, true); } 464 void unHide(const Arc& a) const { _arc_filter->set(a, true); } 465 466 bool hidden(const Node& n) const { return !(*_node_filter)[n]; } 467 bool hidden(const Arc& a) const { return !(*_arc_filter)[a]; } 486 468 487 469 typedef False NodeNumTag; 488 typedef False ArcNumTag;489 490 typedef Find ArcTagIndicator<Digraph> FindArcTag;470 typedef False EdgeNumTag; 471 472 typedef FindEdgeTagIndicator<Digraph> FindEdgeTag; 491 473 Arc findArc(const Node& source, const Node& target, 492 const Arc& prev = INVALID) const{474 const Arc& prev = INVALID) { 493 475 if (!(*_node_filter)[source] || !(*_node_filter)[target]) { 494 476 return INVALID; … … 619 601 } 620 602 621 void status(const Node& n, bool v) const { _node_filter->set(n, v); } 622 void status(const Arc& a, bool v) const { _arc_filter->set(a, v); } 623 624 bool status(const Node& n) const { return (*_node_filter)[n]; } 625 bool status(const Arc& a) const { return (*_arc_filter)[a]; } 603 void hide(const Node& n) const { _node_filter->set(n, false); } 604 void hide(const Arc& e) const { _arc_filter->set(e, false); } 605 606 void unHide(const Node& n) const { _node_filter->set(n, true); } 607 void unHide(const Arc& e) const { _arc_filter->set(e, true); } 608 609 bool hidden(const Node& n) const { return !(*_node_filter)[n]; } 610 bool hidden(const Arc& e) const { return !(*_arc_filter)[e]; } 626 611 627 612 typedef False NodeNumTag; 628 typedef False ArcNumTag;629 630 typedef Find ArcTagIndicator<Digraph> FindArcTag;613 typedef False EdgeNumTag; 614 615 typedef FindEdgeTagIndicator<Digraph> FindEdgeTag; 631 616 Arc findArc(const Node& source, const Node& target, 632 const Arc& prev = INVALID) const{617 const Arc& prev = INVALID) { 633 618 if (!(*_node_filter)[source] || !(*_node_filter)[target]) { 634 619 return INVALID; … … 695 680 /// \ingroup graph_adaptors 696 681 /// 697 /// \brief Adaptor class for hiding nodes and arcs in a digraph 698 /// 699 /// SubDigraph can be used for hiding nodes and arcs in a digraph. 700 /// A \c bool node map and a \c bool arc map must be specified, which 701 /// define the filters for nodes and arcs. 702 /// Only the nodes and arcs with \c true filter value are 703 /// shown in the subdigraph. The arcs that are incident to hidden 704 /// nodes are also filtered out. 705 /// This adaptor conforms to the \ref concepts::Digraph "Digraph" concept. 706 /// 707 /// The adapted digraph can also be modified through this adaptor 708 /// by adding or removing nodes or arcs, unless the \c GR template 709 /// parameter is set to be \c const. 710 /// 711 /// \tparam GR The type of the adapted digraph. 712 /// It must conform to the \ref concepts::Digraph "Digraph" concept. 713 /// It can also be specified to be \c const. 714 /// \tparam NF The type of the node filter map. 715 /// It must be a \c bool (or convertible) node map of the 716 /// adapted digraph. The default type is 717 /// \ref concepts::Digraph::NodeMap "GR::NodeMap<bool>". 718 /// \tparam AF The type of the arc filter map. 719 /// It must be \c bool (or convertible) arc map of the 720 /// adapted digraph. The default type is 721 /// \ref concepts::Digraph::ArcMap "GR::ArcMap<bool>". 722 /// 723 /// \note The \c Node and \c Arc types of this adaptor and the adapted 724 /// digraph are convertible to each other. 682 /// \brief An adaptor for hiding nodes and arcs in a digraph 683 /// 684 /// SubDigraph hides nodes and arcs in a digraph. A bool node map 685 /// and a bool arc map must be specified, which define the filters 686 /// for nodes and arcs. Just the nodes and arcs with true value are 687 /// shown in the subdigraph. The SubDigraph is conform to the \ref 688 /// concepts::Digraph "Digraph concept". If the \c _checked parameter 689 /// is true, then the arcs incident to filtered nodes are also 690 /// filtered out. 691 /// 692 /// \tparam _Digraph It must be conform to the \ref 693 /// concepts::Digraph "Digraph concept". The type can be specified 694 /// to const. 695 /// \tparam _NodeFilterMap A bool valued node map of the the adapted digraph. 696 /// \tparam _ArcFilterMap A bool valued arc map of the the adapted digraph. 697 /// \tparam _checked If the parameter is false then the arc filtering 698 /// is not checked with respect to node filter. Otherwise, each arc 699 /// is automatically filtered, which is incident to a filtered node. 725 700 /// 726 701 /// \see FilterNodes 727 702 /// \see FilterArcs 728 #ifdef DOXYGEN 729 template<typename GR, typename NF, typename AF> 730 class SubDigraph { 731 #else 732 template<typename GR, 733 typename NF = typename GR::template NodeMap<bool>, 734 typename AF = typename GR::template ArcMap<bool> > 735 class SubDigraph : 736 public DigraphAdaptorExtender<SubDigraphBase<GR, NF, AF, true> > { 737 #endif 738 public: 739 /// The type of the adapted digraph. 740 typedef GR Digraph; 741 /// The type of the node filter map. 742 typedef NF NodeFilterMap; 743 /// The type of the arc filter map. 744 typedef AF ArcFilterMap; 745 746 typedef DigraphAdaptorExtender<SubDigraphBase<GR, NF, AF, true> > 747 Parent; 703 template<typename _Digraph, 704 typename _NodeFilterMap = typename _Digraph::template NodeMap<bool>, 705 typename _ArcFilterMap = typename _Digraph::template ArcMap<bool>, 706 bool _checked = true> 707 class SubDigraph 708 : public DigraphAdaptorExtender< 709 SubDigraphBase<_Digraph, _NodeFilterMap, _ArcFilterMap, _checked> > { 710 public: 711 typedef _Digraph Digraph; 712 typedef _NodeFilterMap NodeFilterMap; 713 typedef _ArcFilterMap ArcFilterMap; 714 715 typedef DigraphAdaptorExtender< 716 SubDigraphBase<Digraph, NodeFilterMap, ArcFilterMap, _checked> > 717 Parent; 748 718 749 719 typedef typename Parent::Node Node; … … 756 726 /// \brief Constructor 757 727 /// 758 /// Creates a subdigraph for the given digraph with the759 /// given node and arc filter maps.728 /// Creates a subdigraph for the given digraph with 729 /// given node and arc map filters. 760 730 SubDigraph(Digraph& digraph, NodeFilterMap& node_filter, 761 731 ArcFilterMap& arc_filter) { … … 765 735 } 766 736 767 /// \brief Sets the status of the given node 768 /// 769 /// This function sets the status of the given node. 770 /// It is done by simply setting the assigned value of \c n 771 /// to \c v in the node filter map. 772 void status(const Node& n, bool v) const { Parent::status(n, v); } 773 774 /// \brief Sets the status of the given arc 775 /// 776 /// This function sets the status of the given arc. 777 /// It is done by simply setting the assigned value of \c a 778 /// to \c v in the arc filter map. 779 void status(const Arc& a, bool v) const { Parent::status(a, v); } 780 781 /// \brief Returns the status of the given node 782 /// 783 /// This function returns the status of the given node. 784 /// It is \c true if the given node is enabled (i.e. not hidden). 785 bool status(const Node& n) const { return Parent::status(n); } 786 787 /// \brief Returns the status of the given arc 788 /// 789 /// This function returns the status of the given arc. 790 /// It is \c true if the given arc is enabled (i.e. not hidden). 791 bool status(const Arc& a) const { return Parent::status(a); } 792 793 /// \brief Disables the given node 794 /// 795 /// This function disables the given node in the subdigraph, 796 /// so the iteration jumps over it. 797 /// It is the same as \ref status() "status(n, false)". 798 void disable(const Node& n) const { Parent::status(n, false); } 799 800 /// \brief Disables the given arc 801 /// 802 /// This function disables the given arc in the subdigraph, 803 /// so the iteration jumps over it. 804 /// It is the same as \ref status() "status(a, false)". 805 void disable(const Arc& a) const { Parent::status(a, false); } 806 807 /// \brief Enables the given node 808 /// 809 /// This function enables the given node in the subdigraph. 810 /// It is the same as \ref status() "status(n, true)". 811 void enable(const Node& n) const { Parent::status(n, true); } 812 813 /// \brief Enables the given arc 814 /// 815 /// This function enables the given arc in the subdigraph. 816 /// It is the same as \ref status() "status(a, true)". 817 void enable(const Arc& a) const { Parent::status(a, true); } 737 /// \brief Hides the node of the graph 738 /// 739 /// This function hides \c n in the digraph, i.e. the iteration 740 /// jumps over it. This is done by simply setting the value of \c n 741 /// to be false in the corresponding node-map. 742 void hide(const Node& n) const { Parent::hide(n); } 743 744 /// \brief Hides the arc of the graph 745 /// 746 /// This function hides \c a in the digraph, i.e. the iteration 747 /// jumps over it. This is done by simply setting the value of \c a 748 /// to be false in the corresponding arc-map. 749 void hide(const Arc& a) const { Parent::hide(a); } 750 751 /// \brief Unhides the node of the graph 752 /// 753 /// The value of \c n is set to be true in the node-map which stores 754 /// hide information. If \c n was hidden previuosly, then it is shown 755 /// again 756 void unHide(const Node& n) const { Parent::unHide(n); } 757 758 /// \brief Unhides the arc of the graph 759 /// 760 /// The value of \c a is set to be true in the arc-map which stores 761 /// hide information. If \c a was hidden previuosly, then it is shown 762 /// again 763 void unHide(const Arc& a) const { Parent::unHide(a); } 764 765 /// \brief Returns true if \c n is hidden. 766 /// 767 /// Returns true if \c n is hidden. 768 /// 769 bool hidden(const Node& n) const { return Parent::hidden(n); } 770 771 /// \brief Returns true if \c a is hidden. 772 /// 773 /// Returns true if \c a is hidden. 774 /// 775 bool hidden(const Arc& a) const { return Parent::hidden(a); } 818 776 819 777 }; 820 778 821 /// \brief Returns a read-only SubDigraph adaptor 822 /// 823 /// This function just returns a read-only \ref SubDigraph adaptor. 824 /// \ingroup graph_adaptors 825 /// \relates SubDigraph 826 template<typename GR, typename NF, typename AF> 827 SubDigraph<const GR, NF, AF> 828 subDigraph(const GR& digraph, 829 NF& node_filter_map, AF& arc_filter_map) { 830 return SubDigraph<const GR, NF, AF> 831 (digraph, node_filter_map, arc_filter_map); 779 /// \brief Just gives back a subdigraph 780 /// 781 /// Just gives back a subdigraph 782 template<typename Digraph, typename NodeFilterMap, typename ArcFilterMap> 783 SubDigraph<const Digraph, NodeFilterMap, ArcFilterMap> 784 subDigraph(const Digraph& digraph, NodeFilterMap& nfm, ArcFilterMap& afm) { 785 return SubDigraph<const Digraph, NodeFilterMap, ArcFilterMap> 786 (digraph, nfm, afm); 832 787 } 833 788 834 template<typename GR, typename NF, typename AF>835 SubDigraph<const GR, const NF, AF>836 subDigraph(const GR& digraph,837 const N F& node_filter_map, AF& arc_filter_map) {838 return SubDigraph<const GR, const NF, AF>839 (digraph, n ode_filter_map, arc_filter_map);789 template<typename Digraph, typename NodeFilterMap, typename ArcFilterMap> 790 SubDigraph<const Digraph, const NodeFilterMap, ArcFilterMap> 791 subDigraph(const Digraph& digraph, 792 const NodeFilterMap& nfm, ArcFilterMap& afm) { 793 return SubDigraph<const Digraph, const NodeFilterMap, ArcFilterMap> 794 (digraph, nfm, afm); 840 795 } 841 796 842 template<typename GR, typename NF, typename AF>843 SubDigraph<const GR, NF, const AF>844 subDigraph(const GR& digraph,845 N F& node_filter_map, const AF& arc_filter_map) {846 return SubDigraph<const GR, NF, const AF>847 (digraph, n ode_filter_map, arc_filter_map);797 template<typename Digraph, typename NodeFilterMap, typename ArcFilterMap> 798 SubDigraph<const Digraph, NodeFilterMap, const ArcFilterMap> 799 subDigraph(const Digraph& digraph, 800 NodeFilterMap& nfm, const ArcFilterMap& afm) { 801 return SubDigraph<const Digraph, NodeFilterMap, const ArcFilterMap> 802 (digraph, nfm, afm); 848 803 } 849 804 850 template<typename GR, typename NF, typename AF>851 SubDigraph<const GR, const NF, const AF>852 subDigraph(const GR& digraph,853 const N F& node_filter_map, const AF& arc_filter_map) {854 return SubDigraph<const GR, const NF, const AF>855 (digraph, node_filter_map, arc_filter_map);805 template<typename Digraph, typename NodeFilterMap, typename ArcFilterMap> 806 SubDigraph<const Digraph, const NodeFilterMap, const ArcFilterMap> 807 subDigraph(const Digraph& digraph, 808 const NodeFilterMap& nfm, const ArcFilterMap& afm) { 809 return SubDigraph<const Digraph, const NodeFilterMap, 810 const ArcFilterMap>(digraph, nfm, afm); 856 811 } 857 812 858 813 859 template <typename _Graph, typename _NodeFilterMap,860 typename _EdgeFilterMap, bool _checked = true>814 template <typename _Graph, typename NodeFilterMap, 815 typename EdgeFilterMap, bool _checked = true> 861 816 class SubGraphBase : public GraphAdaptorBase<_Graph> { 862 817 public: 863 818 typedef _Graph Graph; 864 typedef _NodeFilterMap NodeFilterMap;865 typedef _EdgeFilterMap EdgeFilterMap;866 867 819 typedef SubGraphBase Adaptor; 868 820 typedef GraphAdaptorBase<_Graph> Parent; … … 974 926 } 975 927 976 void status(const Node& n, bool v) const { _node_filter_map->set(n, v); } 977 void status(const Edge& e, bool v) const { _edge_filter_map->set(e, v); } 978 979 bool status(const Node& n) const { return (*_node_filter_map)[n]; } 980 bool status(const Edge& e) const { return (*_edge_filter_map)[e]; } 928 void hide(const Node& n) const { _node_filter_map->set(n, false); } 929 void hide(const Edge& e) const { _edge_filter_map->set(e, false); } 930 931 void unHide(const Node& n) const { _node_filter_map->set(n, true); } 932 void unHide(const Edge& e) const { _edge_filter_map->set(e, true); } 933 934 bool hidden(const Node& n) const { return !(*_node_filter_map)[n]; } 935 bool hidden(const Edge& e) const { return !(*_edge_filter_map)[e]; } 981 936 982 937 typedef False NodeNumTag; 983 typedef False ArcNumTag;984 938 typedef False EdgeNumTag; 985 939 986 typedef Find ArcTagIndicator<Graph> FindArcTag;940 typedef FindEdgeTagIndicator<Graph> FindEdgeTag; 987 941 Arc findArc(const Node& u, const Node& v, 988 const Arc& prev = INVALID) const{942 const Arc& prev = INVALID) { 989 943 if (!(*_node_filter_map)[u] || !(*_node_filter_map)[v]) { 990 944 return INVALID; … … 996 950 return arc; 997 951 } 998 999 typedef FindEdgeTagIndicator<Graph> FindEdgeTag;1000 952 Edge findEdge(const Node& u, const Node& v, 1001 const Edge& prev = INVALID) const{953 const Edge& prev = INVALID) { 1002 954 if (!(*_node_filter_map)[u] || !(*_node_filter_map)[v]) { 1003 955 return INVALID; … … 1088 1040 }; 1089 1041 1090 template <typename _Graph, typename _NodeFilterMap, typename _EdgeFilterMap>1091 class SubGraphBase<_Graph, _NodeFilterMap, _EdgeFilterMap, false>1042 template <typename _Graph, typename NodeFilterMap, typename EdgeFilterMap> 1043 class SubGraphBase<_Graph, NodeFilterMap, EdgeFilterMap, false> 1092 1044 : public GraphAdaptorBase<_Graph> { 1093 1045 public: 1094 1046 typedef _Graph Graph; 1095 typedef _NodeFilterMap NodeFilterMap;1096 typedef _EdgeFilterMap EdgeFilterMap;1097 1098 1047 typedef SubGraphBase Adaptor; 1099 1048 typedef GraphAdaptorBase<_Graph> Parent; … … 1173 1122 } 1174 1123 1175 void status(const Node& n, bool v) const { _node_filter_map->set(n, v); } 1176 void status(const Edge& e, bool v) const { _edge_filter_map->set(e, v); } 1177 1178 bool status(const Node& n) const { return (*_node_filter_map)[n]; } 1179 bool status(const Edge& e) const { return (*_edge_filter_map)[e]; } 1124 void hide(const Node& n) const { _node_filter_map->set(n, false); } 1125 void hide(const Edge& e) const { _edge_filter_map->set(e, false); } 1126 1127 void unHide(const Node& n) const { _node_filter_map->set(n, true); } 1128 void unHide(const Edge& e) const { _edge_filter_map->set(e, true); } 1129 1130 bool hidden(const Node& n) const { return !(*_node_filter_map)[n]; } 1131 bool hidden(const Edge& e) const { return !(*_edge_filter_map)[e]; } 1180 1132 1181 1133 typedef False NodeNumTag; 1182 typedef False ArcNumTag;1183 1134 typedef False EdgeNumTag; 1184 1135 1185 typedef Find ArcTagIndicator<Graph> FindArcTag;1136 typedef FindEdgeTagIndicator<Graph> FindEdgeTag; 1186 1137 Arc findArc(const Node& u, const Node& v, 1187 const Arc& prev = INVALID) const{1138 const Arc& prev = INVALID) { 1188 1139 Arc arc = Parent::findArc(u, v, prev); 1189 1140 while (arc != INVALID && !(*_edge_filter_map)[arc]) { … … 1192 1143 return arc; 1193 1144 } 1194 1195 typedef FindEdgeTagIndicator<Graph> FindEdgeTag;1196 1145 Edge findEdge(const Node& u, const Node& v, 1197 const Edge& prev = INVALID) const{1146 const Edge& prev = INVALID) { 1198 1147 Edge edge = Parent::findEdge(u, v, prev); 1199 1148 while (edge != INVALID && !(*_edge_filter_map)[edge]) { … … 1283 1232 /// \ingroup graph_adaptors 1284 1233 /// 1285 /// \brief Adaptor class for hiding nodes and edges in an undirected 1286 /// graph. 1287 /// 1288 /// SubGraph can be used for hiding nodes and edges in a graph. 1289 /// A \c bool node map and a \c bool edge map must be specified, which 1290 /// define the filters for nodes and edges. 1291 /// Only the nodes and edges with \c true filter value are 1292 /// shown in the subgraph. The edges that are incident to hidden 1293 /// nodes are also filtered out. 1294 /// This adaptor conforms to the \ref concepts::Graph "Graph" concept. 1295 /// 1296 /// The adapted graph can also be modified through this adaptor 1297 /// by adding or removing nodes or edges, unless the \c GR template 1298 /// parameter is set to be \c const. 1299 /// 1300 /// \tparam GR The type of the adapted graph. 1301 /// It must conform to the \ref concepts::Graph "Graph" concept. 1302 /// It can also be specified to be \c const. 1303 /// \tparam NF The type of the node filter map. 1304 /// It must be a \c bool (or convertible) node map of the 1305 /// adapted graph. The default type is 1306 /// \ref concepts::Graph::NodeMap "GR::NodeMap<bool>". 1307 /// \tparam EF The type of the edge filter map. 1308 /// It must be a \c bool (or convertible) edge map of the 1309 /// adapted graph. The default type is 1310 /// \ref concepts::Graph::EdgeMap "GR::EdgeMap<bool>". 1311 /// 1312 /// \note The \c Node, \c Edge and \c Arc types of this adaptor and the 1313 /// adapted graph are convertible to each other. 1234 /// \brief A graph adaptor for hiding nodes and edges in an 1235 /// undirected graph. 1236 /// 1237 /// SubGraph hides nodes and edges in a graph. A bool node map and a 1238 /// bool edge map must be specified, which define the filters for 1239 /// nodes and edges. Just the nodes and edges with true value are 1240 /// shown in the subgraph. The SubGraph is conform to the \ref 1241 /// concepts::Graph "Graph concept". If the \c _checked parameter is 1242 /// true, then the edges incident to filtered nodes are also 1243 /// filtered out. 1244 /// 1245 /// \tparam _Graph It must be conform to the \ref 1246 /// concepts::Graph "Graph concept". The type can be specified 1247 /// to const. 1248 /// \tparam _NodeFilterMap A bool valued node map of the the adapted graph. 1249 /// \tparam _EdgeFilterMap A bool valued edge map of the the adapted graph. 1250 /// \tparam _checked If the parameter is false then the edge filtering 1251 /// is not checked with respect to node filter. Otherwise, each edge 1252 /// is automatically filtered, which is incident to a filtered node. 1314 1253 /// 1315 1254 /// \see FilterNodes 1316 1255 /// \see FilterEdges 1317 #ifdef DOXYGEN 1318 template<typename GR, typename NF, typename EF> 1319 class SubGraph { 1320 #else 1321 template<typename GR, 1322 typename NF = typename GR::template NodeMap<bool>, 1323 typename EF = typename GR::template EdgeMap<bool> > 1324 class SubGraph : 1325 public GraphAdaptorExtender<SubGraphBase<GR, NF, EF, true> > { 1326 #endif 1327 public: 1328 /// The type of the adapted graph. 1329 typedef GR Graph; 1330 /// The type of the node filter map. 1331 typedef NF NodeFilterMap; 1332 /// The type of the edge filter map. 1333 typedef EF EdgeFilterMap; 1334 1335 typedef GraphAdaptorExtender< SubGraphBase<GR, NF, EF, true> > 1336 Parent; 1256 template<typename _Graph, typename NodeFilterMap, 1257 typename EdgeFilterMap, bool _checked = true> 1258 class SubGraph 1259 : public GraphAdaptorExtender< 1260 SubGraphBase<_Graph, NodeFilterMap, EdgeFilterMap, _checked> > { 1261 public: 1262 typedef _Graph Graph; 1263 typedef GraphAdaptorExtender< 1264 SubGraphBase<_Graph, NodeFilterMap, EdgeFilterMap> > Parent; 1337 1265 1338 1266 typedef typename Parent::Node Node; … … 1345 1273 /// \brief Constructor 1346 1274 /// 1347 /// Creates a subgraph for the given graph with the given node1348 /// and edge filter maps.1349 SubGraph(Graph& graph, NodeFilterMap& node_filter_map,1275 /// Creates a subgraph for the given graph with given node and 1276 /// edge map filters. 1277 SubGraph(Graph& _graph, NodeFilterMap& node_filter_map, 1350 1278 EdgeFilterMap& edge_filter_map) { 1351 setGraph( graph);1279 setGraph(_graph); 1352 1280 setNodeFilterMap(node_filter_map); 1353 1281 setEdgeFilterMap(edge_filter_map); 1354 1282 } 1355 1283 1356 /// \brief Sets the status of the given node 1357 /// 1358 /// This function sets the status of the given node. 1359 /// It is done by simply setting the assigned value of \c n 1360 /// to \c v in the node filter map. 1361 void status(const Node& n, bool v) const { Parent::status(n, v); } 1362 1363 /// \brief Sets the status of the given edge 1364 /// 1365 /// This function sets the status of the given edge. 1366 /// It is done by simply setting the assigned value of \c e 1367 /// to \c v in the edge filter map. 1368 void status(const Edge& e, bool v) const { Parent::status(e, v); } 1369 1370 /// \brief Returns the status of the given node 1371 /// 1372 /// This function returns the status of the given node. 1373 /// It is \c true if the given node is enabled (i.e. not hidden). 1374 bool status(const Node& n) const { return Parent::status(n); } 1375 1376 /// \brief Returns the status of the given edge 1377 /// 1378 /// This function returns the status of the given edge. 1379 /// It is \c true if the given edge is enabled (i.e. not hidden). 1380 bool status(const Edge& e) const { return Parent::status(e); } 1381 1382 /// \brief Disables the given node 1383 /// 1384 /// This function disables the given node in the subdigraph, 1385 /// so the iteration jumps over it. 1386 /// It is the same as \ref status() "status(n, false)". 1387 void disable(const Node& n) const { Parent::status(n, false); } 1388 1389 /// \brief Disables the given edge 1390 /// 1391 /// This function disables the given edge in the subgraph, 1392 /// so the iteration jumps over it. 1393 /// It is the same as \ref status() "status(e, false)". 1394 void disable(const Edge& e) const { Parent::status(e, false); } 1395 1396 /// \brief Enables the given node 1397 /// 1398 /// This function enables the given node in the subdigraph. 1399 /// It is the same as \ref status() "status(n, true)". 1400 void enable(const Node& n) const { Parent::status(n, true); } 1401 1402 /// \brief Enables the given edge 1403 /// 1404 /// This function enables the given edge in the subgraph. 1405 /// It is the same as \ref status() "status(e, true)". 1406 void enable(const Edge& e) const { Parent::status(e, true); } 1407 1284 /// \brief Hides the node of the graph 1285 /// 1286 /// This function hides \c n in the graph, i.e. the iteration 1287 /// jumps over it. This is done by simply setting the value of \c n 1288 /// to be false in the corresponding node-map. 1289 void hide(const Node& n) const { Parent::hide(n); } 1290 1291 /// \brief Hides the edge of the graph 1292 /// 1293 /// This function hides \c e in the graph, i.e. the iteration 1294 /// jumps over it. This is done by simply setting the value of \c e 1295 /// to be false in the corresponding edge-map. 1296 void hide(const Edge& e) const { Parent::hide(e); } 1297 1298 /// \brief Unhides the node of the graph 1299 /// 1300 /// The value of \c n is set to be true in the node-map which stores 1301 /// hide information. If \c n was hidden previuosly, then it is shown 1302 /// again 1303 void unHide(const Node& n) const { Parent::unHide(n); } 1304 1305 /// \brief Unhides the edge of the graph 1306 /// 1307 /// The value of \c e is set to be true in the edge-map which stores 1308 /// hide information. If \c e was hidden previuosly, then it is shown 1309 /// again 1310 void unHide(const Edge& e) const { Parent::unHide(e); } 1311 1312 /// \brief Returns true if \c n is hidden. 1313 /// 1314 /// Returns true if \c n is hidden. 1315 /// 1316 bool hidden(const Node& n) const { return Parent::hidden(n); } 1317 1318 /// \brief Returns true if \c e is hidden. 1319 /// 1320 /// Returns true if \c e is hidden. 1321 /// 1322 bool hidden(const Edge& e) const { return Parent::hidden(e); } 1408 1323 }; 1409 1324 1410 /// \brief Returns a read-only SubGraph adaptor 1411 /// 1412 /// This function just returns a read-only \ref SubGraph adaptor. 1325 /// \brief Just gives back a subgraph 1326 /// 1327 /// Just gives back a subgraph 1328 template<typename Graph, typename NodeFilterMap, typename ArcFilterMap> 1329 SubGraph<const Graph, NodeFilterMap, ArcFilterMap> 1330 subGraph(const Graph& graph, NodeFilterMap& nfm, ArcFilterMap& efm) { 1331 return SubGraph<const Graph, NodeFilterMap, ArcFilterMap>(graph, nfm, efm); 1332 } 1333 1334 template<typename Graph, typename NodeFilterMap, typename ArcFilterMap> 1335 SubGraph<const Graph, const NodeFilterMap, ArcFilterMap> 1336 subGraph(const Graph& graph, 1337 const NodeFilterMap& nfm, ArcFilterMap& efm) { 1338 return SubGraph<const Graph, const NodeFilterMap, ArcFilterMap> 1339 (graph, nfm, efm); 1340 } 1341 1342 template<typename Graph, typename NodeFilterMap, typename ArcFilterMap> 1343 SubGraph<const Graph, NodeFilterMap, const ArcFilterMap> 1344 subGraph(const Graph& graph, 1345 NodeFilterMap& nfm, const ArcFilterMap& efm) { 1346 return SubGraph<const Graph, NodeFilterMap, const ArcFilterMap> 1347 (graph, nfm, efm); 1348 } 1349 1350 template<typename Graph, typename NodeFilterMap, typename ArcFilterMap> 1351 SubGraph<const Graph, const NodeFilterMap, const ArcFilterMap> 1352 subGraph(const Graph& graph, 1353 const NodeFilterMap& nfm, const ArcFilterMap& efm) { 1354 return SubGraph<const Graph, const NodeFilterMap, const ArcFilterMap> 1355 (graph, nfm, efm); 1356 } 1357 1413 1358 /// \ingroup graph_adaptors 1414 /// \relates SubGraph 1415 template<typename GR, typename NF, typename EF> 1416 SubGraph<const GR, NF, EF> 1417 subGraph(const GR& graph, 1418 NF& node_filter_map, EF& edge_filter_map) { 1419 return SubGraph<const GR, NF, EF> 1420 (graph, node_filter_map, edge_filter_map); 1421 } 1422 1423 template<typename GR, typename NF, typename EF> 1424 SubGraph<const GR, const NF, EF> 1425 subGraph(const GR& graph, 1426 const NF& node_filter_map, EF& edge_filter_map) { 1427 return SubGraph<const GR, const NF, EF> 1428 (graph, node_filter_map, edge_filter_map); 1429 } 1430 1431 template<typename GR, typename NF, typename EF> 1432 SubGraph<const GR, NF, const EF> 1433 subGraph(const GR& graph, 1434 NF& node_filter_map, const EF& edge_filter_map) { 1435 return SubGraph<const GR, NF, const EF> 1436 (graph, node_filter_map, edge_filter_map); 1437 } 1438 1439 template<typename GR, typename NF, typename EF> 1440 SubGraph<const GR, const NF, const EF> 1441 subGraph(const GR& graph, 1442 const NF& node_filter_map, const EF& edge_filter_map) { 1443 return SubGraph<const GR, const NF, const EF> 1444 (graph, node_filter_map, edge_filter_map); 1445 } 1446 1447 1448 /// \ingroup graph_adaptors 1449 /// 1450 /// \brief Adaptor class for hiding nodes in a digraph or a graph. 1451 /// 1452 /// FilterNodes adaptor can be used for hiding nodes in a digraph or a 1453 /// graph. A \c bool node map must be specified, which defines the filter 1454 /// for the nodes. Only the nodes with \c true filter value and the 1455 /// arcs/edges incident to nodes both with \c true filter value are shown 1456 /// in the subgraph. This adaptor conforms to the \ref concepts::Digraph 1457 /// "Digraph" concept or the \ref concepts::Graph "Graph" concept 1458 /// depending on the \c GR template parameter. 1459 /// 1460 /// The adapted (di)graph can also be modified through this adaptor 1461 /// by adding or removing nodes or arcs/edges, unless the \c GR template 1462 /// parameter is set to be \c const. 1463 /// 1464 /// \tparam GR The type of the adapted digraph or graph. 1465 /// It must conform to the \ref concepts::Digraph "Digraph" concept 1466 /// or the \ref concepts::Graph "Graph" concept. 1467 /// It can also be specified to be \c const. 1468 /// \tparam NF The type of the node filter map. 1469 /// It must be a \c bool (or convertible) node map of the 1470 /// adapted (di)graph. The default type is 1471 /// \ref concepts::Graph::NodeMap "GR::NodeMap<bool>". 1472 /// 1473 /// \note The \c Node and <tt>Arc/Edge</tt> types of this adaptor and the 1474 /// adapted (di)graph are convertible to each other. 1359 /// 1360 /// \brief An adaptor for hiding nodes from a digraph or a graph. 1361 /// 1362 /// FilterNodes adaptor hides nodes in a graph or a digraph. A bool 1363 /// node map must be specified, which defines the filters for 1364 /// nodes. Just the unfiltered nodes and the arcs or edges incident 1365 /// to unfiltered nodes are shown in the subdigraph or subgraph. The 1366 /// FilterNodes is conform to the \ref concepts::Digraph 1367 /// "Digraph concept" or \ref concepts::Graph "Graph concept" depending 1368 /// on the \c _Digraph template parameter. If the \c _checked 1369 /// parameter is true, then the arc or edges incident to filtered nodes 1370 /// are also filtered out. 1371 /// 1372 /// \tparam _Digraph It must be conform to the \ref 1373 /// concepts::Digraph "Digraph concept" or \ref concepts::Graph 1374 /// "Graph concept". The type can be specified to be const. 1375 /// \tparam _NodeFilterMap A bool valued node map of the the adapted graph. 1376 /// \tparam _checked If the parameter is false then the arc or edge 1377 /// filtering is not checked with respect to node filter. In this 1378 /// case just isolated nodes can be filtered out from the 1379 /// graph. 1475 1380 #ifdef DOXYGEN 1476 template<typename GR, typename NF> 1477 class FilterNodes { 1381 template<typename _Digraph, 1382 typename _NodeFilterMap = typename _Digraph::template NodeMap<bool>, 1383 bool _checked = true> 1478 1384 #else 1479 template<typename GR, 1480 typename NF = typename GR::template NodeMap<bool>, 1385 template<typename _Digraph, 1386 typename _NodeFilterMap = typename _Digraph::template NodeMap<bool>, 1387 bool _checked = true, 1481 1388 typename Enable = void> 1482 class FilterNodes :1483 public DigraphAdaptorExtender<1484 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, bool>, true> > {1485 1389 #endif 1486 public: 1487 1488 typedef GR Digraph; 1489 typedef NF NodeFilterMap; 1490 1491 typedef DigraphAdaptorExtender< 1492 SubDigraphBase<GR, NF, ConstMap<typename GR::Arc, bool>, true> > 1493 Parent; 1390 class FilterNodes 1391 : public SubDigraph<_Digraph, _NodeFilterMap, 1392 ConstMap<typename _Digraph::Arc, bool>, _checked> { 1393 public: 1394 1395 typedef _Digraph Digraph; 1396 typedef _NodeFilterMap NodeFilterMap; 1397 1398 typedef SubDigraph<Digraph, NodeFilterMap, 1399 ConstMap<typename Digraph::Arc, bool>, _checked> 1400 Parent; 1494 1401 1495 1402 typedef typename Parent::Node Node; … … 1506 1413 /// \brief Constructor 1507 1414 /// 1508 /// Creates a subgraph for the given digraph or graph with the1415 /// Creates an adaptor for the given digraph or graph with 1509 1416 /// given node filter map. 1510 FilterNodes(GR& graph, NodeFilterMap& node_filter) : 1511 Parent(), const_true_map(true) 1512 { 1513 Parent::setDigraph(graph); 1417 FilterNodes(Digraph& _digraph, NodeFilterMap& node_filter) : 1418 Parent(), const_true_map(true) { 1419 Parent::setDigraph(_digraph); 1514 1420 Parent::setNodeFilterMap(node_filter); 1515 1421 Parent::setArcFilterMap(const_true_map); 1516 1422 } 1517 1423 1518 /// \brief Sets the status of the given node 1519 /// 1520 /// This function sets the status of the given node. 1521 /// It is done by simply setting the assigned value of \c n 1522 /// to \c v in the node filter map. 1523 void status(const Node& n, bool v) const { Parent::status(n, v); } 1524 1525 /// \brief Returns the status of the given node 1526 /// 1527 /// This function returns the status of the given node. 1528 /// It is \c true if the given node is enabled (i.e. not hidden). 1529 bool status(const Node& n) const { return Parent::status(n); } 1530 1531 /// \brief Disables the given node 1532 /// 1533 /// This function disables the given node, so the iteration 1534 /// jumps over it. 1535 /// It is the same as \ref status() "status(n, false)". 1536 void disable(const Node& n) const { Parent::status(n, false); } 1537 1538 /// \brief Enables the given node 1539 /// 1540 /// This function enables the given node. 1541 /// It is the same as \ref status() "status(n, true)". 1542 void enable(const Node& n) const { Parent::status(n, true); } 1424 /// \brief Hides the node of the graph 1425 /// 1426 /// This function hides \c n in the digraph or graph, i.e. the iteration 1427 /// jumps over it. This is done by simply setting the value of \c n 1428 /// to be false in the corresponding node map. 1429 void hide(const Node& n) const { Parent::hide(n); } 1430 1431 /// \brief Unhides the node of the graph 1432 /// 1433 /// The value of \c n is set to be true in the node-map which stores 1434 /// hide information. If \c n was hidden previuosly, then it is shown 1435 /// again 1436 void unHide(const Node& n) const { Parent::unHide(n); } 1437 1438 /// \brief Returns true if \c n is hidden. 1439 /// 1440 /// Returns true if \c n is hidden. 1441 /// 1442 bool hidden(const Node& n) const { return Parent::hidden(n); } 1543 1443 1544 1444 }; 1545 1445 1546 template<typename GR, typename NF> 1547 class FilterNodes<GR, NF, 1548 typename enable_if<UndirectedTagIndicator<GR> >::type> : 1549 public GraphAdaptorExtender< 1550 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, bool>, true> > { 1551 1552 public: 1553 typedef GR Graph; 1554 typedef NF NodeFilterMap; 1555 typedef GraphAdaptorExtender< 1556 SubGraphBase<GR, NF, ConstMap<typename GR::Edge, bool>, true> > 1557 Parent; 1446 template<typename _Graph, typename _NodeFilterMap, bool _checked> 1447 class FilterNodes<_Graph, _NodeFilterMap, _checked, 1448 typename enable_if<UndirectedTagIndicator<_Graph> >::type> 1449 : public SubGraph<_Graph, _NodeFilterMap, 1450 ConstMap<typename _Graph::Edge, bool>, _checked> { 1451 public: 1452 typedef _Graph Graph; 1453 typedef _NodeFilterMap NodeFilterMap; 1454 typedef SubGraph<Graph, NodeFilterMap, 1455 ConstMap<typename Graph::Edge, bool> > Parent; 1558 1456 1559 1457 typedef typename Parent::Node Node; … … 1574 1472 } 1575 1473 1576 void status(const Node& n, bool v) const { Parent::status(n, v); } 1577 bool status(const Node& n) const { return Parent::status(n); } 1578 void disable(const Node& n) const { Parent::status(n, false); } 1579 void enable(const Node& n) const { Parent::status(n, true); } 1474 void hide(const Node& n) const { Parent::hide(n); } 1475 void unHide(const Node& n) const { Parent::unHide(n); } 1476 bool hidden(const Node& n) const { return Parent::hidden(n); } 1580 1477 1581 1478 }; 1582 1479 1583 1480 1584 /// \brief Returns a read-only FilterNodes adaptor 1585 /// 1586 /// This function just returns a read-only \ref FilterNodes adaptor. 1481 /// \brief Just gives back a FilterNodes adaptor 1482 /// 1483 /// Just gives back a FilterNodes adaptor 1484 template<typename Digraph, typename NodeFilterMap> 1485 FilterNodes<const Digraph, NodeFilterMap> 1486 filterNodes(const Digraph& digraph, NodeFilterMap& nfm) { 1487 return FilterNodes<const Digraph, NodeFilterMap>(digraph, nfm); 1488 } 1489 1490 template<typename Digraph, typename NodeFilterMap> 1491 FilterNodes<const Digraph, const NodeFilterMap> 1492 filterNodes(const Digraph& digraph, const NodeFilterMap& nfm) { 1493 return FilterNodes<const Digraph, const NodeFilterMap>(digraph, nfm); 1494 } 1495 1587 1496 /// \ingroup graph_adaptors 1588 /// \relates FilterNodes 1589 template<typename GR, typename NF> 1590 FilterNodes<const GR, NF> 1591 filterNodes(const GR& graph, NF& node_filter_map) { 1592 return FilterNodes<const GR, NF>(graph, node_filter_map); 1593 } 1594 1595 template<typename GR, typename NF> 1596 FilterNodes<const GR, const NF> 1597 filterNodes(const GR& graph, const NF& node_filter_map) { 1598 return FilterNodes<const GR, const NF>(graph, node_filter_map); 1599 } 1600 1601 /// \ingroup graph_adaptors 1602 /// 1603 /// \brief Adaptor class for hiding arcs in a digraph. 1604 /// 1605 /// FilterArcs adaptor can be used for hiding arcs in a digraph. 1606 /// A \c bool arc map must be specified, which defines the filter for 1607 /// the arcs. Only the arcs with \c true filter value are shown in the 1608 /// subdigraph. This adaptor conforms to the \ref concepts::Digraph 1609 /// "Digraph" concept. 1610 /// 1611 /// The adapted digraph can also be modified through this adaptor 1612 /// by adding or removing nodes or arcs, unless the \c GR template 1613 /// parameter is set to be \c const. 1614 /// 1615 /// \tparam GR The type of the adapted digraph. 1616 /// It must conform to the \ref concepts::Digraph "Digraph" concept. 1617 /// It can also be specified to be \c const. 1618 /// \tparam AF The type of the arc filter map. 1619 /// It must be a \c bool (or convertible) arc map of the 1620 /// adapted digraph. The default type is 1621 /// \ref concepts::Digraph::ArcMap "GR::ArcMap<bool>". 1622 /// 1623 /// \note The \c Node and \c Arc types of this adaptor and the adapted 1624 /// digraph are convertible to each other. 1625 #ifdef DOXYGEN 1626 template<typename GR, 1627 typename AF> 1628 class FilterArcs { 1629 #else 1630 template<typename GR, 1631 typename AF = typename GR::template ArcMap<bool> > 1497 /// 1498 /// \brief An adaptor for hiding arcs from a digraph. 1499 /// 1500 /// FilterArcs adaptor hides arcs in a digraph. A bool arc map must 1501 /// be specified, which defines the filters for arcs. Just the 1502 /// unfiltered arcs are shown in the subdigraph. The FilterArcs is 1503 /// conform to the \ref concepts::Digraph "Digraph concept". 1504 /// 1505 /// \tparam _Digraph It must be conform to the \ref concepts::Digraph 1506 /// "Digraph concept". The type can be specified to be const. 1507 /// \tparam _ArcFilterMap A bool valued arc map of the the adapted 1508 /// graph. 1509 template<typename _Digraph, typename _ArcFilterMap> 1632 1510 class FilterArcs : 1633 public DigraphAdaptorExtender< 1634 SubDigraphBase<GR, ConstMap<typename GR::Node, bool>, AF, false> > { 1635 #endif 1636 public: 1637 /// The type of the adapted digraph. 1638 typedef GR Digraph; 1639 /// The type of the arc filter map. 1640 typedef AF ArcFilterMap; 1641 1642 typedef DigraphAdaptorExtender< 1643 SubDigraphBase<GR, ConstMap<typename GR::Node, bool>, AF, false> > 1644 Parent; 1511 public SubDigraph<_Digraph, ConstMap<typename _Digraph::Node, bool>, 1512 _ArcFilterMap, false> { 1513 public: 1514 typedef _Digraph Digraph; 1515 typedef _ArcFilterMap ArcFilterMap; 1516 1517 typedef SubDigraph<Digraph, ConstMap<typename Digraph::Node, bool>, 1518 ArcFilterMap, false> Parent; 1645 1519 1646 1520 typedef typename Parent::Arc Arc; … … 1657 1531 /// \brief Constructor 1658 1532 /// 1659 /// Creates a subdigraph for the given digraph with the given arc1660 /// filter map.1533 /// Creates a FilterArcs adaptor for the given graph with 1534 /// given arc map filter. 1661 1535 FilterArcs(Digraph& digraph, ArcFilterMap& arc_filter) 1662 1536 : Parent(), const_true_map(true) { … … 1666 1540 } 1667 1541 1668 /// \brief Sets the status of the given arc 1669 /// 1670 /// This function sets the status of the given arc. 1671 /// It is done by simply setting the assigned value of \c a 1672 /// to \c v in the arc filter map. 1673 void status(const Arc& a, bool v) const { Parent::status(a, v); } 1674 1675 /// \brief Returns the status of the given arc 1676 /// 1677 /// This function returns the status of the given arc. 1678 /// It is \c true if the given arc is enabled (i.e. not hidden). 1679 bool status(const Arc& a) const { return Parent::status(a); } 1680 1681 /// \brief Disables the given arc 1682 /// 1683 /// This function disables the given arc in the subdigraph, 1684 /// so the iteration jumps over it. 1685 /// It is the same as \ref status() "status(a, false)". 1686 void disable(const Arc& a) const { Parent::status(a, false); } 1687 1688 /// \brief Enables the given arc 1689 /// 1690 /// This function enables the given arc in the subdigraph. 1691 /// It is the same as \ref status() "status(a, true)". 1692 void enable(const Arc& a) const { Parent::status(a, true); } 1542 /// \brief Hides the arc of the graph 1543 /// 1544 /// This function hides \c a in the graph, i.e. the iteration 1545 /// jumps over it. This is done by simply setting the value of \c a 1546 /// to be false in the corresponding arc map. 1547 void hide(const Arc& a) const { Parent::hide(a); } 1548 1549 /// \brief Unhides the arc of the graph 1550 /// 1551 /// The value of \c a is set to be true in the arc-map which stores 1552 /// hide information. If \c a was hidden previuosly, then it is shown 1553 /// again 1554 void unHide(const Arc& a) const { Parent::unHide(a); } 1555 1556 /// \brief Returns true if \c a is hidden. 1557 /// 1558 /// Returns true if \c a is hidden. 1559 /// 1560 bool hidden(const Arc& a) const { return Parent::hidden(a); } 1693 1561 1694 1562 }; 1695 1563 1696 /// \brief Returns a read-only FilterArcs adaptor 1697 /// 1698 /// This function just returns a read-only \ref FilterArcs adaptor. 1564 /// \brief Just gives back an FilterArcs adaptor 1565 /// 1566 /// Just gives back an FilterArcs adaptor 1567 template<typename Digraph, typename ArcFilterMap> 1568 FilterArcs<const Digraph, ArcFilterMap> 1569 filterArcs(const Digraph& digraph, ArcFilterMap& afm) { 1570 return FilterArcs<const Digraph, ArcFilterMap>(digraph, afm); 1571 } 1572 1573 template<typename Digraph, typename ArcFilterMap> 1574 FilterArcs<const Digraph, const ArcFilterMap> 1575 filterArcs(const Digraph& digraph, const ArcFilterMap& afm) { 1576 return FilterArcs<const Digraph, const ArcFilterMap>(digraph, afm); 1577 } 1578 1699 1579 /// \ingroup graph_adaptors 1700 /// \relates FilterArcs 1701 template<typename GR, typename AF> 1702 FilterArcs<const GR, AF> 1703 filterArcs(const GR& digraph, AF& arc_filter_map) { 1704 return FilterArcs<const GR, AF>(digraph, arc_filter_map); 1705 } 1706 1707 template<typename GR, typename AF> 1708 FilterArcs<const GR, const AF> 1709 filterArcs(const GR& digraph, const AF& arc_filter_map) { 1710 return FilterArcs<const GR, const AF>(digraph, arc_filter_map); 1711 } 1712 1713 /// \ingroup graph_adaptors 1714 /// 1715 /// \brief Adaptor class for hiding edges in a graph. 1716 /// 1717 /// FilterEdges adaptor can be used for hiding edges in a graph. 1718 /// A \c bool edge map must be specified, which defines the filter for 1719 /// the edges. Only the edges with \c true filter value are shown in the 1720 /// subgraph. This adaptor conforms to the \ref concepts::Graph 1721 /// "Graph" concept. 1722 /// 1723 /// The adapted graph can also be modified through this adaptor 1724 /// by adding or removing nodes or edges, unless the \c GR template 1725 /// parameter is set to be \c const. 1726 /// 1727 /// \tparam GR The type of the adapted graph. 1728 /// It must conform to the \ref concepts::Graph "Graph" concept. 1729 /// It can also be specified to be \c const. 1730 /// \tparam EF The type of the edge filter map. 1731 /// It must be a \c bool (or convertible) edge map of the 1732 /// adapted graph. The default type is 1733 /// \ref concepts::Graph::EdgeMap "GR::EdgeMap<bool>". 1734 /// 1735 /// \note The \c Node, \c Edge and \c Arc types of this adaptor and the 1736 /// adapted graph are convertible to each other. 1737 #ifdef DOXYGEN 1738 template<typename GR, 1739 typename EF> 1740 class FilterEdges { 1741 #else 1742 template<typename GR, 1743 typename EF = typename GR::template EdgeMap<bool> > 1580 /// 1581 /// \brief An adaptor for hiding edges from a graph. 1582 /// 1583 /// FilterEdges adaptor hides edges in a digraph. A bool edge map must 1584 /// be specified, which defines the filters for edges. Just the 1585 /// unfiltered edges are shown in the subdigraph. The FilterEdges is 1586 /// conform to the \ref concepts::Graph "Graph concept". 1587 /// 1588 /// \tparam _Graph It must be conform to the \ref concepts::Graph 1589 /// "Graph concept". The type can be specified to be const. 1590 /// \tparam _EdgeFilterMap A bool valued edge map of the the adapted 1591 /// graph. 1592 template<typename _Graph, typename _EdgeFilterMap> 1744 1593 class FilterEdges : 1745 public GraphAdaptorExtender< 1746 SubGraphBase<GR, ConstMap<typename GR::Node,bool>, EF, false> > { 1747 #endif 1748 public: 1749 /// The type of the adapted graph. 1750 typedef GR Graph; 1751 /// The type of the edge filter map. 1752 typedef EF EdgeFilterMap; 1753 1754 typedef GraphAdaptorExtender< 1755 SubGraphBase<GR, ConstMap<typename GR::Node,bool>, EF, false> > 1756 Parent; 1757 1594 public SubGraph<_Graph, ConstMap<typename _Graph::Node,bool>, 1595 _EdgeFilterMap, false> { 1596 public: 1597 typedef _Graph Graph; 1598 typedef _EdgeFilterMap EdgeFilterMap; 1599 typedef SubGraph<Graph, ConstMap<typename Graph::Node,bool>, 1600 EdgeFilterMap, false> Parent; 1758 1601 typedef typename Parent::Edge Edge; 1759 1760 1602 protected: 1761 1603 ConstMap<typename Graph::Node, bool> const_true_map; … … 1769 1611 /// \brief Constructor 1770 1612 /// 1771 /// Creates a subgraph for the given graph with the given edge1772 /// filter map.1773 FilterEdges(Graph& graph, EdgeFilterMap& edge_filter_map) :1613 /// Creates a FilterEdges adaptor for the given graph with 1614 /// given edge map filters. 1615 FilterEdges(Graph& _graph, EdgeFilterMap& edge_filter_map) : 1774 1616 Parent(), const_true_map(true) { 1775 Parent::setGraph( graph);1617 Parent::setGraph(_graph); 1776 1618 Parent::setNodeFilterMap(const_true_map); 1777 1619 Parent::setEdgeFilterMap(edge_filter_map); 1778 1620 } 1779 1621 1780 /// \brief Sets the status of the given edge 1781 /// 1782 /// This function sets the status of the given edge. 1783 /// It is done by simply setting the assigned value of \c e 1784 /// to \c v in the edge filter map. 1785 void status(const Edge& e, bool v) const { Parent::status(e, v); } 1786 1787 /// \brief Returns the status of the given edge 1788 /// 1789 /// This function returns the status of the given edge. 1790 /// It is \c true if the given edge is enabled (i.e. not hidden). 1791 bool status(const Edge& e) const { return Parent::status(e); } 1792 1793 /// \brief Disables the given edge 1794 /// 1795 /// This function disables the given edge in the subgraph, 1796 /// so the iteration jumps over it. 1797 /// It is the same as \ref status() "status(e, false)". 1798 void disable(const Edge& e) const { Parent::status(e, false); } 1799 1800 /// \brief Enables the given edge 1801 /// 1802 /// This function enables the given edge in the subgraph. 1803 /// It is the same as \ref status() "status(e, true)". 1804 void enable(const Edge& e) const { Parent::status(e, true); } 1622 /// \brief Hides the edge of the graph 1623 /// 1624 /// This function hides \c e in the graph, i.e. the iteration 1625 /// jumps over it. This is done by simply setting the value of \c e 1626 /// to be false in the corresponding edge-map. 1627 void hide(const Edge& e) const { Parent::hide(e); } 1628 1629 /// \brief Unhides the edge of the graph 1630 /// 1631 /// The value of \c e is set to be true in the edge-map which stores 1632 /// hide information. If \c e was hidden previuosly, then it is shown 1633 /// again 1634 void unHide(const Edge& e) const { Parent::unHide(e); } 1635 1636 /// \brief Returns true if \c e is hidden. 1637 /// 1638 /// Returns true if \c e is hidden. 1639 /// 1640 bool hidden(const Edge& e) const { return Parent::hidden(e); } 1805 1641 1806 1642 }; 1807 1643 1808 /// \brief Returns a read-only FilterEdges adaptor 1809 /// 1810 /// This function just returns a read-only \ref FilterEdges adaptor. 1811 /// \ingroup graph_adaptors 1812 /// \relates FilterEdges 1813 template<typename GR, typename EF> 1814 FilterEdges<const GR, EF> 1815 filterEdges(const GR& graph, EF& edge_filter_map) { 1816 return FilterEdges<const GR, EF>(graph, edge_filter_map); 1644 /// \brief Just gives back a FilterEdges adaptor 1645 /// 1646 /// Just gives back a FilterEdges adaptor 1647 template<typename Graph, typename EdgeFilterMap> 1648 FilterEdges<const Graph, EdgeFilterMap> 1649 filterEdges(const Graph& graph, EdgeFilterMap& efm) { 1650 return FilterEdges<const Graph, EdgeFilterMap>(graph, efm); 1817 1651 } 1818 1652 1819 template<typename G R, typename EF>1820 FilterEdges<const G R, const EF>1821 filterEdges(const G R& graph, const EF& edge_filter_map) {1822 return FilterEdges<const G R, const EF>(graph, edge_filter_map);1653 template<typename Graph, typename EdgeFilterMap> 1654 FilterEdges<const Graph, const EdgeFilterMap> 1655 filterEdges(const Graph& graph, const EdgeFilterMap& efm) { 1656 return FilterEdges<const Graph, const EdgeFilterMap>(graph, efm); 1823 1657 } 1824 1825 1658 1826 1659 template <typename _Digraph> … … 1862 1695 } 1863 1696 }; 1697 1698 1864 1699 1865 1700 void first(Node& n) const { … … 2011 1846 2012 1847 typedef NodeNumTagIndicator<Digraph> NodeNumTag; 2013 int nodeNum() const { return _digraph->nodeNum(); } 2014 2015 typedef ArcNumTagIndicator<Digraph> ArcNumTag; 1848 int nodeNum() const { return 2 * _digraph->arcNum(); } 1849 typedef EdgeNumTagIndicator<Digraph> EdgeNumTag; 2016 1850 int arcNum() const { return 2 * _digraph->arcNum(); } 2017 2018 typedef ArcNumTag EdgeNumTag;2019 1851 int edgeNum() const { return _digraph->arcNum(); } 2020 1852 2021 typedef Find ArcTagIndicator<Digraph> FindArcTag;1853 typedef FindEdgeTagIndicator<Digraph> FindEdgeTag; 2022 1854 Arc findArc(Node s, Node t, Arc p = INVALID) const { 2023 1855 if (p == INVALID) { … … 2038 1870 } 2039 1871 2040 typedef FindArcTag FindEdgeTag;2041 1872 Edge findEdge(Node s, Node t, Edge p = INVALID) const { 2042 1873 if (s != t) { … … 2046 1877 arc = _digraph->findArc(t, s); 2047 1878 if (arc != INVALID) return arc; 2048 } else if (_digraph->s ource(p) == s) {1879 } else if (_digraph->s(p) == s) { 2049 1880 Edge arc = _digraph->findArc(s, t, p); 2050 1881 if (arc != INVALID) return arc; … … 2075 1906 typedef _Value Value; 2076 1907 typedef Arc Key; 2077 typedef typename MapTraits<MapImpl>::ConstReturnValue ConstReturnValue;2078 typedef typename MapTraits<MapImpl>::ReturnValue ReturnValue;2079 typedef typename MapTraits<MapImpl>::ConstReturnValue ConstReference;2080 typedef typename MapTraits<MapImpl>::ReturnValue Reference;2081 1908 2082 1909 ArcMapBase(const Adaptor& adaptor) : … … 2094 1921 } 2095 1922 2096 ConstReturnValue operator[](const Arc& a) const { 1923 typename MapTraits<MapImpl>::ConstReturnValue 1924 operator[](const Arc& a) const { 2097 1925 if (direction(a)) { 2098 1926 return _forward[a]; … … 2102 1930 } 2103 1931 2104 ReturnValue operator[](const Arc& a) { 1932 typename MapTraits<MapImpl>::ReturnValue 1933 operator[](const Arc& a) { 2105 1934 if (direction(a)) { 2106 1935 return _forward[a]; … … 2152 1981 typedef SubMapExtender<Adaptor, ArcMapBase<Value> > Parent; 2153 1982 2154 explicitArcMap(const Adaptor& adaptor)1983 ArcMap(const Adaptor& adaptor) 2155 1984 : Parent(adaptor) {} 2156 1985 … … 2199 2028 NodeNotifier& notifier(Node) const { return _digraph->notifier(Node()); } 2200 2029 2201 typedef typename ItemSetTraits<Digraph, Edge>::ItemNotifier EdgeNotifier;2202 EdgeNotifier& notifier(Edge) const { return _digraph->notifier(Edge()); }2203 2204 2030 protected: 2205 2031 … … 2216 2042 /// \ingroup graph_adaptors 2217 2043 /// 2218 /// \brief Adaptor class for viewing a digraph as an undirected graph. 2219 /// 2220 /// Undirector adaptor can be used for viewing a digraph as an undirected 2221 /// graph. All arcs of the underlying digraph are showed in the 2222 /// adaptor as an edge (and also as a pair of arcs, of course). 2223 /// This adaptor conforms to the \ref concepts::Graph "Graph" concept. 2224 /// 2225 /// The adapted digraph can also be modified through this adaptor 2226 /// by adding or removing nodes or edges, unless the \c GR template 2227 /// parameter is set to be \c const. 2228 /// 2229 /// \tparam GR The type of the adapted digraph. 2230 /// It must conform to the \ref concepts::Digraph "Digraph" concept. 2231 /// It can also be specified to be \c const. 2232 /// 2233 /// \note The \c Node type of this adaptor and the adapted digraph are 2234 /// convertible to each other, moreover the \c Edge type of the adaptor 2235 /// and the \c Arc type of the adapted digraph are also convertible to 2236 /// each other. 2237 /// (Thus the \c Arc type of the adaptor is convertible to the \c Arc type 2238 /// of the adapted digraph.) 2239 template<typename GR> 2240 #ifdef DOXYGEN 2241 class Undirector { 2242 #else 2243 class Undirector : 2244 public GraphAdaptorExtender<UndirectorBase<GR> > { 2245 #endif 2246 public: 2247 /// The type of the adapted digraph. 2248 typedef GR Digraph; 2249 typedef GraphAdaptorExtender<UndirectorBase<GR> > Parent; 2044 /// \brief Undirect the graph 2045 /// 2046 /// This adaptor makes an undirected graph from a directed 2047 /// graph. All arcs of the underlying digraph will be showed in the 2048 /// adaptor as an edge. The Orienter adaptor is conform to the \ref 2049 /// concepts::Graph "Graph concept". 2050 /// 2051 /// \tparam _Digraph It must be conform to the \ref 2052 /// concepts::Digraph "Digraph concept". The type can be specified 2053 /// to const. 2054 template<typename _Digraph> 2055 class Undirector 2056 : public GraphAdaptorExtender<UndirectorBase<_Digraph> > { 2057 public: 2058 typedef _Digraph Digraph; 2059 typedef GraphAdaptorExtender<UndirectorBase<Digraph> > Parent; 2250 2060 protected: 2251 2061 Undirector() { } … … 2254 2064 /// \brief Constructor 2255 2065 /// 2256 /// Creates a n undirected graph from the given digraph.2257 Undirector( Digraph& digraph) {2066 /// Creates a undirected graph from the given digraph 2067 Undirector(_Digraph& digraph) { 2258 2068 setDigraph(digraph); 2259 2069 } 2260 2070 2261 /// \brief Arc map combined from two original arc maps 2262 /// 2263 /// This map adaptor class adapts two arc maps of the underlying 2264 /// digraph to get an arc map of the undirected graph. 2265 /// Its value type is inherited from the first arc map type 2266 /// (\c %ForwardMap). 2267 template <typename ForwardMap, typename BackwardMap> 2071 /// \brief ArcMap combined from two original ArcMap 2072 /// 2073 /// This class adapts two original digraph ArcMap to 2074 /// get an arc map on the undirected graph. 2075 template <typename _ForwardMap, typename _BackwardMap> 2268 2076 class CombinedArcMap { 2269 2077 public: 2270 2078 2271 /// The key type of the map 2079 typedef _ForwardMap ForwardMap; 2080 typedef _BackwardMap BackwardMap; 2081 2082 typedef typename MapTraits<ForwardMap>::ReferenceMapTag ReferenceMapTag; 2083 2084 typedef typename ForwardMap::Value Value; 2272 2085 typedef typename Parent::Arc Key; 2273 /// The value type of the map 2274 typedef typename ForwardMap::Value Value; 2275 2276 typedef typename MapTraits<ForwardMap>::ReferenceMapTag ReferenceMapTag; 2277 2278 typedef typename MapTraits<ForwardMap>::ReturnValue ReturnValue; 2279 typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReturnValue; 2280 typedef typename MapTraits<ForwardMap>::ReturnValue Reference; 2281 typedef typename MapTraits<ForwardMap>::ConstReturnValue ConstReference; 2282 2086 2087 /// \brief Constructor 2088 /// 2283 2089 /// Constructor 2284 2090 CombinedArcMap(ForwardMap& forward, BackwardMap& backward) 2285 2091 : _forward(&forward), _backward(&backward) {} 2286 2092 2287 /// Sets the value associated with the given key. 2093 2094 /// \brief Sets the value associated with a key. 2095 /// 2096 /// Sets the value associated with a key. 2288 2097 void set(const Key& e, const Value& a) { 2289 2098 if (Parent::direction(e)) { … … 2294 2103 } 2295 2104 2296 /// Returns the value associated with the given key. 2297 ConstReturnValue operator[](const Key& e) const { 2105 /// \brief Returns the value associated with a key. 2106 /// 2107 /// Returns the value associated with a key. 2108 typename MapTraits<ForwardMap>::ConstReturnValue 2109 operator[](const Key& e) const { 2298 2110 if (Parent::direction(e)) { 2299 2111 return (*_forward)[e]; … … 2303 2115 } 2304 2116 2305 /// Returns a reference to the value associated with the given key. 2306 ReturnValue operator[](const Key& e) { 2117 /// \brief Returns the value associated with a key. 2118 /// 2119 /// Returns the value associated with a key. 2120 typename MapTraits<ForwardMap>::ReturnValue 2121 operator[](const Key& e) { 2307 2122 if (Parent::direction(e)) { 2308 2123 return (*_forward)[e]; … … 2319 2134 }; 2320 2135 2321 /// \brief Returnsa combined arc map2322 /// 2323 /// This function just returns a combined arc map.2136 /// \brief Just gives back a combined arc map 2137 /// 2138 /// Just gives back a combined arc map 2324 2139 template <typename ForwardMap, typename BackwardMap> 2325 2140 static CombinedArcMap<ForwardMap, BackwardMap> … … 2351 2166 }; 2352 2167 2353 /// \brief Returns a read-only Undirector adaptor 2354 /// 2355 /// This function just returns a read-only \ref Undirector adaptor. 2356 /// \ingroup graph_adaptors 2357 /// \relates Undirector 2358 template<typename GR> 2359 Undirector<const GR> undirector(const GR& digraph) { 2360 return Undirector<const GR>(digraph); 2168 /// \brief Just gives back an undirected view of the given digraph 2169 /// 2170 /// Just gives back an undirected view of the given digraph 2171 template<typename Digraph> 2172 Undirector<const Digraph> 2173 undirector(const Digraph& digraph) { 2174 return Undirector<const Digraph>(digraph); 2361 2175 } 2362 2363 2176 2364 2177 template <typename _Graph, typename _DirectionMap> … … 2379 2192 void first(Arc& i) const { _graph->first(i); } 2380 2193 void firstIn(Arc& i, const Node& n) const { 2381 bool d = true;2194 bool d; 2382 2195 _graph->firstInc(i, d, n); 2383 2196 while (i != INVALID && d == (*_direction)[i]) _graph->nextInc(i, d); 2384 2197 } 2385 2198 void firstOut(Arc& i, const Node& n ) const { 2386 bool d = true;2199 bool d; 2387 2200 _graph->firstInc(i, d, n); 2388 2201 while (i != INVALID && d != (*_direction)[i]) _graph->nextInc(i, d); … … 2412 2225 int nodeNum() const { return _graph->nodeNum(); } 2413 2226 2414 typedef EdgeNumTagIndicator<Graph> ArcNumTag;2227 typedef EdgeNumTagIndicator<Graph> EdgeNumTag; 2415 2228 int arcNum() const { return _graph->edgeNum(); } 2416 2229 2417 typedef FindEdgeTagIndicator<Graph> Find ArcTag;2230 typedef FindEdgeTagIndicator<Graph> FindEdgeTag; 2418 2231 Arc findArc(const Node& u, const Node& v, 2419 const Arc& prev = INVALID) const { 2420 Arc arc = _graph->findEdge(u, v, prev); 2421 while (arc != INVALID && source(arc) != u) { 2232 const Arc& prev = INVALID) { 2233 Arc arc = prev; 2234 bool d = arc == INVALID ? true : (*_direction)[arc]; 2235 if (d) { 2422 2236 arc = _graph->findEdge(u, v, arc); 2237 while (arc != INVALID && !(*_direction)[arc]) { 2238 _graph->findEdge(u, v, arc); 2239 } 2240 if (arc != INVALID) return arc; 2241 } 2242 _graph->findEdge(v, u, arc); 2243 while (arc != INVALID && (*_direction)[arc]) { 2244 _graph->findEdge(u, v, arc); 2423 2245 } 2424 2246 return arc; … … 2430 2252 2431 2253 Arc addArc(const Node& u, const Node& v) { 2432 Arc arc = _graph->add Edge(u, v);2433 _direction->set(arc, _graph-> u(arc) == u);2254 Arc arc = _graph->addArc(u, v); 2255 _direction->set(arc, _graph->source(arc) == u); 2434 2256 return arc; 2435 2257 } … … 2522 2344 /// \ingroup graph_adaptors 2523 2345 /// 2524 /// \brief Adaptor class for orienting the edges of a graph to get a digraph 2525 /// 2526 /// Orienter adaptor can be used for orienting the edges of a graph to 2527 /// get a digraph. A \c bool edge map of the underlying graph must be 2528 /// specified, which define the direction of the arcs in the adaptor. 2529 /// The arcs can be easily reversed by the \c reverseArc() member function 2530 /// of the adaptor. 2531 /// This class conforms to the \ref concepts::Digraph "Digraph" concept. 2532 /// 2533 /// The adapted graph can also be modified through this adaptor 2534 /// by adding or removing nodes or arcs, unless the \c GR template 2535 /// parameter is set to be \c const. 2536 /// 2537 /// \tparam GR The type of the adapted graph. 2538 /// It must conform to the \ref concepts::Graph "Graph" concept. 2539 /// It can also be specified to be \c const. 2540 /// \tparam DM The type of the direction map. 2541 /// It must be a \c bool (or convertible) edge map of the 2542 /// adapted graph. The default type is 2543 /// \ref concepts::Graph::EdgeMap "GR::EdgeMap<bool>". 2544 /// 2545 /// \note The \c Node type of this adaptor and the adapted graph are 2546 /// convertible to each other, moreover the \c Arc type of the adaptor 2547 /// and the \c Edge type of the adapted graph are also convertible to 2548 /// each other. 2549 #ifdef DOXYGEN 2550 template<typename GR, 2551 typename DM> 2552 class Orienter { 2553 #else 2554 template<typename GR, 2555 typename DM = typename GR::template EdgeMap<bool> > 2346 /// \brief Orients the edges of the graph to get a digraph 2347 /// 2348 /// This adaptor orients each edge in the undirected graph. The 2349 /// direction of the arcs stored in an edge node map. The arcs can 2350 /// be easily reverted by the \c reverseArc() member function in the 2351 /// adaptor. The Orienter adaptor is conform to the \ref 2352 /// concepts::Digraph "Digraph concept". 2353 /// 2354 /// \tparam _Graph It must be conform to the \ref concepts::Graph 2355 /// "Graph concept". The type can be specified to be const. 2356 /// \tparam _DirectionMap A bool valued edge map of the the adapted 2357 /// graph. 2358 /// 2359 /// \sa orienter 2360 template<typename _Graph, 2361 typename DirectionMap = typename _Graph::template EdgeMap<bool> > 2556 2362 class Orienter : 2557 public DigraphAdaptorExtender<OrienterBase<GR, DM> > { 2558 #endif 2559 public: 2560 2561 /// The type of the adapted graph. 2562 typedef GR Graph; 2563 /// The type of the direction edge map. 2564 typedef DM DirectionMap; 2565 2566 typedef DigraphAdaptorExtender<OrienterBase<GR, DM> > Parent; 2363 public DigraphAdaptorExtender<OrienterBase<_Graph, DirectionMap> > { 2364 public: 2365 typedef _Graph Graph; 2366 typedef DigraphAdaptorExtender< 2367 OrienterBase<_Graph, DirectionMap> > Parent; 2567 2368 typedef typename Parent::Arc Arc; 2568 2369 protected: … … 2570 2371 public: 2571 2372 2572 /// \brief Constructor 2573 /// 2574 /// Constructor of the adaptor .2373 /// \brief Constructor of the adaptor 2374 /// 2375 /// Constructor of the adaptor 2575 2376 Orienter(Graph& graph, DirectionMap& direction) { 2576 2377 setGraph(graph); … … 2578 2379 } 2579 2380 2580 /// \brief Reverses the given arc 2581 /// 2582 /// This function reverses the given arc. 2583 /// It is done by simply negate the assigned value of \c a 2584 /// in the direction map. 2381 /// \brief Reverse arc 2382 /// 2383 /// It reverse the given arc. It simply negate the direction in the map. 2585 2384 void reverseArc(const Arc& a) { 2586 2385 Parent::reverseArc(a); … … 2588 2387 }; 2589 2388 2590 /// \brief Returns a read-only Orienter adaptor 2591 /// 2592 /// This function just returns a read-only \ref Orienter adaptor. 2593 /// \ingroup graph_adaptors 2594 /// \relates Orienter 2595 template<typename GR, typename DM> 2596 Orienter<const GR, DM> 2597 orienter(const GR& graph, DM& direction_map) { 2598 return Orienter<const GR, DM>(graph, direction_map); 2389 /// \brief Just gives back a Orienter 2390 /// 2391 /// Just gives back a Orienter 2392 template<typename Graph, typename DirectionMap> 2393 Orienter<const Graph, DirectionMap> 2394 orienter(const Graph& graph, DirectionMap& dm) { 2395 return Orienter<const Graph, DirectionMap>(graph, dm); 2599 2396 } 2600 2397 2601 template<typename G R, typename DM>2602 Orienter<const G R, const DM>2603 orienter(const G R& graph, const DM& direction_map) {2604 return Orienter<const G R, const DM>(graph, direction_map);2398 template<typename Graph, typename DirectionMap> 2399 Orienter<const Graph, const DirectionMap> 2400 orienter(const Graph& graph, const DirectionMap& dm) { 2401 return Orienter<const Graph, const DirectionMap>(graph, dm); 2605 2402 } 2606 2403 2607 2404 namespace _adaptor_bits { 2608 2405 2609 template<typename Digraph,2610 typename CapacityMap,2611 typename FlowMap,2612 typename Tolerance>2406 template<typename _Digraph, 2407 typename _CapacityMap = typename _Digraph::template ArcMap<int>, 2408 typename _FlowMap = _CapacityMap, 2409 typename _Tolerance = Tolerance<typename _CapacityMap::Value> > 2613 2410 class ResForwardFilter { 2614 2411 public: 2412 2413 typedef _Digraph Digraph; 2414 typedef _CapacityMap CapacityMap; 2415 typedef _FlowMap FlowMap; 2416 typedef _Tolerance Tolerance; 2615 2417 2616 2418 typedef typename Digraph::Arc Key; … … 2633 2435 }; 2634 2436 2635 template<typename Digraph,2636 typename CapacityMap,2637 typename FlowMap,2638 typename Tolerance>2437 template<typename _Digraph, 2438 typename _CapacityMap = typename _Digraph::template ArcMap<int>, 2439 typename _FlowMap = _CapacityMap, 2440 typename _Tolerance = Tolerance<typename _CapacityMap::Value> > 2639 2441 class ResBackwardFilter { 2640 2442 public: 2443 2444 typedef _Digraph Digraph; 2445 typedef _CapacityMap CapacityMap; 2446 typedef _FlowMap FlowMap; 2447 typedef _Tolerance Tolerance; 2641 2448 2642 2449 typedef typename Digraph::Arc Key; … … 2664 2471 /// \ingroup graph_adaptors 2665 2472 /// 2666 /// \brief A daptor class for composing the residual digraph for directed2473 /// \brief An adaptor for composing the residual graph for directed 2667 2474 /// flow and circulation problems. 2668 2475 /// 2669 /// ResidualDigraph can be used for composing the \e residual digraph 2670 /// for directed flow and circulation problems. Let \f$ G=(V, A) \f$ 2671 /// be a directed graph and let \f$ F \f$ be a number type. 2672 /// Let \f$ flow, cap: A\to F \f$ be functions on the arcs. 2673 /// This adaptor implements a digraph structure with node set \f$ V \f$ 2674 /// and arc set \f$ A_{forward}\cup A_{backward} \f$, 2675 /// where \f$ A_{forward}=\{uv : uv\in A, flow(uv)<cap(uv)\} \f$ and 2676 /// \f$ A_{backward}=\{vu : uv\in A, flow(uv)>0\} \f$, i.e. the so 2677 /// called residual digraph. 2678 /// When the union \f$ A_{forward}\cup A_{backward} \f$ is taken, 2679 /// multiplicities are counted, i.e. the adaptor has exactly 2680 /// \f$ |A_{forward}| + |A_{backward}|\f$ arcs (it may have parallel 2681 /// arcs). 2682 /// This class conforms to the \ref concepts::Digraph "Digraph" concept. 2683 /// 2684 /// \tparam GR The type of the adapted digraph. 2685 /// It must conform to the \ref concepts::Digraph "Digraph" concept. 2686 /// It is implicitly \c const. 2687 /// \tparam CM The type of the capacity map. 2688 /// It must be an arc map of some numerical type, which defines 2689 /// the capacities in the flow problem. It is implicitly \c const. 2690 /// The default type is 2691 /// \ref concepts::Digraph::ArcMap "GR::ArcMap<int>". 2692 /// \tparam FM The type of the flow map. 2693 /// It must be an arc map of some numerical type, which defines 2694 /// the flow values in the flow problem. The default type is \c CM. 2695 /// \tparam TL The tolerance type for handling inexact computation. 2696 /// The default tolerance type depends on the value type of the 2697 /// capacity map. 2698 /// 2699 /// \note This adaptor is implemented using Undirector and FilterArcs 2700 /// adaptors. 2701 /// 2702 /// \note The \c Node type of this adaptor and the adapted digraph are 2703 /// convertible to each other, moreover the \c Arc type of the adaptor 2704 /// is convertible to the \c Arc type of the adapted digraph. 2705 #ifdef DOXYGEN 2706 template<typename GR, typename CM, typename FM, typename TL> 2707 class ResidualDigraph 2708 #else 2709 template<typename GR, 2710 typename CM = typename GR::template ArcMap<int>, 2711 typename FM = CM, 2712 typename TL = Tolerance<typename CM::Value> > 2713 class ResidualDigraph : 2476 /// An adaptor for composing the residual graph for directed flow and 2477 /// circulation problems. Let \f$ G=(V, A) \f$ be a directed graph 2478 /// and let \f$ F \f$ be a number type. Let moreover \f$ f,c:A\to F \f$, 2479 /// be functions on the arc-set. 2480 /// 2481 /// Then Residual implements the digraph structure with 2482 /// node-set \f$ V \f$ and arc-set \f$ A_{forward}\cup A_{backward} \f$, 2483 /// where \f$ A_{forward}=\{uv : uv\in A, f(uv)<c(uv)\} \f$ and 2484 /// \f$ A_{backward}=\{vu : uv\in A, f(uv)>0\} \f$, i.e. the so 2485 /// called residual graph. When we take the union 2486 /// \f$ A_{forward}\cup A_{backward} \f$, multiplicities are counted, 2487 /// i.e. if an arc is in both \f$ A_{forward} \f$ and 2488 /// \f$ A_{backward} \f$, then in the adaptor it appears in both 2489 /// orientation. 2490 /// 2491 /// \tparam _Digraph It must be conform to the \ref concepts::Digraph 2492 /// "Digraph concept". The type is implicitly const. 2493 /// \tparam _CapacityMap An arc map of some numeric type, it defines 2494 /// the capacities in the flow problem. The map is implicitly const. 2495 /// \tparam _FlowMap An arc map of some numeric type, it defines 2496 /// the capacities in the flow problem. 2497 /// \tparam _Tolerance Handler for inexact computation. 2498 template<typename _Digraph, 2499 typename _CapacityMap = typename _Digraph::template ArcMap<int>, 2500 typename _FlowMap = _CapacityMap, 2501 typename _Tolerance = Tolerance<typename _CapacityMap::Value> > 2502 class Residual : 2714 2503 public FilterArcs< 2715 Undirector<const GR>, 2716 typename Undirector<const GR>::template CombinedArcMap< 2717 _adaptor_bits::ResForwardFilter<const GR, CM, FM, TL>, 2718 _adaptor_bits::ResBackwardFilter<const GR, CM, FM, TL> > > 2719 #endif 2504 Undirector<const _Digraph>, 2505 typename Undirector<const _Digraph>::template CombinedArcMap< 2506 _adaptor_bits::ResForwardFilter<const _Digraph, _CapacityMap, 2507 _FlowMap, _Tolerance>, 2508 _adaptor_bits::ResBackwardFilter<const _Digraph, _CapacityMap, 2509 _FlowMap, _Tolerance> > > 2720 2510 { 2721 2511 public: 2722 2512 2723 /// The type of the underlying digraph. 2724 typedef GR Digraph; 2725 /// The type of the capacity map. 2726 typedef CM CapacityMap; 2727 /// The type of the flow map. 2728 typedef FM FlowMap; 2729 /// The tolerance type. 2730 typedef TL Tolerance; 2513 typedef _Digraph Digraph; 2514 typedef _CapacityMap CapacityMap; 2515 typedef _FlowMap FlowMap; 2516 typedef _Tolerance Tolerance; 2731 2517 2732 2518 typedef typename CapacityMap::Value Value; 2733 typedef Residual DigraphAdaptor;2519 typedef Residual Adaptor; 2734 2520 2735 2521 protected: … … 2744 2530 2745 2531 typedef typename Undirected:: 2746 2532 template CombinedArcMap<ForwardFilter, BackwardFilter> ArcFilter; 2747 2533 2748 2534 typedef FilterArcs<Undirected, ArcFilter> Parent; … … 2758 2544 public: 2759 2545 2760 /// \brief Constructor 2761 /// 2762 /// Constructor of the residual digraph adaptor. The parameters are the2763 /// digraph, the capacity map, the flow map,and a tolerance object.2764 Residual Digraph(const Digraph& digraph, const CapacityMap& capacity,2765 2546 /// \brief Constructor of the residual digraph. 2547 /// 2548 /// Constructor of the residual graph. The parameters are the digraph, 2549 /// the flow map, the capacity map and a tolerance object. 2550 Residual(const Digraph& digraph, const CapacityMap& capacity, 2551 FlowMap& flow, const Tolerance& tolerance = Tolerance()) 2766 2552 : Parent(), _capacity(&capacity), _flow(&flow), _graph(digraph), 2767 2553 _forward_filter(capacity, flow, tolerance), … … 2775 2561 typedef typename Parent::Arc Arc; 2776 2562 2777 /// \brief Returns the residual capacity of the givenarc.2778 /// 2779 /// Returns the residual capacity of the givenarc.2563 /// \brief Gives back the residual capacity of the arc. 2564 /// 2565 /// Gives back the residual capacity of the arc. 2780 2566 Value residualCapacity(const Arc& a) const { 2781 2567 if (Undirected::direction(a)) { … … 2786 2572 } 2787 2573 2788 /// \brief Augment s on the given arc in the residual digraph.2789 /// 2790 /// Augment s on the given arc in the residual digraph. It increases2791 /// or decrease s the flow value on the original arc according to the2792 /// directionof the residual arc.2574 /// \brief Augment on the given arc in the residual graph. 2575 /// 2576 /// Augment on the given arc in the residual graph. It increase 2577 /// or decrease the flow on the original arc depend on the direction 2578 /// of the residual arc. 2793 2579 void augment(const Arc& a, const Value& v) const { 2794 2580 if (Undirected::direction(a)) { … … 2799 2585 } 2800 2586 2801 /// \brief Returns \c true if the given residual arc is a forward arc. 2802 /// 2803 /// Returns \c true if the given residual arc has the same orientation 2804 /// as the original arc, i.e. it is a so called forward arc. 2587 /// \brief Returns the direction of the arc. 2588 /// 2589 /// Returns true when the arc is same oriented as the original arc. 2805 2590 static bool forward(const Arc& a) { 2806 2591 return Undirected::direction(a); 2807 2592 } 2808 2593 2809 /// \brief Returns \c true if the given residual arc is a backward arc. 2810 /// 2811 /// Returns \c true if the given residual arc has the opposite orientation 2812 /// than the original arc, i.e. it is a so called backward arc. 2594 /// \brief Returns the direction of the arc. 2595 /// 2596 /// Returns true when the arc is opposite oriented as the original arc. 2813 2597 static bool backward(const Arc& a) { 2814 2598 return !Undirected::direction(a); 2815 2599 } 2816 2600 2817 /// \brief Returns the forward oriented residual arc. 2818 /// 2819 /// Returns the forward oriented residual arc related to the given 2820 /// arc of the underlying digraph. 2601 /// \brief Gives back the forward oriented residual arc. 2602 /// 2603 /// Gives back the forward oriented residual arc. 2821 2604 static Arc forward(const typename Digraph::Arc& a) { 2822 2605 return Undirected::direct(a, true); 2823 2606 } 2824 2607 2825 /// \brief Returns the backward oriented residual arc. 2826 /// 2827 /// Returns the backward oriented residual arc related to the given 2828 /// arc of the underlying digraph. 2608 /// \brief Gives back the backward oriented residual arc. 2609 /// 2610 /// Gives back the backward oriented residual arc. 2829 2611 static Arc backward(const typename Digraph::Arc& a) { 2830 2612 return Undirected::direct(a, false); … … 2833 2615 /// \brief Residual capacity map. 2834 2616 /// 2835 /// This map adaptor class can be used for obtaining the residual 2836 /// capacities as an arc map of the residual digraph. 2837 /// Its value type is inherited from the capacity map. 2617 /// In generic residual graph the residual capacity can be obtained 2618 /// as a map. 2838 2619 class ResidualCapacity { 2839 2620 protected: 2840 2621 const Adaptor* _adaptor; 2841 2622 public: 2842 /// The key type of the map2623 /// The Key type 2843 2624 typedef Arc Key; 2844 /// The value type of the map2845 typedef typename CapacityMap::Value Value;2625 /// The Value type 2626 typedef typename _CapacityMap::Value Value; 2846 2627 2847 2628 /// Constructor 2848 2629 ResidualCapacity(const Adaptor& adaptor) : _adaptor(&adaptor) {} 2849 2630 2850 /// Returns the value associated with the given residual arc2631 /// \e 2851 2632 Value operator[](const Arc& a) const { 2852 2633 return _adaptor->residualCapacity(a); … … 2855 2636 }; 2856 2637 2857 /// \brief Returns a residual capacity map2858 ///2859 /// This function just returns a residual capacity map.2860 ResidualCapacity residualCapacity() const {2861 return ResidualCapacity(*this);2862 }2863 2864 2638 }; 2865 2866 /// \brief Returns a (read-only) Residual adaptor2867 ///2868 /// This function just returns a (read-only) \ref Residual adaptor.2869 /// \ingroup graph_adaptors2870 /// \relates Residual2871 template<typename GR, typename CM, typename FM>2872 ResidualDigraph<GR, CM, FM>2873 residualDigraph(const GR& digraph, const CM& capacity_map, FM& flow_map) {2874 return ResidualDigraph<GR, CM, FM> (digraph, capacity_map, flow_map);2875 }2876 2877 2639 2878 2640 template <typename _Digraph> … … 3123 2885 3124 2886 typedef True NodeNumTag; 2887 3125 2888 int nodeNum() const { 3126 2889 return 2 * countNodes(*_digraph); 3127 2890 } 3128 2891 3129 typedef True ArcNumTag;2892 typedef True EdgeNumTag; 3130 2893 int arcNum() const { 3131 2894 return countArcs(*_digraph) + countNodes(*_digraph); 3132 2895 } 3133 2896 3134 typedef True Find ArcTag;2897 typedef True FindEdgeTag; 3135 2898 Arc findArc(const Node& u, const Node& v, 3136 2899 const Arc& prev = INVALID) const { 3137 if (inNode(u) && outNode(v)) { 3138 if (static_cast<const DigraphNode&>(u) == 3139 static_cast<const DigraphNode&>(v) && prev == INVALID) { 3140 return Arc(u); 2900 if (inNode(u)) { 2901 if (outNode(v)) { 2902 if (static_cast<const DigraphNode&>(u) == 2903 static_cast<const DigraphNode&>(v) && prev == INVALID) { 2904 return Arc(u); 2905 } 3141 2906 } 3142 } 3143 else if (outNode(u) && inNode(v)) { 3144 return Arc(::lemon::findArc(*_digraph, u, v, prev)); 2907 } else { 2908 if (inNode(v)) { 2909 return Arc(::lemon::findArc(*_digraph, u, v, prev)); 2910 } 3145 2911 } 3146 2912 return INVALID; … … 3156 2922 typedef Node Key; 3157 2923 typedef _Value Value; 3158 typedef typename MapTraits<NodeImpl>::ReferenceMapTag ReferenceMapTag;3159 typedef typename MapTraits<NodeImpl>::ReturnValue ReturnValue;3160 typedef typename MapTraits<NodeImpl>::ConstReturnValue ConstReturnValue;3161 typedef typename MapTraits<NodeImpl>::ReturnValue Reference;3162 typedef typename MapTraits<NodeImpl>::ConstReturnValue ConstReference;3163 2924 3164 2925 NodeMapBase(const Adaptor& adaptor) … … 3173 2934 } 3174 2935 3175 ReturnValue operator[](const Node& key) { 2936 typename MapTraits<NodeImpl>::ReturnValue 2937 operator[](const Node& key) { 3176 2938 if (Adaptor::inNode(key)) { return _in_map[key]; } 3177 2939 else { return _out_map[key]; } 3178 2940 } 3179 2941 3180 ConstReturnValue operator[](const Node& key) const { 2942 typename MapTraits<NodeImpl>::ConstReturnValue 2943 operator[](const Node& key) const { 3181 2944 if (Adaptor::inNode(key)) { return _in_map[key]; } 3182 2945 else { return _out_map[key]; } … … 3195 2958 typedef Arc Key; 3196 2959 typedef _Value Value; 3197 typedef typename MapTraits<ArcImpl>::ReferenceMapTag ReferenceMapTag;3198 typedef typename MapTraits<ArcImpl>::ReturnValue ReturnValue;3199 typedef typename MapTraits<ArcImpl>::ConstReturnValue ConstReturnValue;3200 typedef typename MapTraits<ArcImpl>::ReturnValue Reference;3201 typedef typename MapTraits<ArcImpl>::ConstReturnValue ConstReference;3202 2960 3203 2961 ArcMapBase(const Adaptor& adaptor) … … 3215 2973 } 3216 2974 3217 ReturnValue operator[](const Arc& key) { 2975 typename MapTraits<ArcImpl>::ReturnValue 2976 operator[](const Arc& key) { 3218 2977 if (Adaptor::origArc(key)) { 3219 2978 return _arc_map[key._item.first()]; … … 3223 2982 } 3224 2983 3225 ConstReturnValue operator[](const Arc& key) const { 2984 typename MapTraits<ArcImpl>::ConstReturnValue 2985 operator[](const Arc& key) const { 3226 2986 if (Adaptor::origArc(key)) { 3227 2987 return _arc_map[key._item.first()]; … … 3304 3064 /// \ingroup graph_adaptors 3305 3065 /// 3306 /// \brief Adaptor class for splitting the nodes of a digraph. 3307 /// 3308 /// SplitNodes adaptor can be used for splitting each node into an 3309 /// \e in-node and an \e out-node in a digraph. Formaly, the adaptor 3310 /// replaces each node \f$ u \f$ in the digraph with two nodes, 3311 /// namely node \f$ u_{in} \f$ and node \f$ u_{out} \f$. 3312 /// If there is a \f$ (v, u) \f$ arc in the original digraph, then the 3313 /// new target of the arc will be \f$ u_{in} \f$ and similarly the 3314 /// source of each original \f$ (u, v) \f$ arc will be \f$ u_{out} \f$. 3315 /// The adaptor adds an additional \e bind \e arc from \f$ u_{in} \f$ 3316 /// to \f$ u_{out} \f$ for each node \f$ u \f$ of the original digraph. 3317 /// 3318 /// The aim of this class is running an algorithm with respect to node 3319 /// costs or capacities if the algorithm considers only arc costs or 3320 /// capacities directly. 3321 /// In this case you can use \c SplitNodes adaptor, and set the node 3322 /// costs/capacities of the original digraph to the \e bind \e arcs 3323 /// in the adaptor. 3324 /// 3325 /// \tparam GR The type of the adapted digraph. 3326 /// It must conform to the \ref concepts::Digraph "Digraph" concept. 3327 /// It is implicitly \c const. 3328 /// 3329 /// \note The \c Node type of this adaptor is converible to the \c Node 3330 /// type of the adapted digraph. 3331 template <typename GR> 3332 #ifdef DOXYGEN 3333 class SplitNodes { 3334 #else 3066 /// \brief Split the nodes of a directed graph 3067 /// 3068 /// The SplitNodes adaptor splits each node into an in-node and an 3069 /// out-node. Formaly, the adaptor replaces each \f$ u \f$ node in 3070 /// the digraph with two nodes(namely node \f$ u_{in} \f$ and node 3071 /// \f$ u_{out} \f$). If there is a \f$ (v, u) \f$ arc in the 3072 /// original digraph the new target of the arc will be \f$ u_{in} \f$ 3073 /// and similarly the source of the original \f$ (u, v) \f$ arc 3074 /// will be \f$ u_{out} \f$. The adaptor will add for each node in 3075 /// the original digraph an additional arc which connects 3076 /// \f$ (u_{in}, u_{out}) \f$. 3077 /// 3078 /// The aim of this class is to run algorithm with node costs if the 3079 /// algorithm can use directly just arc costs. In this case we should use 3080 /// a \c SplitNodes and set the node cost of the graph to the 3081 /// bind arc in the adapted graph. 3082 /// 3083 /// \tparam _Digraph It must be conform to the \ref concepts::Digraph 3084 /// "Digraph concept". The type can be specified to be const. 3085 template <typename _Digraph> 3335 3086 class SplitNodes 3336 : public DigraphAdaptorExtender<SplitNodesBase<const GR> > { 3337 #endif 3338 public: 3339 typedef GR Digraph; 3340 typedef DigraphAdaptorExtender<SplitNodesBase<const GR> > Parent; 3087 : public DigraphAdaptorExtender<SplitNodesBase<_Digraph> > { 3088 public: 3089 typedef _Digraph Digraph; 3090 typedef DigraphAdaptorExtender<SplitNodesBase<Digraph> > Parent; 3341 3091 3342 3092 typedef typename Digraph::Node DigraphNode; … … 3346 3096 typedef typename Parent::Arc Arc; 3347 3097 3348 /// \brief Constructor 3098 /// \brief Constructor of the adaptor. 3349 3099 /// 3350 3100 /// Constructor of the adaptor. 3351 SplitNodes( constDigraph& g) {3101 SplitNodes(Digraph& g) { 3352 3102 Parent::setDigraph(g); 3353 3103 } 3354 3104 3355 /// \brief Returns \c true if the given node is anin-node.3356 /// 3357 /// Returns \c true if the given node is anin-node.3105 /// \brief Returns true when the node is in-node. 3106 /// 3107 /// Returns true when the node is in-node. 3358 3108 static bool inNode(const Node& n) { 3359 3109 return Parent::inNode(n); 3360 3110 } 3361 3111 3362 /// \brief Returns \c true if the given node is anout-node.3363 /// 3364 /// Returns \c true if the given node is anout-node.3112 /// \brief Returns true when the node is out-node. 3113 /// 3114 /// Returns true when the node is out-node. 3365 3115 static bool outNode(const Node& n) { 3366 3116 return Parent::outNode(n); 3367 3117 } 3368 3118 3369 /// \brief Returns \c true if the given arc is an original arc. 3370 /// 3371 /// Returns \c true if the given arc is one of the arcs in the 3372 /// original digraph. 3119 /// \brief Returns true when the arc is arc in the original digraph. 3120 /// 3121 /// Returns true when the arc is arc in the original digraph. 3373 3122 static bool origArc(const Arc& a) { 3374 3123 return Parent::origArc(a); 3375 3124 } 3376 3125 3377 /// \brief Returns \c true if the given arc is a bind arc. 3378 /// 3379 /// Returns \c true if the given arc is a bind arc, i.e. it connects 3380 /// an in-node and an out-node. 3126 /// \brief Returns true when the arc binds an in-node and an out-node. 3127 /// 3128 /// Returns true when the arc binds an in-node and an out-node. 3381 3129 static bool bindArc(const Arc& a) { 3382 3130 return Parent::bindArc(a); 3383 3131 } 3384 3132 3385 /// \brief Returns the in-node created from the given originalnode.3386 /// 3387 /// Returns the in-node created from the given originalnode.3133 /// \brief Gives back the in-node created from the \c node. 3134 /// 3135 /// Gives back the in-node created from the \c node. 3388 3136 static Node inNode(const DigraphNode& n) { 3389 3137 return Parent::inNode(n); 3390 3138 } 3391 3139 3392 /// \brief Returns the out-node created from the given originalnode.3393 /// 3394 /// Returns the out-node created from the given originalnode.3140 /// \brief Gives back the out-node created from the \c node. 3141 /// 3142 /// Gives back the out-node created from the \c node. 3395 3143 static Node outNode(const DigraphNode& n) { 3396 3144 return Parent::outNode(n); 3397 3145 } 3398 3146 3399 /// \brief Returns the bind arc that corresponds to the given 3400 /// original node. 3401 /// 3402 /// Returns the bind arc in the adaptor that corresponds to the given 3403 /// original node, i.e. the arc connecting the in-node and out-node 3404 /// of \c n. 3147 /// \brief Gives back the arc binds the two part of the node. 3148 /// 3149 /// Gives back the arc binds the two part of the node. 3405 3150 static Arc arc(const DigraphNode& n) { 3406 3151 return Parent::arc(n); 3407 3152 } 3408 3153 3409 /// \brief Returns the arc that corresponds to the given original arc. 3410 /// 3411 /// Returns the arc in the adaptor that corresponds to the given 3412 /// original arc. 3154 /// \brief Gives back the arc of the original arc. 3155 /// 3156 /// Gives back the arc of the original arc. 3413 3157 static Arc arc(const DigraphArc& a) { 3414 3158 return Parent::arc(a); 3415 3159 } 3416 3160 3417 /// \brief Node map combined from two original node maps 3418 /// 3419 /// This map adaptor class adapts two node maps of the original digraph 3420 /// to get a node map of the split digraph. 3421 /// Its value type is inherited from the first node map type 3422 /// (\c InNodeMap). 3161 /// \brief NodeMap combined from two original NodeMap 3162 /// 3163 /// This class adapt two of the original digraph NodeMap to 3164 /// get a node map on the adapted digraph. 3423 3165 template <typename InNodeMap, typename OutNodeMap> 3424 3166 class CombinedNodeMap { 3425 3167 public: 3426 3168 3427 /// The key type of the map3428 3169 typedef Node Key; 3429 /// The value type of the map3430 3170 typedef typename InNodeMap::Value Value; 3431 3171 3432 typedef typename MapTraits<InNodeMap>::ReferenceMapTag ReferenceMapTag; 3433 typedef typename MapTraits<InNodeMap>::ReturnValue ReturnValue; 3434 typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReturnValue; 3435 typedef typename MapTraits<InNodeMap>::ReturnValue Reference; 3436 typedef typename MapTraits<InNodeMap>::ConstReturnValue ConstReference; 3437 3438 /// Constructor 3172 /// \brief Constructor 3173 /// 3174 /// Constructor. 3439 3175 CombinedNodeMap(InNodeMap& in_map, OutNodeMap& out_map) 3440 3176 : _in_map(in_map), _out_map(out_map) {} 3441 3177 3442 /// Returns the value associated with the given key. 3178 /// \brief The subscript operator. 3179 /// 3180 /// The subscript operator. 3181 Value& operator[](const Key& key) { 3182 if (Parent::inNode(key)) { 3183 return _in_map[key]; 3184 } else { 3185 return _out_map[key]; 3186 } 3187 } 3188 3189 /// \brief The const subscript operator. 3190 /// 3191 /// The const subscript operator. 3443 3192 Value operator[](const Key& key) const { 3444 3193 if (Parent::inNode(key)) { … … 3449 3198 } 3450 3199 3451 /// Returns a reference to the value associated with the given key. 3452 Value& operator[](const Key& key) { 3453 if (Parent::inNode(key)) { 3454 return _in_map[key]; 3455 } else { 3456 return _out_map[key]; 3457 } 3458 } 3459 3460 /// Sets the value associated with the given key. 3200 /// \brief The setter function of the map. 3201 /// 3202 /// The setter function of the map. 3461 3203 void set(const Key& key, const Value& value) { 3462 3204 if (Parent::inNode(key)) { … … 3475 3217 3476 3218 3477 /// \brief Returnsa combined node map3478 /// 3479 /// This function just returns a combined node map.3219 /// \brief Just gives back a combined node map 3220 /// 3221 /// Just gives back a combined node map 3480 3222 template <typename InNodeMap, typename OutNodeMap> 3481 3223 static CombinedNodeMap<InNodeMap, OutNodeMap> … … 3503 3245 } 3504 3246 3505 /// \brief Arc map combined from an arc map and a node map of the 3506 /// original digraph. 3507 /// 3508 /// This map adaptor class adapts an arc map and a node map of the 3509 /// original digraph to get an arc map of the split digraph. 3510 /// Its value type is inherited from the original arc map type 3511 /// (\c ArcMap). 3512 template <typename ArcMap, typename NodeMap> 3247 /// \brief ArcMap combined from an original ArcMap and a NodeMap 3248 /// 3249 /// This class adapt an original ArcMap and a NodeMap to get an 3250 /// arc map on the adapted digraph 3251 template <typename DigraphArcMap, typename DigraphNodeMap> 3513 3252 class CombinedArcMap { 3514 3253 public: 3515 3254 3516 /// The key type of the map3517 3255 typedef Arc Key; 3518 /// The value type of the map 3519 typedef typename ArcMap::Value Value; 3520 3521 typedef typename MapTraits<ArcMap>::ReferenceMapTag ReferenceMapTag; 3522 typedef typename MapTraits<ArcMap>::ReturnValue ReturnValue; 3523 typedef typename MapTraits<ArcMap>::ConstReturnValue ConstReturnValue; 3524 typedef typename MapTraits<ArcMap>::ReturnValue Reference; 3525 typedef typename MapTraits<ArcMap>::ConstReturnValue ConstReference; 3526 3527 /// Constructor 3528 CombinedArcMap(ArcMap& arc_map, NodeMap& node_map) 3256 typedef typename DigraphArcMap::Value Value; 3257 3258 /// \brief Constructor 3259 /// 3260 /// Constructor. 3261 CombinedArcMap(DigraphArcMap& arc_map, DigraphNodeMap& node_map) 3529 3262 : _arc_map(arc_map), _node_map(node_map) {} 3530 3263 3531 /// Returns the value associated with the given key. 3264 /// \brief The subscript operator. 3265 /// 3266 /// The subscript operator. 3267 void set(const Arc& arc, const Value& val) { 3268 if (Parent::origArc(arc)) { 3269 _arc_map.set(arc, val); 3270 } else { 3271 _node_map.set(arc, val); 3272 } 3273 } 3274 3275 /// \brief The const subscript operator. 3276 /// 3277 /// The const subscript operator. 3532 3278 Value operator[](const Key& arc) const { 3533 3279 if (Parent::origArc(arc)) { … … 3538 3284 } 3539 3285 3540 /// Returns a reference to the value associated with the given key. 3286 /// \brief The const subscript operator. 3287 /// 3288 /// The const subscript operator. 3541 3289 Value& operator[](const Key& arc) { 3542 3290 if (Parent::origArc(arc)) { … … 3547 3295 } 3548 3296 3549 /// Sets the value associated with the given key.3550 void set(const Arc& arc, const Value& val) {3551 if (Parent::origArc(arc)) {3552 _arc_map.set(arc, val);3553 } else {3554 _node_map.set(arc, val);3555 }3556 }3557 3558 3297 private: 3559 ArcMap& _arc_map;3560 NodeMap& _node_map;3298 DigraphArcMap& _arc_map; 3299 DigraphNodeMap& _node_map; 3561 3300 }; 3562 3301 3563 /// \brief Returns a combined arc map 3564 /// 3565 /// This function just returns a combined arc map. 3566 template <typename ArcMap, typename NodeMap> 3567 static CombinedArcMap<ArcMap, NodeMap> 3568 combinedArcMap(ArcMap& arc_map, NodeMap& node_map) { 3569 return CombinedArcMap<ArcMap, NodeMap>(arc_map, node_map); 3570 } 3571 3572 template <typename ArcMap, typename NodeMap> 3573 static CombinedArcMap<const ArcMap, NodeMap> 3574 combinedArcMap(const ArcMap& arc_map, NodeMap& node_map) { 3575 return CombinedArcMap<const ArcMap, NodeMap>(arc_map, node_map); 3576 } 3577 3578 template <typename ArcMap, typename NodeMap> 3579 static CombinedArcMap<ArcMap, const NodeMap> 3580 combinedArcMap(ArcMap& arc_map, const NodeMap& node_map) { 3581 return CombinedArcMap<ArcMap, const NodeMap>(arc_map, node_map); 3582 } 3583 3584 template <typename ArcMap, typename NodeMap> 3585 static CombinedArcMap<const ArcMap, const NodeMap> 3586 combinedArcMap(const ArcMap& arc_map, const NodeMap& node_map) { 3587 return CombinedArcMap<const ArcMap, const NodeMap>(arc_map, node_map); 3302 /// \brief Just gives back a combined arc map 3303 /// 3304 /// Just gives back a combined arc map 3305 template <typename DigraphArcMap, typename DigraphNodeMap> 3306 static CombinedArcMap<DigraphArcMap, DigraphNodeMap> 3307 combinedArcMap(DigraphArcMap& arc_map, DigraphNodeMap& node_map) { 3308 return CombinedArcMap<DigraphArcMap, DigraphNodeMap>(arc_map, node_map); 3309 } 3310 3311 template <typename DigraphArcMap, typename DigraphNodeMap> 3312 static CombinedArcMap<const DigraphArcMap, DigraphNodeMap> 3313 combinedArcMap(const DigraphArcMap& arc_map, DigraphNodeMap& node_map) { 3314 return CombinedArcMap<const DigraphArcMap, 3315 DigraphNodeMap>(arc_map, node_map); 3316 } 3317 3318 template <typename DigraphArcMap, typename DigraphNodeMap> 3319 static CombinedArcMap<DigraphArcMap, const DigraphNodeMap> 3320 combinedArcMap(DigraphArcMap& arc_map, const DigraphNodeMap& node_map) { 3321 return CombinedArcMap<DigraphArcMap, 3322 const DigraphNodeMap>(arc_map, node_map); 3323 } 3324 3325 template <typename DigraphArcMap, typename DigraphNodeMap> 3326 static CombinedArcMap<const DigraphArcMap, const DigraphNodeMap> 3327 combinedArcMap(const DigraphArcMap& arc_map, 3328 const DigraphNodeMap& node_map) { 3329 return CombinedArcMap<const DigraphArcMap, 3330 const DigraphNodeMap>(arc_map, node_map); 3588 3331 } 3589 3332 3590 3333 }; 3591 3334 3592 /// \brief Returns a (read-only) SplitNodes adaptor 3593 /// 3594 /// This function just returns a (read-only) \ref SplitNodes adaptor. 3595 /// \ingroup graph_adaptors 3596 /// \relates SplitNodes 3597 template<typename GR> 3598 SplitNodes<GR> 3599 splitNodes(const GR& digraph) { 3600 return SplitNodes<GR>(digraph); 3335 /// \brief Just gives back a node splitter 3336 /// 3337 /// Just gives back a node splitter 3338 template<typename Digraph> 3339 SplitNodes<Digraph> 3340 splitNodes(const Digraph& digraph) { 3341 return SplitNodes<Digraph>(digraph); 3601 3342 } 3602 3343 3344 3603 3345 } //namespace lemon 3604 3346 -
lemon/arg_parser.cc
r440 r311 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/arg_parser.h
r440 r311 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/assert.h
r440 r290 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/base.cc
r440 r220 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bfs.h
r440 r420 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bin_heap.h
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/alteration_notifier.h
r440 r361 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/array_map.h
r440 r361 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/base_extender.h
r440 r361 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/bezier.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/default_map.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/enable_if.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/graph_adaptor_extender.h
r455 r416 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 174 174 }; 175 175 176 177 /// \ingroup digraphbits 178 /// 179 /// \brief Extender for the GraphAdaptors 176 180 template <typename _Graph> 177 181 class GraphAdaptorExtender : public _Graph { -
lemon/bits/graph_extender.h
r440 r361 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/map_extender.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/path_dump.h
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/traits.h
r440 r360 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/bits/variant.h
r440 r416 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 22 22 #include <lemon/assert.h> 23 23 24 // \file25 // \brief Variant types24 /// \file 25 /// \brief Variant types 26 26 27 27 namespace lemon { … … 37 37 38 38 39 // \brief Simple Variant type for two types40 // 41 // Simple Variant type for two types. The Variant type is a type-safe42 // union. C++ has strong limitations for using unions, for43 // example you cannot store a type with non-default constructor or44 // destructor in aunion. This class always knowns the current45 // state of the variant and it cares for the proper construction46 // and destruction.39 /// \brief Simple Variant type for two types 40 /// 41 /// Simple Variant type for two types. The Variant type is a type 42 /// safe union. The C++ has strong limitations for using unions, by 43 /// example we can not store type with non default constructor or 44 /// destructor in an union. This class always knowns the current 45 /// state of the variant and it cares for the proper construction 46 /// and destruction. 47 47 template <typename _First, typename _Second> 48 48 class BiVariant { 49 49 public: 50 50 51 // \brief The \c First type.51 /// \brief The \c First type. 52 52 typedef _First First; 53 // \brief The \c Second type.53 /// \brief The \c Second type. 54 54 typedef _Second Second; 55 55 56 // \brief Constructor57 // 58 // This constructor initalizes to the default value of the \c First59 // type.56 /// \brief Constructor 57 /// 58 /// This constructor initalizes to the default value of the \c First 59 /// type. 60 60 BiVariant() { 61 61 flag = true; … … 63 63 } 64 64 65 // \brief Constructor66 // 67 // This constructor initalizes to the given value of the \c First68 // type.65 /// \brief Constructor 66 /// 67 /// This constructor initalizes to the given value of the \c First 68 /// type. 69 69 BiVariant(const First& f) { 70 70 flag = true; … … 72 72 } 73 73 74 // \brief Constructor75 // 76 // This constructor initalizes to the given value of the \c77 // Second type.74 /// \brief Constructor 75 /// 76 /// This constructor initalizes to the given value of the \c 77 /// Second type. 78 78 BiVariant(const Second& s) { 79 79 flag = false; … … 81 81 } 82 82 83 // \brief Copy constructor84 // 85 // Copy constructor83 /// \brief Copy constructor 84 /// 85 /// Copy constructor 86 86 BiVariant(const BiVariant& bivariant) { 87 87 flag = bivariant.flag; … … 93 93 } 94 94 95 // \brief Destrcutor96 // 97 // Destructor95 /// \brief Destrcutor 96 /// 97 /// Destructor 98 98 ~BiVariant() { 99 99 destroy(); 100 100 } 101 101 102 // \brief Set to the default value of the \c First type.103 // 104 // This function sets the variant to the default value of the \c105 // First type.102 /// \brief Set to the default value of the \c First type. 103 /// 104 /// This function sets the variant to the default value of the \c 105 /// First type. 106 106 BiVariant& setFirst() { 107 107 destroy(); … … 111 111 } 112 112 113 // \brief Set to the given value of the \c First type.114 // 115 // This function sets the variant to the given value of the \c116 // First type.113 /// \brief Set to the given value of the \c First type. 114 /// 115 /// This function sets the variant to the given value of the \c 116 /// First type. 117 117 BiVariant& setFirst(const First& f) { 118 118 destroy(); … … 122 122 } 123 123 124 // \brief Set to the default value of the \c Second type.125 // 126 // This function sets the variant to the default value of the \c127 // Second type.124 /// \brief Set to the default value of the \c Second type. 125 /// 126 /// This function sets the variant to the default value of the \c 127 /// Second type. 128 128 BiVariant& setSecond() { 129 129 destroy(); … … 133 133 } 134 134 135 // \brief Set to the given value of the \c Second type.136 // 137 // This function sets the variant to the given value of the \c138 // Second type.135 /// \brief Set to the given value of the \c Second type. 136 /// 137 /// This function sets the variant to the given value of the \c 138 /// Second type. 139 139 BiVariant& setSecond(const Second& s) { 140 140 destroy(); … … 144 144 } 145 145 146 // \brief Operator form of the \c setFirst()146 /// \brief Operator form of the \c setFirst() 147 147 BiVariant& operator=(const First& f) { 148 148 return setFirst(f); 149 149 } 150 150 151 // \brief Operator form of the \c setSecond()151 /// \brief Operator form of the \c setSecond() 152 152 BiVariant& operator=(const Second& s) { 153 153 return setSecond(s); 154 154 } 155 155 156 // \brief Assign operator156 /// \brief Assign operator 157 157 BiVariant& operator=(const BiVariant& bivariant) { 158 158 if (this == &bivariant) return *this; … … 167 167 } 168 168 169 // \brief Reference to the value170 // 171 // Reference to the value of the \c First type.172 // \pre The BiVariant should store value of \c First type.169 /// \brief Reference to the value 170 /// 171 /// Reference to the value of the \c First type. 172 /// \pre The BiVariant should store value of \c First type. 173 173 First& first() { 174 174 LEMON_DEBUG(flag, "Variant wrong state"); 175 return *reinterpret_cast<First*>(data); 176 } 177 178 // \brief Const reference to the value179 // 180 // Const reference to the value of the \c First type.181 // \pre The BiVariant should store value of \c First type.182 const First& first() const { 175 return *reinterpret_cast<First*>(data); 176 } 177 178 /// \brief Const reference to the value 179 /// 180 /// Const reference to the value of the \c First type. 181 /// \pre The BiVariant should store value of \c First type. 182 const First& first() const { 183 183 LEMON_DEBUG(flag, "Variant wrong state"); 184 return *reinterpret_cast<const First*>(data); 185 } 186 187 // \brief Operator form of the \c first()184 return *reinterpret_cast<const First*>(data); 185 } 186 187 /// \brief Operator form of the \c first() 188 188 operator First&() { return first(); } 189 // \brief Operator form of the const \c first()189 /// \brief Operator form of the const \c first() 190 190 operator const First&() const { return first(); } 191 191 192 // \brief Reference to the value193 // 194 // Reference to the value of the \c Second type.195 // \pre The BiVariant should store value of \c Second type.196 Second& second() { 192 /// \brief Reference to the value 193 /// 194 /// Reference to the value of the \c Second type. 195 /// \pre The BiVariant should store value of \c Second type. 196 Second& second() { 197 197 LEMON_DEBUG(!flag, "Variant wrong state"); 198 return *reinterpret_cast<Second*>(data); 199 } 200 201 // \brief Const reference to the value202 // 203 // Const reference to the value of the \c Second type.204 // \pre The BiVariant should store value of \c Second type.205 const Second& second() const { 198 return *reinterpret_cast<Second*>(data); 199 } 200 201 /// \brief Const reference to the value 202 /// 203 /// Const reference to the value of the \c Second type. 204 /// \pre The BiVariant should store value of \c Second type. 205 const Second& second() const { 206 206 LEMON_DEBUG(!flag, "Variant wrong state"); 207 return *reinterpret_cast<const Second*>(data); 208 } 209 210 // \brief Operator form of the \c second()207 return *reinterpret_cast<const Second*>(data); 208 } 209 210 /// \brief Operator form of the \c second() 211 211 operator Second&() { return second(); } 212 // \brief Operator form of the const \c second()212 /// \brief Operator form of the const \c second() 213 213 operator const Second&() const { return second(); } 214 214 215 // \brief %True when the variant is in the first state216 // 217 // %True when the variant stores value of the \c First type.215 /// \brief %True when the variant is in the first state 216 /// 217 /// %True when the variant stores value of the \c First type. 218 218 bool firstState() const { return flag; } 219 219 220 // \brief %True when the variant is in the second state221 // 222 // %True when the variant stores value of the \c Second type.220 /// \brief %True when the variant is in the second state 221 /// 222 /// %True when the variant stores value of the \c Second type. 223 223 bool secondState() const { return !flag; } 224 224 … … 290 290 } 291 291 292 // \brief Variant type293 // 294 // Simple Variant type. The Variant type is a type-safe union.295 // C++ has strong limitations for using unions, for example you296 // cannot store type with non-default constructor or destructor in297 // a union. This class always knowns the current state of the298 // variant and it cares for the proper construction and299 // destruction.300 // 301 // \param _num The number of the types which can be stored in the302 // variant type.303 // \param _TypeMap This class describes the types of the Variant. The304 // _TypeMap::Map<index>::Type should be a valid type for each index305 // in the range {0, 1, ..., _num - 1}. The \c VariantTypeMap is helper306 // class to define such type mappings up to 10 types.307 // 308 // And the usage of the class:309 // \code310 // typedef Variant<3, VariantTypeMap<int, std::string, double> > MyVariant;311 // MyVariant var;312 // var.set<0>(12);313 // std::cout << var.get<0>() << std::endl;314 // var.set<1>("alpha");315 // std::cout << var.get<1>() << std::endl;316 // var.set<2>(0.75);317 // std::cout << var.get<2>() << std::endl;318 // \endcode319 // 320 // The result of course:321 // \code322 // 12323 // alpha324 // 0.75325 // \endcode292 /// \brief Variant type 293 /// 294 /// Simple Variant type. The Variant type is a type safe union. The 295 /// C++ has strong limitations for using unions, for example we 296 /// cannot store type with non default constructor or destructor in 297 /// a union. This class always knowns the current state of the 298 /// variant and it cares for the proper construction and 299 /// destruction. 300 /// 301 /// \param _num The number of the types which can be stored in the 302 /// variant type. 303 /// \param _TypeMap This class describes the types of the Variant. The 304 /// _TypeMap::Map<index>::Type should be a valid type for each index 305 /// in the range {0, 1, ..., _num - 1}. The \c VariantTypeMap is helper 306 /// class to define such type mappings up to 10 types. 307 /// 308 /// And the usage of the class: 309 ///\code 310 /// typedef Variant<3, VariantTypeMap<int, std::string, double> > MyVariant; 311 /// MyVariant var; 312 /// var.set<0>(12); 313 /// std::cout << var.get<0>() << std::endl; 314 /// var.set<1>("alpha"); 315 /// std::cout << var.get<1>() << std::endl; 316 /// var.set<2>(0.75); 317 /// std::cout << var.get<2>() << std::endl; 318 ///\endcode 319 /// 320 /// The result of course: 321 ///\code 322 /// 12 323 /// alpha 324 /// 0.75 325 ///\endcode 326 326 template <int _num, typename _TypeMap> 327 327 class Variant { … … 332 332 typedef _TypeMap TypeMap; 333 333 334 // \brief Constructor335 // 336 // This constructor initalizes to the default value of the \c type337 // with 0 index.334 /// \brief Constructor 335 /// 336 /// This constructor initalizes to the default value of the \c type 337 /// with 0 index. 338 338 Variant() { 339 339 flag = 0; … … 343 343 344 344 345 // \brief Copy constructor346 // 347 // Copy constructor345 /// \brief Copy constructor 346 /// 347 /// Copy constructor 348 348 Variant(const Variant& variant) { 349 349 flag = variant.flag; … … 351 351 } 352 352 353 // \brief Assign operator354 // 355 // Assign operator353 /// \brief Assign operator 354 /// 355 /// Assign operator 356 356 Variant& operator=(const Variant& variant) { 357 357 if (this == &variant) return *this; … … 364 364 } 365 365 366 // \brief Destrcutor367 // 368 // Destructor366 /// \brief Destrcutor 367 /// 368 /// Destructor 369 369 ~Variant() { 370 370 _variant_bits::Memory<num - 1, TypeMap>::destroy(flag, data); 371 371 } 372 372 373 // \brief Set to the default value of the type with \c _idx index.374 // 375 // This function sets the variant to the default value of the376 // type with \c _idx index.373 /// \brief Set to the default value of the type with \c _idx index. 374 /// 375 /// This function sets the variant to the default value of the 376 /// type with \c _idx index. 377 377 template <int _idx> 378 378 Variant& set() { … … 384 384 } 385 385 386 // \brief Set to the given value of the type with \c _idx index.387 // 388 // This function sets the variant to the given value of the type389 // with \c _idx index.386 /// \brief Set to the given value of the type with \c _idx index. 387 /// 388 /// This function sets the variant to the given value of the type 389 /// with \c _idx index. 390 390 template <int _idx> 391 391 Variant& set(const typename _TypeMap::template Map<_idx>::Type& init) { … … 397 397 } 398 398 399 // \brief Gets the current value of the type with \c _idx index.400 // 401 // Gets the current value of the type with \c _idx index.399 /// \brief Gets the current value of the type with \c _idx index. 400 /// 401 /// Gets the current value of the type with \c _idx index. 402 402 template <int _idx> 403 403 const typename TypeMap::template Map<_idx>::Type& get() const { … … 407 407 } 408 408 409 // \brief Gets the current value of the type with \c _idx index.410 // 411 // Gets the current value of the type with \c _idx index.409 /// \brief Gets the current value of the type with \c _idx index. 410 /// 411 /// Gets the current value of the type with \c _idx index. 412 412 template <int _idx> 413 413 typename _TypeMap::template Map<_idx>::Type& get() { … … 417 417 } 418 418 419 // \brief Returns the current state of the variant.420 // 421 // Returns the current state of the variant.419 /// \brief Returns the current state of the variant. 420 /// 421 /// Returns the current state of the variant. 422 422 int state() const { 423 423 return flag; … … 451 451 452 452 template <int _idx, typename _T0, typename _T1, typename _T2, 453 typename _T3, typename _T 4, typename _T5, typename _T6,453 typename _T3, typename _T5, typename _T4, typename _T6, 454 454 typename _T7, typename _T8, typename _T9> 455 455 struct Mapper { … … 470 470 } 471 471 472 // \brief Helper class for Variant473 // 474 // Helper class to define type mappings for Variant. This class475 // converts the template parameters to be mappable by integer.476 // \see Variant472 /// \brief Helper class for Variant 473 /// 474 /// Helper class to define type mappings for Variant. This class 475 /// converts the template parameters to be mappable by integer. 476 /// \see Variant 477 477 template < 478 478 typename _T0, 479 479 typename _T1 = void, typename _T2 = void, typename _T3 = void, 480 typename _T 4 = void, typename _T5= void, typename _T6 = void,480 typename _T5 = void, typename _T4 = void, typename _T6 = void, 481 481 typename _T7 = void, typename _T8 = void, typename _T9 = void> 482 482 struct VariantTypeMap { -
lemon/bits/vector_map.h
r440 r361 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/circulation.h
r440 r420 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/color.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/color.h
r440 r313 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concept_check.h
r440 r285 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concepts/digraph.h
r440 r263 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concepts/graph.h
r440 r263 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concepts/graph_components.h
r440 r313 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concepts/heap.h
r440 r290 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concepts/maps.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/concepts/path.h
r440 r281 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/config.h.in
r459 r1 1 /* Define to 1 if you have any LP solver. */2 #undef HAVE_LP3 4 /* Define to 1 if you have any MIP solver. */5 #undef HAVE_MIP6 7 1 /* Define to 1 if you have CPLEX. */ 8 2 #undef HAVE_CPLEX … … 10 4 /* Define to 1 if you have GLPK. */ 11 5 #undef HAVE_GLPK 12 13 /* Define to 1 if you have SOPLEX */14 #undef HAVE_SOPLEX15 16 /* Define to 1 if you have CLP */17 #undef HAVE_CLP -
lemon/connectivity.h
r440 r419 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 296 296 /// direction. 297 297 /// 298 /// \param digraph The graph.298 /// \param graph The graph. 299 299 /// \return The number of components 300 300 /// \note By definition, the empty graph has zero … … 1226 1226 /// that the given graph is DAG. 1227 1227 /// 1228 /// \param digraph The graph. It must be directed and acyclic.1228 /// \param graph The graph. It must be directed and acyclic. 1229 1229 /// \retval order A readable - writable node map. The values will be set 1230 1230 /// from 0 to the number of the nodes in the graph minus one. Each values -
lemon/core.h
r440 r319 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 1171 1171 /// Construct a new ConEdgeIt iterating on the edges that 1172 1172 /// connects nodes \c u and \c v. 1173 ConEdgeIt(const Graph& g, Node u, Node v) : _graph(g) , _u(u), _v(v){1174 Parent::operator=(findEdge(_graph, _u, _v));1173 ConEdgeIt(const Graph& g, Node u, Node v) : _graph(g) { 1174 Parent::operator=(findEdge(_graph, u, v)); 1175 1175 } 1176 1176 … … 1184 1184 /// It increments the iterator and gives back the next edge. 1185 1185 ConEdgeIt& operator++() { 1186 Parent::operator=(findEdge(_graph, _u, _v, *this)); 1186 Parent::operator=(findEdge(_graph, _graph.u(*this), 1187 _graph.v(*this), *this)); 1187 1188 return *this; 1188 1189 } 1189 1190 private: 1190 1191 const Graph& _graph; 1191 Node _u, _v;1192 1192 }; 1193 1193 -
lemon/counter.h
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/dfs.h
r440 r421 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/dijkstra.h
r440 r408 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/dim2.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/dimacs.h
r440 r388 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 335 335 typedef typename Digraph::ArcIt ArcIt; 336 336 337 if(!comment.empty()) 337 if(!comment.empty()) 338 338 os << "c " << comment << std::endl; 339 339 os << "p mat " << g.nodeNum() << " " << g.arcNum() << std::endl; -
lemon/elevator.h
r440 r383 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/error.h
r440 r291 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/full_graph.h
r440 r360 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/graph_to_eps.h
r440 r313 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/grid_graph.h
r440 r360 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/hao_orlin.h
r440 r412 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 239 239 if (reached[t]) continue; 240 240 _sets.push_front(std::list<int>()); 241 241 242 242 queue[qlast++] = t; 243 243 reached.set(t, true); … … 539 539 if (reached[t]) continue; 540 540 _sets.push_front(std::list<int>()); 541 541 542 542 queue[qlast++] = t; 543 543 reached.set(t, true); -
lemon/hypercube_graph.h
r440 r372 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/kruskal.h
r440 r220 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/lgf_reader.h
r440 r319 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 871 871 readLine(); 872 872 } 873 if (readSuccess()) { 874 line.putback(c); 875 } 873 line.putback(c); 876 874 } 877 875 … … 1702 1700 readLine(); 1703 1701 } 1704 if (readSuccess()) { 1705 line.putback(c); 1706 } 1702 line.putback(c); 1707 1703 } 1708 1704 … … 2231 2227 readLine(); 2232 2228 } 2233 if (readSuccess()) { 2234 line.putback(c); 2235 } 2229 line.putback(c); 2236 2230 } 2237 2231 … … 2574 2568 readLine(); 2575 2569 } 2576 if (readSuccess()) { 2577 line.putback(c); 2578 } 2570 line.putback(c); 2579 2571 } 2580 2572 -
lemon/lgf_writer.h
r440 r319 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/list_graph.h
r440 r329 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/maps.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/math.h
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/max_matching.h
r440 r330 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 417 417 /// \ref init(), \ref greedyInit() or \ref matchingInit() 418 418 /// functions first, then you can start the algorithm with the \ref 419 /// start Sparse() or startDense() functions.419 /// startParse() or startDense() functions. 420 420 421 421 ///@{ -
lemon/nauty_reader.h
r440 r359 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/path.h
r440 r313 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/preflow.h
r440 r420 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/random.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/random.h
r440 r378 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/smart_graph.h
r440 r375 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/suurballe.h
r440 r346 1 /* -*- mode: C++; indent-tabs-mode: nil;-*-1 /* -*- C++ -*- 2 2 * 3 * This file is a part of LEMON, a generic C++ optimization library .3 * This file is a part of LEMON, a generic C++ optimization library 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 52 52 /// 53 53 /// \note For finding node-disjoint paths this algorithm can be used 54 /// with \ref Split Nodes.54 /// with \ref SplitDigraphAdaptor. 55 55 #ifdef DOXYGEN 56 56 template <typename Digraph, typename LengthMap> … … 77 77 78 78 private: 79 79 80 80 /// \brief Special implementation of the Dijkstra algorithm 81 81 /// for finding shortest paths in the residual network. … … 107 107 // The processed (i.e. permanently labeled) nodes 108 108 std::vector<Node> _proc_nodes; 109 109 110 110 Node _s; 111 111 Node _t; … … 201 201 // The length map 202 202 const LengthMap &_length; 203 203 204 204 // Arc map of the current flow 205 205 FlowMap *_flow; … … 269 269 /// This function sets the potential map. 270 270 /// 271 /// The potentials provide the dual solution of the underlying 271 /// The potentials provide the dual solution of the underlying 272 272 /// minimum cost flow problem. 273 273 /// … … 331 331 for (NodeIt n(_graph); n != INVALID; ++n) (*_potential)[n] = 0; 332 332 333 _dijkstra = new ResidualDijkstra( _graph, *_flow, _length, 333 _dijkstra = new ResidualDijkstra( _graph, *_flow, _length, 334 334 *_potential, _pred, 335 335 _source, _target ); … … 371 371 return _path_num; 372 372 } 373 373 374 374 /// \brief Compute the paths from the flow. 375 375 /// -
lemon/time_measure.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/tolerance.h
r440 r280 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
lemon/unionfind.h
r440 r236 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 1178 1178 if (nodes[nodes[jd].next].size < cmax) { 1179 1179 pushLeft(nodes[jd].next, nodes[jd].left); 1180 if (less(jd, nodes[jd].next) || 1181 nodes[jd].item == nodes[pd].item) { 1182 nodes[nodes[jd].next].prio = nodes[jd].prio; 1183 nodes[nodes[jd].next].item = nodes[jd].item; 1180 if (less(nodes[jd].left, nodes[jd].next)) { 1181 nodes[nodes[jd].next].prio = nodes[nodes[jd].left].prio; 1182 nodes[nodes[jd].next].item = nodes[nodes[jd].left].item; 1184 1183 } 1185 1184 popLeft(pd); … … 1190 1189 popLeft(nodes[jd].next); 1191 1190 pushRight(jd, ld); 1192 if (less(ld, nodes[jd].left) || 1193 nodes[ld].item == nodes[pd].item) { 1191 if (less(ld, nodes[jd].left)) { 1194 1192 nodes[jd].item = nodes[ld].item; 1195 nodes[jd].prio = nodes[ ld].prio;1193 nodes[jd].prio = nodes[jd].prio; 1196 1194 } 1197 1195 if (nodes[nodes[jd].next].item == nodes[ld].item) { … … 1222 1220 if (nodes[nodes[jd].prev].size < cmax) { 1223 1221 pushRight(nodes[jd].prev, nodes[jd].right); 1224 if (less(jd, nodes[jd].prev) || 1225 nodes[jd].item == nodes[pd].item) { 1226 nodes[nodes[jd].prev].prio = nodes[jd].prio; 1227 nodes[nodes[jd].prev].item = nodes[jd].item; 1222 if (less(nodes[jd].right, nodes[jd].prev)) { 1223 nodes[nodes[jd].prev].prio = nodes[nodes[jd].right].prio; 1224 nodes[nodes[jd].prev].item = nodes[nodes[jd].right].item; 1228 1225 } 1229 1226 popRight(pd); … … 1234 1231 popRight(nodes[jd].prev); 1235 1232 pushLeft(jd, ld); 1236 if (less(ld, nodes[jd].right) || 1237 nodes[ld].item == nodes[pd].item) { 1233 if (less(ld, nodes[jd].right)) { 1238 1234 nodes[jd].item = nodes[ld].item; 1239 nodes[jd].prio = nodes[ ld].prio;1235 nodes[jd].prio = nodes[jd].prio; 1240 1236 } 1241 1237 if (nodes[nodes[jd].prev].item == nodes[ld].item) { … … 1255 1251 return comp(nodes[id].prio, nodes[jd].prio); 1256 1252 } 1253 1254 bool equal(int id, int jd) const { 1255 return !less(id, jd) && !less(jd, id); 1256 } 1257 1257 1258 1258 1259 public: … … 1400 1401 push(new_id, right_id); 1401 1402 pushRight(new_id, ~(classes[r].parent)); 1402 1403 if (less(~classes[r].parent, right_id)) { 1404 nodes[new_id].item = nodes[~classes[r].parent].item; 1405 nodes[new_id].prio = nodes[~classes[r].parent].prio; 1406 } else { 1407 nodes[new_id].item = nodes[right_id].item; 1408 nodes[new_id].prio = nodes[right_id].prio; 1409 } 1403 setPrio(new_id); 1410 1404 1411 1405 id = nodes[id].parent; … … 1447 1441 push(new_id, left_id); 1448 1442 pushLeft(new_id, ~(classes[l].parent)); 1449 1450 if (less(~classes[l].parent, left_id)) { 1451 nodes[new_id].item = nodes[~classes[l].parent].item; 1452 nodes[new_id].prio = nodes[~classes[l].parent].prio; 1453 } else { 1454 nodes[new_id].item = nodes[left_id].item; 1455 nodes[new_id].prio = nodes[left_id].prio; 1456 } 1443 setPrio(new_id); 1457 1444 1458 1445 id = nodes[id].parent; -
m4/lx_check_cplex.m4
r457 r187 63 63 if test x"$lx_cplex_found" = x"yes"; then 64 64 AC_DEFINE([HAVE_CPLEX], [1], [Define to 1 if you have CPLEX.]) 65 lx_lp_found=yes66 AC_DEFINE([HAVE_LP], [1], [Define to 1 if you have any LP solver.])67 lx_mip_found=yes68 AC_DEFINE([HAVE_MIP], [1], [Define to 1 if you have any MIP solver.])69 65 AC_MSG_RESULT([yes]) 70 66 else -
m4/lx_check_glpk.m4
r459 r187 43 43 } 44 44 45 #if (GLP_MAJOR_VERSION < 4) \46 || (GLP_MAJOR_VERSION == 4 && GLP_MINOR_VERSION < 33)47 #error Supported GLPK versions: 4.33 or above48 #endif49 50 45 int main(int argc, char** argv) 51 46 { … … 66 61 if test x"$lx_glpk_found" = x"yes"; then 67 62 AC_DEFINE([HAVE_GLPK], [1], [Define to 1 if you have GLPK.]) 68 lx_lp_found=yes69 AC_DEFINE([HAVE_LP], [1], [Define to 1 if you have any LP solver.])70 lx_mip_found=yes71 AC_DEFINE([HAVE_MIP], [1], [Define to 1 if you have any MIP solver.])72 63 AC_MSG_RESULT([yes]) 73 64 else -
m4/lx_check_soplex.m4
r457 r187 57 57 if test x"$lx_soplex_found" = x"yes"; then 58 58 AC_DEFINE([HAVE_SOPLEX], [1], [Define to 1 if you have SOPLEX.]) 59 lx_lp_found=yes60 AC_DEFINE([HAVE_LP], [1], [Define to 1 if you have any LP solver.])61 59 AC_MSG_RESULT([yes]) 62 60 else -
test/CMakeLists.txt
r469 r468 4 4 5 5 SET(TESTS 6 adaptors_test7 6 bfs_test 8 circulation_test9 7 counter_test 10 8 dfs_test … … 20 18 heap_test 21 19 kruskal_test 22 lp_test23 mip_test24 20 maps_test 25 21 max_matching_test 26 ra dix_sort_test22 random_test 27 23 path_test 28 preflow_test29 random_test30 suurballe_test31 24 time_measure_test 32 25 unionfind_test) -
test/Makefile.am
r469 r468 1 1 EXTRA_DIST += \ 2 test/CMakeLists.txt 2 test/CMakeLists.txt \ 3 test/min_cost_flow_test.lgf \ 4 test/preflow_graph.lgf 3 5 4 6 noinst_HEADERS += \ 5 7 test/graph_test.h \ 6 8 test/test_tools.h 7 9 8 10 check_PROGRAMS += \ 9 test/adaptors_test \10 11 test/bfs_test \ 11 12 12 test/circulation_test \ 13 test/counter_test \ 13 14 test/dfs_test \ 14 15 test/digraph_test \ 15 16 test/dijkstra_test \ 16 17 test/dim_test \ 17 18 test/edge_set_test \ 18 19 test/error_test \ 20 test/graph_adaptor_test \ 19 21 test/graph_copy_test \ 20 22 test/graph_test \ 21 23 test/graph_utils_test \ 22 test/hao_orlin_test \23 24 test/heap_test \ 24 25 test/kruskal_test \ 25 test/maps_test \ 26 test/hao_orlin_test \ 27 test/maps_test \ 26 28 test/max_matching_test \ 27 test/path_test \ 28 test/preflow_test \ 29 test/radix_sort_test \ 30 test/random_test \ 31 test/suurballe_test \ 32 test/test_tools_fail \ 33 test/test_tools_pass \ 34 test/time_measure_test \ 29 test/random_test \ 30 test/path_test \ 31 test/preflow_test \ 32 test/suurballe_test \ 33 test/test_tools_fail \ 34 test/test_tools_pass \ 35 test/time_measure_test \ 35 36 test/unionfind_test 36 37 if HAVE_LP38 check_PROGRAMS += test/lp_test39 endif HAVE_LP40 if HAVE_MIP41 check_PROGRAMS += test/mip_test42 endif HAVE_MIP43 37 44 38 TESTS += $(check_PROGRAMS) 45 39 XFAIL_TESTS += test/test_tools_fail$(EXEEXT) 46 40 47 test_adaptors_test_SOURCES = test/adaptors_test.cc48 41 test_bfs_test_SOURCES = test/bfs_test.cc 49 42 test_circulation_test_SOURCES = test/circulation_test.cc … … 55 48 test_edge_set_test_SOURCES = test/edge_set_test.cc 56 49 test_error_test_SOURCES = test/error_test.cc 50 test_graph_adaptor_test_SOURCES = test/graph_adaptor_test.cc 57 51 test_graph_copy_test_SOURCES = test/graph_copy_test.cc 58 52 test_graph_test_SOURCES = test/graph_test.cc … … 61 55 test_kruskal_test_SOURCES = test/kruskal_test.cc 62 56 test_hao_orlin_test_SOURCES = test/hao_orlin_test.cc 63 test_lp_test_SOURCES = test/lp_test.cc64 57 test_maps_test_SOURCES = test/maps_test.cc 65 test_mip_test_SOURCES = test/mip_test.cc66 58 test_max_matching_test_SOURCES = test/max_matching_test.cc 67 59 test_path_test_SOURCES = test/path_test.cc 68 60 test_preflow_test_SOURCES = test/preflow_test.cc 69 test_radix_sort_test_SOURCES = test/radix_sort_test.cc70 61 test_suurballe_test_SOURCES = test/suurballe_test.cc 71 62 test_random_test_SOURCES = test/random_test.cc -
test/bfs_test.cc
r440 r293 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/circulation_test.cc
r440 r403 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/counter_test.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/dfs_test.cc
r440 r293 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/digraph_test.cc
r440 r375 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/dijkstra_test.cc
r440 r397 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/dim_test.cc
r440 r253 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/error_test.cc
r440 r277 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/graph_copy_test.cc
r440 r282 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/graph_test.cc
r440 r375 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/graph_test.h
r440 r374 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/graph_utils_test.cc
r440 r220 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/hao_orlin_test.cc
r440 r410 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/heap_test.cc
r440 r293 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/kruskal_test.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/maps_test.cc
r440 r210 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/max_matching_test.cc
r440 r327 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/path_test.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/preflow_test.cc
r440 r394 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 17 17 */ 18 18 19 #include <iostream> 19 #include <fstream> 20 #include <string> 20 21 21 22 #include "test_tools.h" … … 28 29 29 30 using namespace lemon; 30 31 char test_lgf[] =32 "@nodes\n"33 "label\n"34 "0\n"35 "1\n"36 "2\n"37 "3\n"38 "4\n"39 "5\n"40 "6\n"41 "7\n"42 "8\n"43 "9\n"44 "@arcs\n"45 " label capacity\n"46 "0 1 0 20\n"47 "0 2 1 0\n"48 "1 1 2 3\n"49 "1 2 3 8\n"50 "1 3 4 8\n"51 "2 5 5 5\n"52 "3 2 6 5\n"53 "3 5 7 5\n"54 "3 6 8 5\n"55 "4 3 9 3\n"56 "5 7 10 3\n"57 "5 6 11 10\n"58 "5 8 12 10\n"59 "6 8 13 8\n"60 "8 9 14 20\n"61 "8 1 15 5\n"62 "9 5 16 5\n"63 "@attributes\n"64 "source 1\n"65 "target 8\n";66 31 67 32 void checkPreflowCompile() … … 159 124 typedef Preflow<Digraph, CapMap> PType; 160 125 126 std::string f_name; 127 if( getenv("srcdir") ) 128 f_name = std::string(getenv("srcdir")); 129 else f_name = "."; 130 f_name += "/test/preflow_graph.lgf"; 131 132 std::ifstream file(f_name.c_str()); 133 134 check(file, "Input file '" << f_name << "' not found."); 135 161 136 Digraph g; 162 137 Node s, t; 163 138 CapMap cap(g); 164 std::istringstream input(test_lgf); 165 DigraphReader<Digraph>(g,input). 139 DigraphReader<Digraph>(g,file). 166 140 arcMap("capacity", cap). 167 141 node("source",s). -
test/random_test.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/suurballe_test.cc
r440 r346 1 /* -*- mode: C++; indent-tabs-mode: nil;-*-1 /* -*- C++ -*- 2 2 * 3 * This file is a part of LEMON, a generic C++ optimization library .3 * This file is a part of LEMON, a generic C++ optimization library 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 18 18 19 19 #include <iostream> 20 #include <fstream> 20 21 21 22 #include <lemon/list_graph.h> … … 28 29 using namespace lemon; 29 30 30 char test_lgf[] =31 "@nodes\n"32 "label supply1 supply2 supply3\n"33 "1 0 20 27\n"34 "2 0 -4 0\n"35 "3 0 0 0\n"36 "4 0 0 0\n"37 "5 0 9 0\n"38 "6 0 -6 0\n"39 "7 0 0 0\n"40 "8 0 0 0\n"41 "9 0 3 0\n"42 "10 0 -2 0\n"43 "11 0 0 0\n"44 "12 0 -20 -27\n"45 "@arcs\n"46 " cost capacity lower1 lower2\n"47 " 1 2 70 11 0 8\n"48 " 1 3 150 3 0 1\n"49 " 1 4 80 15 0 2\n"50 " 2 8 80 12 0 0\n"51 " 3 5 140 5 0 3\n"52 " 4 6 60 10 0 1\n"53 " 4 7 80 2 0 0\n"54 " 4 8 110 3 0 0\n"55 " 5 7 60 14 0 0\n"56 " 5 11 120 12 0 0\n"57 " 6 3 0 3 0 0\n"58 " 6 9 140 4 0 0\n"59 " 6 10 90 8 0 0\n"60 " 7 1 30 5 0 0\n"61 " 8 12 60 16 0 4\n"62 " 9 12 50 6 0 0\n"63 "10 12 70 13 0 5\n"64 "10 2 100 7 0 0\n"65 "10 7 60 10 0 0\n"66 "11 10 20 14 0 6\n"67 "12 11 30 10 0 0\n"68 "@attributes\n"69 "source 1\n"70 "target 12\n"71 "@end\n";72 73 31 // Check the feasibility of the flow 74 32 template <typename Digraph, typename FlowMap> 75 bool checkFlow( const Digraph& gr, const FlowMap& flow, 33 bool checkFlow( const Digraph& gr, const FlowMap& flow, 76 34 typename Digraph::Node s, typename Digraph::Node t, 77 35 int value ) … … 96 54 97 55 // Check the optimalitiy of the flow 98 template < typename Digraph, typename CostMap, 56 template < typename Digraph, typename CostMap, 99 57 typename FlowMap, typename PotentialMap > 100 58 bool checkOptimality( const Digraph& gr, const CostMap& cost, … … 139 97 Node source, target; 140 98 141 std::istringstream input(test_lgf); 99 std::string fname; 100 if(getenv("srcdir")) 101 fname = std::string(getenv("srcdir")); 102 else fname = "."; 103 fname += "/test/min_cost_flow_test.lgf"; 104 105 std::ifstream input(fname.c_str()); 106 check(input, "Input file '" << fname << "' not found"); 142 107 DigraphReader<ListDigraph>(digraph, input). 143 108 arcMap("cost", length). … … 145 110 node("target", target). 146 111 run(); 147 112 input.close(); 113 148 114 // Find 2 paths 149 115 { … … 153 119 "The flow is not feasible"); 154 120 check(suurballe.totalLength() == 510, "The flow is not optimal"); 155 check(checkOptimality(digraph, length, suurballe.flowMap(), 121 check(checkOptimality(digraph, length, suurballe.flowMap(), 156 122 suurballe.potentialMap()), 157 123 "Wrong potentials"); … … 168 134 "The flow is not feasible"); 169 135 check(suurballe.totalLength() == 1040, "The flow is not optimal"); 170 check(checkOptimality(digraph, length, suurballe.flowMap(), 136 check(checkOptimality(digraph, length, suurballe.flowMap(), 171 137 suurballe.potentialMap()), 172 138 "Wrong potentials"); … … 183 149 "The flow is not feasible"); 184 150 check(suurballe.totalLength() == 1040, "The flow is not optimal"); 185 check(checkOptimality(digraph, length, suurballe.flowMap(), 151 check(checkOptimality(digraph, length, suurballe.flowMap(), 186 152 suurballe.potentialMap()), 187 153 "Wrong potentials"); -
test/test_tools.h
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/test_tools_fail.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/test_tools_pass.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/time_measure_test.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
test/unionfind_test.cc
r440 r209 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
tools/dimacs-to-lgf.cc
r440 r387 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). -
tools/lemon-0.x-to-1.x.sh
r466 r366 93 93 -e "s/\<BoundingBox\>/Box/g"\ 94 94 -e "s/\<readNauty\>/readNautyGraph/g"\ 95 -e "s/\<RevDigraphAdaptor\>/ReverseDigraph/g"\96 -e "s/\<revDigraphAdaptor\>/reverseDigraph/g"\97 -e "s/\<SubDigraphAdaptor\>/SubDigraph/g"\98 -e "s/\<subDigraphAdaptor\>/subDigraph/g"\99 -e "s/\<SubGraphAdaptor\>/SubGraph/g"\100 -e "s/\<subGraphAdaptor\>/subGraph/g"\101 -e "s/\<NodeSubDigraphAdaptor\>/FilterNodes/g"\102 -e "s/\<nodeSubDigraphAdaptor\>/filterNodes/g"\103 -e "s/\<ArcSubDigraphAdaptor\>/FilterArcs/g"\104 -e "s/\<arcSubDigraphAdaptor\>/filterArcs/g"\105 -e "s/\<UndirDigraphAdaptor\>/Undirector/g"\106 -e "s/\<undirDigraphAdaptor\>/undirector/g"\107 -e "s/\<ResDigraphAdaptor\>/ResidualDigraph/g"\108 -e "s/\<resDigraphAdaptor\>/residualDigraph/g"\109 -e "s/\<SplitDigraphAdaptor\>/SplitNodes/g"\110 -e "s/\<splitDigraphAdaptor\>/splitNodes/g"\111 -e "s/\<SubGraphAdaptor\>/SubGraph/g"\112 -e "s/\<subGraphAdaptor\>/subGraph/g"\113 -e "s/\<NodeSubGraphAdaptor\>/FilterNodes/g"\114 -e "s/\<nodeSubGraphAdaptor\>/filterNodes/g"\115 -e "s/\<ArcSubGraphAdaptor\>/FilterEdges/g"\116 -e "s/\<arcSubGraphAdaptor\>/filterEdges/g"\117 -e "s/\<DirGraphAdaptor\>/Orienter/g"\118 -e "s/\<dirGraphAdaptor\>/orienter/g"\119 95 <$i > $TMP 120 96 mv $TMP $i
Note: See TracChangeset
for help on using the changeset viewer.