gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge #298
0 13 0
merge default
0 files changed with 655 insertions and 332 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -280,6 +280,28 @@
280 280
*/
281 281

	
282 282
/**
283
@defgroup geomdat Geometric Data Structures
284
@ingroup auxdat
285
\brief Geometric data structures implemented in LEMON.
286

	
287
This group contains geometric data structures implemented in LEMON.
288

	
289
 - \ref lemon::dim2::Point "dim2::Point" implements a two dimensional
290
   vector with the usual operations.
291
 - \ref lemon::dim2::Box "dim2::Box" can be used to determine the
292
   rectangular bounding box of a set of \ref lemon::dim2::Point
293
   "dim2::Point"'s.
294
*/
295

	
296
/**
297
@defgroup matrices Matrices
298
@ingroup auxdat
299
\brief Two dimensional data storages implemented in LEMON.
300

	
301
This group contains two dimensional data storages implemented in LEMON.
302
*/
303

	
304
/**
283 305
@defgroup algs Algorithms
284 306
\brief This group contains the several algorithms
285 307
implemented in LEMON.
... ...
@@ -319,6 +341,15 @@
319 341
*/
320 342

	
321 343
/**
344
@defgroup spantree Minimum Spanning Tree Algorithms
345
@ingroup algs
346
\brief Algorithms for finding minimum cost spanning trees and arborescences.
347

	
348
This group contains the algorithms for finding minimum cost spanning
349
trees and arborescences.
350
*/
351

	
352
/**
322 353
@defgroup max_flow Maximum Flow Algorithms
323 354
@ingroup algs
324 355
\brief Algorithms for finding maximum flows.
... ...
@@ -396,7 +427,7 @@
396 427
cut is the \f$X\f$ solution of the next optimization problem:
397 428

	
398 429
\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
399
    \sum_{uv\in A, u\in X, v\not\in X}cap(uv) \f]
430
    \sum_{uv\in A: u\in X, v\not\in X}cap(uv) \f]
400 431

	
401 432
LEMON contains several algorithms related to minimum cut problems:
402 433

	
... ...
@@ -412,30 +443,6 @@
412 443
*/
413 444

	
414 445
/**
415
@defgroup graph_properties Connectivity and Other Graph Properties
416
@ingroup algs
417
\brief Algorithms for discovering the graph properties
418

	
419
This group contains the algorithms for discovering the graph properties
420
like connectivity, bipartiteness, euler property, simplicity etc.
421

	
422
\image html edge_biconnected_components.png
423
\image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
424
*/
425

	
426
/**
427
@defgroup planar Planarity Embedding and Drawing
428
@ingroup algs
429
\brief Algorithms for planarity checking, embedding and drawing
430

	
431
This group contains the algorithms for planarity checking,
432
embedding and drawing.
433

	
434
\image html planar.png
435
\image latex planar.eps "Plane graph" width=\textwidth
436
*/
437

	
438
/**
439 446
@defgroup matching Matching Algorithms
440 447
@ingroup algs
441 448
\brief Algorithms for finding matchings in graphs and bipartite graphs.
... ...
@@ -476,12 +483,36 @@
476 483
*/
477 484

	
478 485
/**
479
@defgroup spantree Minimum Spanning Tree Algorithms
486
@defgroup graph_properties Connectivity and Other Graph Properties
480 487
@ingroup algs
481
\brief Algorithms for finding minimum cost spanning trees and arborescences.
488
\brief Algorithms for discovering the graph properties
482 489

	
483
This group contains the algorithms for finding minimum cost spanning
484
trees and arborescences.
490
This group contains the algorithms for discovering the graph properties
491
like connectivity, bipartiteness, euler property, simplicity etc.
492

	
493
\image html connected_components.png
494
\image latex connected_components.eps "Connected components" width=\textwidth
495
*/
496

	
497
/**
498
@defgroup planar Planarity Embedding and Drawing
499
@ingroup algs
500
\brief Algorithms for planarity checking, embedding and drawing
501

	
502
This group contains the algorithms for planarity checking,
503
embedding and drawing.
504

	
505
\image html planar.png
506
\image latex planar.eps "Plane graph" width=\textwidth
507
*/
508

	
509
/**
510
@defgroup approx Approximation Algorithms
511
@ingroup algs
512
\brief Approximation algorithms.
513

	
514
This group contains the approximation and heuristic algorithms
515
implemented in LEMON.
485 516
*/
486 517

	
487 518
/**
... ...
@@ -494,15 +525,6 @@
494 525
*/
495 526

	
496 527
/**
497
@defgroup approx Approximation Algorithms
498
@ingroup algs
499
\brief Approximation algorithms.
500

	
501
This group contains the approximation and heuristic algorithms
502
implemented in LEMON.
503
*/
504

	
505
/**
506 528
@defgroup gen_opt_group General Optimization Tools
507 529
\brief This group contains some general optimization frameworks
508 530
implemented in LEMON.
... ...
@@ -608,7 +630,7 @@
608 630
*/
609 631

	
610 632
/**
611
@defgroup dimacs_group DIMACS format
633
@defgroup dimacs_group DIMACS Format
612 634
@ingroup io_group
613 635
\brief Read and write files in DIMACS format
614 636

	
... ...
@@ -670,6 +692,15 @@
670 692
*/
671 693

	
672 694
/**
695
@defgroup tools Standalone Utility Applications
696

	
697
Some utility applications are listed here.
698

	
699
The standard compilation procedure (<tt>./configure;make</tt>) will compile
700
them, as well.
701
*/
702

	
703
/**
673 704
\anchor demoprograms
674 705

	
675 706
@defgroup demos Demo Programs
... ...
@@ -681,13 +712,4 @@
681 712
<tt>make check</tt> commands.
682 713
*/
683 714

	
684
/**
685
@defgroup tools Standalone Utility Applications
686

	
687
Some utility applications are listed here.
688

	
689
The standard compilation procedure (<tt>./configure;make</tt>) will compile
690
them, as well.
691
*/
692

	
693 715
}
Ignore white space 6 line context
... ...
@@ -47,7 +47,7 @@
47 47
    ///
48 48
    ///The type of the map that stores the predecessor
49 49
    ///arcs of the shortest paths.
50
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
50
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
51 51
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
52 52
    ///Instantiates a \c PredMap.
53 53

	
... ...
@@ -62,7 +62,8 @@
62 62
    ///The type of the map that indicates which nodes are processed.
63 63

	
64 64
    ///The type of the map that indicates which nodes are processed.
65
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
65
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
66
    ///By default it is a NullMap.
66 67
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
67 68
    ///Instantiates a \c ProcessedMap.
68 69

	
... ...
@@ -81,7 +82,7 @@
81 82
    ///The type of the map that indicates which nodes are reached.
82 83

	
83 84
    ///The type of the map that indicates which nodes are reached.
84
    ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
85
    ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
85 86
    typedef typename Digraph::template NodeMap<bool> ReachedMap;
86 87
    ///Instantiates a \c ReachedMap.
87 88

	
... ...
@@ -96,7 +97,7 @@
96 97
    ///The type of the map that stores the distances of the nodes.
97 98

	
98 99
    ///The type of the map that stores the distances of the nodes.
99
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
100
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
100 101
    typedef typename Digraph::template NodeMap<int> DistMap;
101 102
    ///Instantiates a \c DistMap.
102 103

	
... ...
@@ -225,7 +226,7 @@
225 226
    ///
226 227
    ///\ref named-templ-param "Named parameter" for setting
227 228
    ///\c PredMap type.
228
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
229
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
229 230
    template <class T>
230 231
    struct SetPredMap : public Bfs< Digraph, SetPredMapTraits<T> > {
231 232
      typedef Bfs< Digraph, SetPredMapTraits<T> > Create;
... ...
@@ -245,7 +246,7 @@
245 246
    ///
246 247
    ///\ref named-templ-param "Named parameter" for setting
247 248
    ///\c DistMap type.
248
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
249
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
249 250
    template <class T>
250 251
    struct SetDistMap : public Bfs< Digraph, SetDistMapTraits<T> > {
251 252
      typedef Bfs< Digraph, SetDistMapTraits<T> > Create;
... ...
@@ -265,7 +266,7 @@
265 266
    ///
266 267
    ///\ref named-templ-param "Named parameter" for setting
267 268
    ///\c ReachedMap type.
268
    ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
269
    ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
269 270
    template <class T>
270 271
    struct SetReachedMap : public Bfs< Digraph, SetReachedMapTraits<T> > {
271 272
      typedef Bfs< Digraph, SetReachedMapTraits<T> > Create;
... ...
@@ -285,7 +286,7 @@
285 286
    ///
286 287
    ///\ref named-templ-param "Named parameter" for setting
287 288
    ///\c ProcessedMap type.
288
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
289
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
289 290
    template <class T>
290 291
    struct SetProcessedMap : public Bfs< Digraph, SetProcessedMapTraits<T> > {
291 292
      typedef Bfs< Digraph, SetProcessedMapTraits<T> > Create;
... ...
@@ -413,8 +414,8 @@
413 414
    ///\name Execution Control
414 415
    ///The simplest way to execute the BFS algorithm is to use one of the
415 416
    ///member functions called \ref run(Node) "run()".\n
416
    ///If you need more control on the execution, first you have to call
417
    ///\ref init(), then you can add several source nodes with
417
    ///If you need better control on the execution, you have to call
418
    ///\ref init() first, then you can add several source nodes with
418 419
    ///\ref addSource(). Finally the actual path computation can be
419 420
    ///performed with one of the \ref start() functions.
420 421

	
... ...
@@ -737,9 +738,9 @@
737 738

	
738 739
    ///@{
739 740

	
740
    ///The shortest path to a node.
741
    ///The shortest path to the given node.
741 742

	
742
    ///Returns the shortest path to a node.
743
    ///Returns the shortest path to the given node from the root(s).
743 744
    ///
744 745
    ///\warning \c t should be reached from the root(s).
745 746
    ///
... ...
@@ -747,9 +748,9 @@
747 748
    ///must be called before using this function.
748 749
    Path path(Node t) const { return Path(*G, *_pred, t); }
749 750

	
750
    ///The distance of a node from the root(s).
751
    ///The distance of the given node from the root(s).
751 752

	
752
    ///Returns the distance of a node from the root(s).
753
    ///Returns the distance of the given node from the root(s).
753 754
    ///
754 755
    ///\warning If node \c v is not reached from the root(s), then
755 756
    ///the return value of this function is undefined.
... ...
@@ -758,29 +759,31 @@
758 759
    ///must be called before using this function.
759 760
    int dist(Node v) const { return (*_dist)[v]; }
760 761

	
761
    ///Returns the 'previous arc' of the shortest path tree for a node.
762

	
762
    ///\brief Returns the 'previous arc' of the shortest path tree for
763
    ///the given node.
764
    ///
763 765
    ///This function returns the 'previous arc' of the shortest path
764 766
    ///tree for the node \c v, i.e. it returns the last arc of a
765 767
    ///shortest path from a root to \c v. It is \c INVALID if \c v
766 768
    ///is not reached from the root(s) or if \c v is a root.
767 769
    ///
768 770
    ///The shortest path tree used here is equal to the shortest path
769
    ///tree used in \ref predNode().
771
    ///tree used in \ref predNode() and \ref predMap().
770 772
    ///
771 773
    ///\pre Either \ref run(Node) "run()" or \ref init()
772 774
    ///must be called before using this function.
773 775
    Arc predArc(Node v) const { return (*_pred)[v];}
774 776

	
775
    ///Returns the 'previous node' of the shortest path tree for a node.
776

	
777
    ///\brief Returns the 'previous node' of the shortest path tree for
778
    ///the given node.
779
    ///
777 780
    ///This function returns the 'previous node' of the shortest path
778 781
    ///tree for the node \c v, i.e. it returns the last but one node
779
    ///from a shortest path from a root to \c v. It is \c INVALID
782
    ///of a shortest path from a root to \c v. It is \c INVALID
780 783
    ///if \c v is not reached from the root(s) or if \c v is a root.
781 784
    ///
782 785
    ///The shortest path tree used here is equal to the shortest path
783
    ///tree used in \ref predArc().
786
    ///tree used in \ref predArc() and \ref predMap().
784 787
    ///
785 788
    ///\pre Either \ref run(Node) "run()" or \ref init()
786 789
    ///must be called before using this function.
... ...
@@ -801,13 +804,13 @@
801 804
    ///predecessor arcs.
802 805
    ///
803 806
    ///Returns a const reference to the node map that stores the predecessor
804
    ///arcs, which form the shortest path tree.
807
    ///arcs, which form the shortest path tree (forest).
805 808
    ///
806 809
    ///\pre Either \ref run(Node) "run()" or \ref init()
807 810
    ///must be called before using this function.
808 811
    const PredMap &predMap() const { return *_pred;}
809 812

	
810
    ///Checks if a node is reached from the root(s).
813
    ///Checks if the given node is reached from the root(s).
811 814

	
812 815
    ///Returns \c true if \c v is reached from the root(s).
813 816
    ///
... ...
@@ -833,7 +836,7 @@
833 836
    ///
834 837
    ///The type of the map that stores the predecessor
835 838
    ///arcs of the shortest paths.
836
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
839
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
837 840
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
838 841
    ///Instantiates a PredMap.
839 842

	
... ...
@@ -848,7 +851,7 @@
848 851
    ///The type of the map that indicates which nodes are processed.
849 852

	
850 853
    ///The type of the map that indicates which nodes are processed.
851
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
854
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
852 855
    ///By default it is a NullMap.
853 856
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
854 857
    ///Instantiates a ProcessedMap.
... ...
@@ -868,7 +871,7 @@
868 871
    ///The type of the map that indicates which nodes are reached.
869 872

	
870 873
    ///The type of the map that indicates which nodes are reached.
871
    ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
874
    ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
872 875
    typedef typename Digraph::template NodeMap<bool> ReachedMap;
873 876
    ///Instantiates a ReachedMap.
874 877

	
... ...
@@ -883,7 +886,7 @@
883 886
    ///The type of the map that stores the distances of the nodes.
884 887

	
885 888
    ///The type of the map that stores the distances of the nodes.
886
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
889
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
887 890
    typedef typename Digraph::template NodeMap<int> DistMap;
888 891
    ///Instantiates a DistMap.
889 892

	
... ...
@@ -898,18 +901,14 @@
898 901
    ///The type of the shortest paths.
899 902

	
900 903
    ///The type of the shortest paths.
901
    ///It must meet the \ref concepts::Path "Path" concept.
904
    ///It must conform to the \ref concepts::Path "Path" concept.
902 905
    typedef lemon::Path<Digraph> Path;
903 906
  };
904 907

	
905 908
  /// Default traits class used by BfsWizard
906 909

	
907
  /// To make it easier to use Bfs algorithm
908
  /// we have created a wizard class.
909
  /// This \ref BfsWizard class needs default traits,
910
  /// as well as the \ref Bfs class.
911
  /// The \ref BfsWizardBase is a class to be the default traits of the
912
  /// \ref BfsWizard class.
910
  /// Default traits class used by BfsWizard.
911
  /// \tparam GR The type of the digraph.
913 912
  template<class GR>
914 913
  class BfsWizardBase : public BfsWizardDefaultTraits<GR>
915 914
  {
... ...
@@ -937,7 +936,7 @@
937 936
    public:
938 937
    /// Constructor.
939 938

	
940
    /// This constructor does not require parameters, therefore it initiates
939
    /// This constructor does not require parameters, it initiates
941 940
    /// all of the attributes to \c 0.
942 941
    BfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0),
943 942
                      _dist(0), _path(0), _di(0) {}
... ...
@@ -967,7 +966,6 @@
967 966
  {
968 967
    typedef TR Base;
969 968

	
970
    ///The type of the digraph the algorithm runs on.
971 969
    typedef typename TR::Digraph Digraph;
972 970

	
973 971
    typedef typename Digraph::Node Node;
... ...
@@ -975,16 +973,10 @@
975 973
    typedef typename Digraph::Arc Arc;
976 974
    typedef typename Digraph::OutArcIt OutArcIt;
977 975

	
978
    ///\brief The type of the map that stores the predecessor
979
    ///arcs of the shortest paths.
980 976
    typedef typename TR::PredMap PredMap;
981
    ///\brief The type of the map that stores the distances of the nodes.
982 977
    typedef typename TR::DistMap DistMap;
983
    ///\brief The type of the map that indicates which nodes are reached.
984 978
    typedef typename TR::ReachedMap ReachedMap;
985
    ///\brief The type of the map that indicates which nodes are processed.
986 979
    typedef typename TR::ProcessedMap ProcessedMap;
987
    ///The type of the shortest paths
988 980
    typedef typename TR::Path Path;
989 981

	
990 982
  public:
... ...
@@ -1067,11 +1059,12 @@
1067 1059
      static PredMap *createPredMap(const Digraph &) { return 0; };
1068 1060
      SetPredMapBase(const TR &b) : TR(b) {}
1069 1061
    };
1070
    ///\brief \ref named-func-param "Named parameter"
1071
    ///for setting PredMap object.
1062

	
1063
    ///\brief \ref named-templ-param "Named parameter" for setting
1064
    ///the predecessor map.
1072 1065
    ///
1073
    ///\ref named-func-param "Named parameter"
1074
    ///for setting PredMap object.
1066
    ///\ref named-templ-param "Named parameter" function for setting
1067
    ///the map that stores the predecessor arcs of the nodes.
1075 1068
    template<class T>
1076 1069
    BfsWizard<SetPredMapBase<T> > predMap(const T &t)
1077 1070
    {
... ...
@@ -1085,11 +1078,12 @@
1085 1078
      static ReachedMap *createReachedMap(const Digraph &) { return 0; };
1086 1079
      SetReachedMapBase(const TR &b) : TR(b) {}
1087 1080
    };
1088
    ///\brief \ref named-func-param "Named parameter"
1089
    ///for setting ReachedMap object.
1081

	
1082
    ///\brief \ref named-templ-param "Named parameter" for setting
1083
    ///the reached map.
1090 1084
    ///
1091
    /// \ref named-func-param "Named parameter"
1092
    ///for setting ReachedMap object.
1085
    ///\ref named-templ-param "Named parameter" function for setting
1086
    ///the map that indicates which nodes are reached.
1093 1087
    template<class T>
1094 1088
    BfsWizard<SetReachedMapBase<T> > reachedMap(const T &t)
1095 1089
    {
... ...
@@ -1103,11 +1097,13 @@
1103 1097
      static DistMap *createDistMap(const Digraph &) { return 0; };
1104 1098
      SetDistMapBase(const TR &b) : TR(b) {}
1105 1099
    };
1106
    ///\brief \ref named-func-param "Named parameter"
1107
    ///for setting DistMap object.
1100

	
1101
    ///\brief \ref named-templ-param "Named parameter" for setting
1102
    ///the distance map.
1108 1103
    ///
1109
    /// \ref named-func-param "Named parameter"
1110
    ///for setting DistMap object.
1104
    ///\ref named-templ-param "Named parameter" function for setting
1105
    ///the map that stores the distances of the nodes calculated
1106
    ///by the algorithm.
1111 1107
    template<class T>
1112 1108
    BfsWizard<SetDistMapBase<T> > distMap(const T &t)
1113 1109
    {
... ...
@@ -1121,11 +1117,12 @@
1121 1117
      static ProcessedMap *createProcessedMap(const Digraph &) { return 0; };
1122 1118
      SetProcessedMapBase(const TR &b) : TR(b) {}
1123 1119
    };
1124
    ///\brief \ref named-func-param "Named parameter"
1125
    ///for setting ProcessedMap object.
1120

	
1121
    ///\brief \ref named-func-param "Named parameter" for setting
1122
    ///the processed map.
1126 1123
    ///
1127
    /// \ref named-func-param "Named parameter"
1128
    ///for setting ProcessedMap object.
1124
    ///\ref named-templ-param "Named parameter" function for setting
1125
    ///the map that indicates which nodes are processed.
1129 1126
    template<class T>
1130 1127
    BfsWizard<SetProcessedMapBase<T> > processedMap(const T &t)
1131 1128
    {
... ...
@@ -1264,7 +1261,7 @@
1264 1261
    /// \brief The type of the map that indicates which nodes are reached.
1265 1262
    ///
1266 1263
    /// The type of the map that indicates which nodes are reached.
1267
    /// It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
1264
    /// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
1268 1265
    typedef typename Digraph::template NodeMap<bool> ReachedMap;
1269 1266

	
1270 1267
    /// \brief Instantiates a ReachedMap.
... ...
@@ -1425,8 +1422,8 @@
1425 1422
    /// \name Execution Control
1426 1423
    /// The simplest way to execute the BFS algorithm is to use one of the
1427 1424
    /// member functions called \ref run(Node) "run()".\n
1428
    /// If you need more control on the execution, first you have to call
1429
    /// \ref init(), then you can add several source nodes with
1425
    /// If you need better control on the execution, you have to call
1426
    /// \ref init() first, then you can add several source nodes with
1430 1427
    /// \ref addSource(). Finally the actual path computation can be
1431 1428
    /// performed with one of the \ref start() functions.
1432 1429

	
... ...
@@ -1735,7 +1732,7 @@
1735 1732

	
1736 1733
    ///@{
1737 1734

	
1738
    /// \brief Checks if a node is reached from the root(s).
1735
    /// \brief Checks if the given node is reached from the root(s).
1739 1736
    ///
1740 1737
    /// Returns \c true if \c v is reached from the root(s).
1741 1738
    ///
Ignore white space 6 line context
... ...
@@ -49,6 +49,8 @@
49 49
    typedef typename Parent::Reference Reference;
50 50
    typedef typename Parent::ConstReference ConstReference;
51 51

	
52
    typedef typename Parent::ReferenceMapTag ReferenceMapTag;
53

	
52 54
    class MapIt;
53 55
    class ConstMapIt;
54 56

	
... ...
@@ -191,6 +193,8 @@
191 193
    typedef typename Parent::Reference Reference;
192 194
    typedef typename Parent::ConstReference ConstReference;
193 195

	
196
    typedef typename Parent::ReferenceMapTag ReferenceMapTag;
197

	
194 198
    class MapIt;
195 199
    class ConstMapIt;
196 200

	
Ignore white space 6 line context
... ...
@@ -72,7 +72,11 @@
72 72
    /// The type of the map that stores the flow values.
73 73
    /// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap"
74 74
    /// concept.
75
#ifdef DOXYGEN
76
    typedef GR::ArcMap<Value> FlowMap;
77
#else
75 78
    typedef typename Digraph::template ArcMap<Value> FlowMap;
79
#endif
76 80

	
77 81
    /// \brief Instantiates a FlowMap.
78 82
    ///
... ...
@@ -87,9 +91,12 @@
87 91
    ///
88 92
    /// The elevator type used by the algorithm.
89 93
    ///
90
    /// \sa Elevator
91
    /// \sa LinkedElevator
94
    /// \sa Elevator, LinkedElevator
95
#ifdef DOXYGEN
96
    typedef lemon::Elevator<GR, GR::Node> Elevator;
97
#else
92 98
    typedef lemon::Elevator<Digraph, typename Digraph::Node> Elevator;
99
#endif
93 100

	
94 101
    /// \brief Instantiates an Elevator.
95 102
    ///
... ...
@@ -469,8 +476,8 @@
469 476

	
470 477
    /// \name Execution Control
471 478
    /// The simplest way to execute the algorithm is to call \ref run().\n
472
    /// If you need more control on the initial solution or the execution,
473
    /// first you have to call one of the \ref init() functions, then
479
    /// If you need better control on the initial solution or the execution,
480
    /// you have to call one of the \ref init() functions first, then
474 481
    /// the \ref start() function.
475 482

	
476 483
    ///@{
Ignore white space 6 line context
... ...
@@ -182,7 +182,8 @@
182 182

	
183 183
      template<typename _ReferenceMap>
184 184
      struct Constraints {
185
        void constraints() {
185
        typename enable_if<typename _ReferenceMap::ReferenceMapTag, void>::type
186
        constraints() {
186 187
          checkConcept<ReadWriteMap<K, T>, _ReferenceMap >();
187 188
          ref = m[key];
188 189
          m[key] = val;
Ignore white space 6 line context
... ...
@@ -47,7 +47,7 @@
47 47
    ///
48 48
    ///The type of the map that stores the predecessor
49 49
    ///arcs of the %DFS paths.
50
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
50
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
51 51
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
52 52
    ///Instantiates a \c PredMap.
53 53

	
... ...
@@ -62,7 +62,8 @@
62 62
    ///The type of the map that indicates which nodes are processed.
63 63

	
64 64
    ///The type of the map that indicates which nodes are processed.
65
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
65
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
66
    ///By default it is a NullMap.
66 67
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
67 68
    ///Instantiates a \c ProcessedMap.
68 69

	
... ...
@@ -81,7 +82,7 @@
81 82
    ///The type of the map that indicates which nodes are reached.
82 83

	
83 84
    ///The type of the map that indicates which nodes are reached.
84
    ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
85
    ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
85 86
    typedef typename Digraph::template NodeMap<bool> ReachedMap;
86 87
    ///Instantiates a \c ReachedMap.
87 88

	
... ...
@@ -96,7 +97,7 @@
96 97
    ///The type of the map that stores the distances of the nodes.
97 98

	
98 99
    ///The type of the map that stores the distances of the nodes.
99
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
100
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
100 101
    typedef typename Digraph::template NodeMap<int> DistMap;
101 102
    ///Instantiates a \c DistMap.
102 103

	
... ...
@@ -224,7 +225,7 @@
224 225
    ///
225 226
    ///\ref named-templ-param "Named parameter" for setting
226 227
    ///\c PredMap type.
227
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
228
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
228 229
    template <class T>
229 230
    struct SetPredMap : public Dfs<Digraph, SetPredMapTraits<T> > {
230 231
      typedef Dfs<Digraph, SetPredMapTraits<T> > Create;
... ...
@@ -244,7 +245,7 @@
244 245
    ///
245 246
    ///\ref named-templ-param "Named parameter" for setting
246 247
    ///\c DistMap type.
247
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
248
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
248 249
    template <class T>
249 250
    struct SetDistMap : public Dfs< Digraph, SetDistMapTraits<T> > {
250 251
      typedef Dfs<Digraph, SetDistMapTraits<T> > Create;
... ...
@@ -264,7 +265,7 @@
264 265
    ///
265 266
    ///\ref named-templ-param "Named parameter" for setting
266 267
    ///\c ReachedMap type.
267
    ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
268
    ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
268 269
    template <class T>
269 270
    struct SetReachedMap : public Dfs< Digraph, SetReachedMapTraits<T> > {
270 271
      typedef Dfs< Digraph, SetReachedMapTraits<T> > Create;
... ...
@@ -284,7 +285,7 @@
284 285
    ///
285 286
    ///\ref named-templ-param "Named parameter" for setting
286 287
    ///\c ProcessedMap type.
287
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
288
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
288 289
    template <class T>
289 290
    struct SetProcessedMap : public Dfs< Digraph, SetProcessedMapTraits<T> > {
290 291
      typedef Dfs< Digraph, SetProcessedMapTraits<T> > Create;
... ...
@@ -411,8 +412,8 @@
411 412
    ///\name Execution Control
412 413
    ///The simplest way to execute the DFS algorithm is to use one of the
413 414
    ///member functions called \ref run(Node) "run()".\n
414
    ///If you need more control on the execution, first you have to call
415
    ///\ref init(), then you can add a source node with \ref addSource()
415
    ///If you need better control on the execution, you have to call
416
    ///\ref init() first, then you can add a source node with \ref addSource()
416 417
    ///and perform the actual computation with \ref start().
417 418
    ///This procedure can be repeated if there are nodes that have not
418 419
    ///been reached.
... ...
@@ -669,9 +670,9 @@
669 670

	
670 671
    ///@{
671 672

	
672
    ///The DFS path to a node.
673
    ///The DFS path to the given node.
673 674

	
674
    ///Returns the DFS path to a node.
675
    ///Returns the DFS path to the given node from the root(s).
675 676
    ///
676 677
    ///\warning \c t should be reached from the root(s).
677 678
    ///
... ...
@@ -679,9 +680,9 @@
679 680
    ///must be called before using this function.
680 681
    Path path(Node t) const { return Path(*G, *_pred, t); }
681 682

	
682
    ///The distance of a node from the root(s).
683
    ///The distance of the given node from the root(s).
683 684

	
684
    ///Returns the distance of a node from the root(s).
685
    ///Returns the distance of the given node from the root(s).
685 686
    ///
686 687
    ///\warning If node \c v is not reached from the root(s), then
687 688
    ///the return value of this function is undefined.
... ...
@@ -690,7 +691,7 @@
690 691
    ///must be called before using this function.
691 692
    int dist(Node v) const { return (*_dist)[v]; }
692 693

	
693
    ///Returns the 'previous arc' of the %DFS tree for a node.
694
    ///Returns the 'previous arc' of the %DFS tree for the given node.
694 695

	
695 696
    ///This function returns the 'previous arc' of the %DFS tree for the
696 697
    ///node \c v, i.e. it returns the last arc of a %DFS path from a
... ...
@@ -698,21 +699,21 @@
698 699
    ///root(s) or if \c v is a root.
699 700
    ///
700 701
    ///The %DFS tree used here is equal to the %DFS tree used in
701
    ///\ref predNode().
702
    ///\ref predNode() and \ref predMap().
702 703
    ///
703 704
    ///\pre Either \ref run(Node) "run()" or \ref init()
704 705
    ///must be called before using this function.
705 706
    Arc predArc(Node v) const { return (*_pred)[v];}
706 707

	
707
    ///Returns the 'previous node' of the %DFS tree.
708
    ///Returns the 'previous node' of the %DFS tree for the given node.
708 709

	
709 710
    ///This function returns the 'previous node' of the %DFS
710 711
    ///tree for the node \c v, i.e. it returns the last but one node
711
    ///from a %DFS path from a root to \c v. It is \c INVALID
712
    ///of a %DFS path from a root to \c v. It is \c INVALID
712 713
    ///if \c v is not reached from the root(s) or if \c v is a root.
713 714
    ///
714 715
    ///The %DFS tree used here is equal to the %DFS tree used in
715
    ///\ref predArc().
716
    ///\ref predArc() and \ref predMap().
716 717
    ///
717 718
    ///\pre Either \ref run(Node) "run()" or \ref init()
718 719
    ///must be called before using this function.
... ...
@@ -733,13 +734,13 @@
733 734
    ///predecessor arcs.
734 735
    ///
735 736
    ///Returns a const reference to the node map that stores the predecessor
736
    ///arcs, which form the DFS tree.
737
    ///arcs, which form the DFS tree (forest).
737 738
    ///
738 739
    ///\pre Either \ref run(Node) "run()" or \ref init()
739 740
    ///must be called before using this function.
740 741
    const PredMap &predMap() const { return *_pred;}
741 742

	
742
    ///Checks if a node is reached from the root(s).
743
    ///Checks if the given node. node is reached from the root(s).
743 744

	
744 745
    ///Returns \c true if \c v is reached from the root(s).
745 746
    ///
... ...
@@ -765,7 +766,7 @@
765 766
    ///
766 767
    ///The type of the map that stores the predecessor
767 768
    ///arcs of the %DFS paths.
768
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
769
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
769 770
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
770 771
    ///Instantiates a PredMap.
771 772

	
... ...
@@ -780,7 +781,7 @@
780 781
    ///The type of the map that indicates which nodes are processed.
781 782

	
782 783
    ///The type of the map that indicates which nodes are processed.
783
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
784
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
784 785
    ///By default it is a NullMap.
785 786
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
786 787
    ///Instantiates a ProcessedMap.
... ...
@@ -800,7 +801,7 @@
800 801
    ///The type of the map that indicates which nodes are reached.
801 802

	
802 803
    ///The type of the map that indicates which nodes are reached.
803
    ///It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
804
    ///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
804 805
    typedef typename Digraph::template NodeMap<bool> ReachedMap;
805 806
    ///Instantiates a ReachedMap.
806 807

	
... ...
@@ -815,7 +816,7 @@
815 816
    ///The type of the map that stores the distances of the nodes.
816 817

	
817 818
    ///The type of the map that stores the distances of the nodes.
818
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
819
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
819 820
    typedef typename Digraph::template NodeMap<int> DistMap;
820 821
    ///Instantiates a DistMap.
821 822

	
... ...
@@ -830,18 +831,14 @@
830 831
    ///The type of the DFS paths.
831 832

	
832 833
    ///The type of the DFS paths.
833
    ///It must meet the \ref concepts::Path "Path" concept.
834
    ///It must conform to the \ref concepts::Path "Path" concept.
834 835
    typedef lemon::Path<Digraph> Path;
835 836
  };
836 837

	
837 838
  /// Default traits class used by DfsWizard
838 839

	
839
  /// To make it easier to use Dfs algorithm
840
  /// we have created a wizard class.
841
  /// This \ref DfsWizard class needs default traits,
842
  /// as well as the \ref Dfs class.
843
  /// The \ref DfsWizardBase is a class to be the default traits of the
844
  /// \ref DfsWizard class.
840
  /// Default traits class used by DfsWizard.
841
  /// \tparam GR The type of the digraph.
845 842
  template<class GR>
846 843
  class DfsWizardBase : public DfsWizardDefaultTraits<GR>
847 844
  {
... ...
@@ -869,7 +866,7 @@
869 866
    public:
870 867
    /// Constructor.
871 868

	
872
    /// This constructor does not require parameters, therefore it initiates
869
    /// This constructor does not require parameters, it initiates
873 870
    /// all of the attributes to \c 0.
874 871
    DfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0),
875 872
                      _dist(0), _path(0), _di(0) {}
... ...
@@ -899,7 +896,6 @@
899 896
  {
900 897
    typedef TR Base;
901 898

	
902
    ///The type of the digraph the algorithm runs on.
903 899
    typedef typename TR::Digraph Digraph;
904 900

	
905 901
    typedef typename Digraph::Node Node;
... ...
@@ -907,16 +903,10 @@
907 903
    typedef typename Digraph::Arc Arc;
908 904
    typedef typename Digraph::OutArcIt OutArcIt;
909 905

	
910
    ///\brief The type of the map that stores the predecessor
911
    ///arcs of the DFS paths.
912 906
    typedef typename TR::PredMap PredMap;
913
    ///\brief The type of the map that stores the distances of the nodes.
914 907
    typedef typename TR::DistMap DistMap;
915
    ///\brief The type of the map that indicates which nodes are reached.
916 908
    typedef typename TR::ReachedMap ReachedMap;
917
    ///\brief The type of the map that indicates which nodes are processed.
918 909
    typedef typename TR::ProcessedMap ProcessedMap;
919
    ///The type of the DFS paths
920 910
    typedef typename TR::Path Path;
921 911

	
922 912
  public:
... ...
@@ -999,11 +989,12 @@
999 989
      static PredMap *createPredMap(const Digraph &) { return 0; };
1000 990
      SetPredMapBase(const TR &b) : TR(b) {}
1001 991
    };
1002
    ///\brief \ref named-func-param "Named parameter"
1003
    ///for setting PredMap object.
992

	
993
    ///\brief \ref named-templ-param "Named parameter" for setting
994
    ///the predecessor map.
1004 995
    ///
1005
    ///\ref named-func-param "Named parameter"
1006
    ///for setting PredMap object.
996
    ///\ref named-templ-param "Named parameter" function for setting
997
    ///the map that stores the predecessor arcs of the nodes.
1007 998
    template<class T>
1008 999
    DfsWizard<SetPredMapBase<T> > predMap(const T &t)
1009 1000
    {
... ...
@@ -1017,11 +1008,12 @@
1017 1008
      static ReachedMap *createReachedMap(const Digraph &) { return 0; };
1018 1009
      SetReachedMapBase(const TR &b) : TR(b) {}
1019 1010
    };
1020
    ///\brief \ref named-func-param "Named parameter"
1021
    ///for setting ReachedMap object.
1011

	
1012
    ///\brief \ref named-templ-param "Named parameter" for setting
1013
    ///the reached map.
1022 1014
    ///
1023
    /// \ref named-func-param "Named parameter"
1024
    ///for setting ReachedMap object.
1015
    ///\ref named-templ-param "Named parameter" function for setting
1016
    ///the map that indicates which nodes are reached.
1025 1017
    template<class T>
1026 1018
    DfsWizard<SetReachedMapBase<T> > reachedMap(const T &t)
1027 1019
    {
... ...
@@ -1035,11 +1027,13 @@
1035 1027
      static DistMap *createDistMap(const Digraph &) { return 0; };
1036 1028
      SetDistMapBase(const TR &b) : TR(b) {}
1037 1029
    };
1038
    ///\brief \ref named-func-param "Named parameter"
1039
    ///for setting DistMap object.
1030

	
1031
    ///\brief \ref named-templ-param "Named parameter" for setting
1032
    ///the distance map.
1040 1033
    ///
1041
    /// \ref named-func-param "Named parameter"
1042
    ///for setting DistMap object.
1034
    ///\ref named-templ-param "Named parameter" function for setting
1035
    ///the map that stores the distances of the nodes calculated
1036
    ///by the algorithm.
1043 1037
    template<class T>
1044 1038
    DfsWizard<SetDistMapBase<T> > distMap(const T &t)
1045 1039
    {
... ...
@@ -1053,11 +1047,12 @@
1053 1047
      static ProcessedMap *createProcessedMap(const Digraph &) { return 0; };
1054 1048
      SetProcessedMapBase(const TR &b) : TR(b) {}
1055 1049
    };
1056
    ///\brief \ref named-func-param "Named parameter"
1057
    ///for setting ProcessedMap object.
1050

	
1051
    ///\brief \ref named-func-param "Named parameter" for setting
1052
    ///the processed map.
1058 1053
    ///
1059
    /// \ref named-func-param "Named parameter"
1060
    ///for setting ProcessedMap object.
1054
    ///\ref named-templ-param "Named parameter" function for setting
1055
    ///the map that indicates which nodes are processed.
1061 1056
    template<class T>
1062 1057
    DfsWizard<SetProcessedMapBase<T> > processedMap(const T &t)
1063 1058
    {
... ...
@@ -1208,7 +1203,7 @@
1208 1203
    /// \brief The type of the map that indicates which nodes are reached.
1209 1204
    ///
1210 1205
    /// The type of the map that indicates which nodes are reached.
1211
    /// It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
1206
    /// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
1212 1207
    typedef typename Digraph::template NodeMap<bool> ReachedMap;
1213 1208

	
1214 1209
    /// \brief Instantiates a ReachedMap.
... ...
@@ -1369,8 +1364,8 @@
1369 1364
    /// \name Execution Control
1370 1365
    /// The simplest way to execute the DFS algorithm is to use one of the
1371 1366
    /// member functions called \ref run(Node) "run()".\n
1372
    /// If you need more control on the execution, first you have to call
1373
    /// \ref init(), then you can add a source node with \ref addSource()
1367
    /// If you need better control on the execution, you have to call
1368
    /// \ref init() first, then you can add a source node with \ref addSource()
1374 1369
    /// and perform the actual computation with \ref start().
1375 1370
    /// This procedure can be repeated if there are nodes that have not
1376 1371
    /// been reached.
... ...
@@ -1620,7 +1615,7 @@
1620 1615

	
1621 1616
    ///@{
1622 1617

	
1623
    /// \brief Checks if a node is reached from the root(s).
1618
    /// \brief Checks if the given node is reached from the root(s).
1624 1619
    ///
1625 1620
    /// Returns \c true if \c v is reached from the root(s).
1626 1621
    ///
Ignore white space 6 line context
... ...
@@ -70,9 +70,9 @@
70 70
    ///The type of the map that stores the arc lengths.
71 71

	
72 72
    ///The type of the map that stores the arc lengths.
73
    ///It must meet the \ref concepts::ReadMap "ReadMap" concept.
73
    ///It must conform to the \ref concepts::ReadMap "ReadMap" concept.
74 74
    typedef LEN LengthMap;
75
    ///The type of the length of the arcs.
75
    ///The type of the arc lengths.
76 76
    typedef typename LEN::Value Value;
77 77

	
78 78
    /// Operation traits for %Dijkstra algorithm.
... ...
@@ -116,7 +116,7 @@
116 116
    ///
117 117
    ///The type of the map that stores the predecessor
118 118
    ///arcs of the shortest paths.
119
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
119
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
120 120
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
121 121
    ///Instantiates a \c PredMap.
122 122

	
... ...
@@ -131,7 +131,7 @@
131 131
    ///The type of the map that indicates which nodes are processed.
132 132

	
133 133
    ///The type of the map that indicates which nodes are processed.
134
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
134
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
135 135
    ///By default it is a NullMap.
136 136
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
137 137
    ///Instantiates a \c ProcessedMap.
... ...
@@ -151,7 +151,7 @@
151 151
    ///The type of the map that stores the distances of the nodes.
152 152

	
153 153
    ///The type of the map that stores the distances of the nodes.
154
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
154
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
155 155
    typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap;
156 156
    ///Instantiates a \c DistMap.
157 157

	
... ...
@@ -169,6 +169,10 @@
169 169
  /// \ingroup shortest_path
170 170
  ///This class provides an efficient implementation of the %Dijkstra algorithm.
171 171
  ///
172
  ///The %Dijkstra algorithm solves the single-source shortest path problem
173
  ///when all arc lengths are non-negative. If there are negative lengths,
174
  ///the BellmanFord algorithm should be used instead.
175
  ///
172 176
  ///The arc lengths are passed to the algorithm using a
173 177
  ///\ref concepts::ReadMap "ReadMap",
174 178
  ///so it is easy to change it to any kind of length.
... ...
@@ -201,7 +205,7 @@
201 205
    ///The type of the digraph the algorithm runs on.
202 206
    typedef typename TR::Digraph Digraph;
203 207

	
204
    ///The type of the length of the arcs.
208
    ///The type of the arc lengths.
205 209
    typedef typename TR::LengthMap::Value Value;
206 210
    ///The type of the map that stores the arc lengths.
207 211
    typedef typename TR::LengthMap LengthMap;
... ...
@@ -304,7 +308,7 @@
304 308
    ///
305 309
    ///\ref named-templ-param "Named parameter" for setting
306 310
    ///\c PredMap type.
307
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
311
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
308 312
    template <class T>
309 313
    struct SetPredMap
310 314
      : public Dijkstra< Digraph, LengthMap, SetPredMapTraits<T> > {
... ...
@@ -325,7 +329,7 @@
325 329
    ///
326 330
    ///\ref named-templ-param "Named parameter" for setting
327 331
    ///\c DistMap type.
328
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
332
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
329 333
    template <class T>
330 334
    struct SetDistMap
331 335
      : public Dijkstra< Digraph, LengthMap, SetDistMapTraits<T> > {
... ...
@@ -346,7 +350,7 @@
346 350
    ///
347 351
    ///\ref named-templ-param "Named parameter" for setting
348 352
    ///\c ProcessedMap type.
349
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
353
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
350 354
    template <class T>
351 355
    struct SetProcessedMap
352 356
      : public Dijkstra< Digraph, LengthMap, SetProcessedMapTraits<T> > {
... ...
@@ -443,6 +447,7 @@
443 447
    ///
444 448
    ///\ref named-templ-param "Named parameter" for setting
445 449
    ///\c OperationTraits type.
450
    /// For more information see \ref DijkstraDefaultOperationTraits.
446 451
    template <class T>
447 452
    struct SetOperationTraits
448 453
      : public Dijkstra<Digraph, LengthMap, SetOperationTraitsTraits<T> > {
... ...
@@ -584,8 +589,8 @@
584 589
    ///\name Execution Control
585 590
    ///The simplest way to execute the %Dijkstra algorithm is to use
586 591
    ///one of the member functions called \ref run(Node) "run()".\n
587
    ///If you need more control on the execution, first you have to call
588
    ///\ref init(), then you can add several source nodes with
592
    ///If you need better control on the execution, you have to call
593
    ///\ref init() first, then you can add several source nodes with
589 594
    ///\ref addSource(). Finally the actual path computation can be
590 595
    ///performed with one of the \ref start() functions.
591 596

	
... ...
@@ -801,14 +806,14 @@
801 806
    ///\name Query Functions
802 807
    ///The results of the %Dijkstra algorithm can be obtained using these
803 808
    ///functions.\n
804
    ///Either \ref run(Node) "run()" or \ref start() should be called
809
    ///Either \ref run(Node) "run()" or \ref init() should be called
805 810
    ///before using them.
806 811

	
807 812
    ///@{
808 813

	
809
    ///The shortest path to a node.
814
    ///The shortest path to the given node.
810 815

	
811
    ///Returns the shortest path to a node.
816
    ///Returns the shortest path to the given node from the root(s).
812 817
    ///
813 818
    ///\warning \c t should be reached from the root(s).
814 819
    ///
... ...
@@ -816,9 +821,9 @@
816 821
    ///must be called before using this function.
817 822
    Path path(Node t) const { return Path(*G, *_pred, t); }
818 823

	
819
    ///The distance of a node from the root(s).
824
    ///The distance of the given node from the root(s).
820 825

	
821
    ///Returns the distance of a node from the root(s).
826
    ///Returns the distance of the given node from the root(s).
822 827
    ///
823 828
    ///\warning If node \c v is not reached from the root(s), then
824 829
    ///the return value of this function is undefined.
... ...
@@ -827,29 +832,31 @@
827 832
    ///must be called before using this function.
828 833
    Value dist(Node v) const { return (*_dist)[v]; }
829 834

	
830
    ///Returns the 'previous arc' of the shortest path tree for a node.
831

	
835
    ///\brief Returns the 'previous arc' of the shortest path tree for
836
    ///the given node.
837
    ///
832 838
    ///This function returns the 'previous arc' of the shortest path
833 839
    ///tree for the node \c v, i.e. it returns the last arc of a
834 840
    ///shortest path from a root to \c v. It is \c INVALID if \c v
835 841
    ///is not reached from the root(s) or if \c v is a root.
836 842
    ///
837 843
    ///The shortest path tree used here is equal to the shortest path
838
    ///tree used in \ref predNode().
844
    ///tree used in \ref predNode() and \ref predMap().
839 845
    ///
840 846
    ///\pre Either \ref run(Node) "run()" or \ref init()
841 847
    ///must be called before using this function.
842 848
    Arc predArc(Node v) const { return (*_pred)[v]; }
843 849

	
844
    ///Returns the 'previous node' of the shortest path tree for a node.
845

	
850
    ///\brief Returns the 'previous node' of the shortest path tree for
851
    ///the given node.
852
    ///
846 853
    ///This function returns the 'previous node' of the shortest path
847 854
    ///tree for the node \c v, i.e. it returns the last but one node
848
    ///from a shortest path from a root to \c v. It is \c INVALID
855
    ///of a shortest path from a root to \c v. It is \c INVALID
849 856
    ///if \c v is not reached from the root(s) or if \c v is a root.
850 857
    ///
851 858
    ///The shortest path tree used here is equal to the shortest path
852
    ///tree used in \ref predArc().
859
    ///tree used in \ref predArc() and \ref predMap().
853 860
    ///
854 861
    ///\pre Either \ref run(Node) "run()" or \ref init()
855 862
    ///must be called before using this function.
... ...
@@ -870,13 +877,13 @@
870 877
    ///predecessor arcs.
871 878
    ///
872 879
    ///Returns a const reference to the node map that stores the predecessor
873
    ///arcs, which form the shortest path tree.
880
    ///arcs, which form the shortest path tree (forest).
874 881
    ///
875 882
    ///\pre Either \ref run(Node) "run()" or \ref init()
876 883
    ///must be called before using this function.
877 884
    const PredMap &predMap() const { return *_pred;}
878 885

	
879
    ///Checks if a node is reached from the root(s).
886
    ///Checks if the given node is reached from the root(s).
880 887

	
881 888
    ///Returns \c true if \c v is reached from the root(s).
882 889
    ///
... ...
@@ -895,9 +902,9 @@
895 902
    bool processed(Node v) const { return (*_heap_cross_ref)[v] ==
896 903
                                          Heap::POST_HEAP; }
897 904

	
898
    ///The current distance of a node from the root(s).
905
    ///The current distance of the given node from the root(s).
899 906

	
900
    ///Returns the current distance of a node from the root(s).
907
    ///Returns the current distance of the given node from the root(s).
901 908
    ///It may be decreased in the following processes.
902 909
    ///
903 910
    ///\pre Either \ref run(Node) "run()" or \ref init()
... ...
@@ -924,9 +931,9 @@
924 931
    ///The type of the map that stores the arc lengths.
925 932

	
926 933
    ///The type of the map that stores the arc lengths.
927
    ///It must meet the \ref concepts::ReadMap "ReadMap" concept.
934
    ///It must conform to the \ref concepts::ReadMap "ReadMap" concept.
928 935
    typedef LEN LengthMap;
929
    ///The type of the length of the arcs.
936
    ///The type of the arc lengths.
930 937
    typedef typename LEN::Value Value;
931 938

	
932 939
    /// Operation traits for Dijkstra algorithm.
... ...
@@ -973,7 +980,7 @@
973 980
    ///
974 981
    ///The type of the map that stores the predecessor
975 982
    ///arcs of the shortest paths.
976
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
983
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
977 984
    typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap;
978 985
    ///Instantiates a PredMap.
979 986

	
... ...
@@ -988,7 +995,7 @@
988 995
    ///The type of the map that indicates which nodes are processed.
989 996

	
990 997
    ///The type of the map that indicates which nodes are processed.
991
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
998
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
992 999
    ///By default it is a NullMap.
993 1000
    typedef NullMap<typename Digraph::Node,bool> ProcessedMap;
994 1001
    ///Instantiates a ProcessedMap.
... ...
@@ -1008,7 +1015,7 @@
1008 1015
    ///The type of the map that stores the distances of the nodes.
1009 1016

	
1010 1017
    ///The type of the map that stores the distances of the nodes.
1011
    ///It must meet the \ref concepts::WriteMap "WriteMap" concept.
1018
    ///It must conform to the \ref concepts::WriteMap "WriteMap" concept.
1012 1019
    typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap;
1013 1020
    ///Instantiates a DistMap.
1014 1021

	
... ...
@@ -1023,18 +1030,15 @@
1023 1030
    ///The type of the shortest paths.
1024 1031

	
1025 1032
    ///The type of the shortest paths.
1026
    ///It must meet the \ref concepts::Path "Path" concept.
1033
    ///It must conform to the \ref concepts::Path "Path" concept.
1027 1034
    typedef lemon::Path<Digraph> Path;
1028 1035
  };
1029 1036

	
1030 1037
  /// Default traits class used by DijkstraWizard
1031 1038

	
1032
  /// To make it easier to use Dijkstra algorithm
1033
  /// we have created a wizard class.
1034
  /// This \ref DijkstraWizard class needs default traits,
1035
  /// as well as the \ref Dijkstra class.
1036
  /// The \ref DijkstraWizardBase is a class to be the default traits of the
1037
  /// \ref DijkstraWizard class.
1039
  /// Default traits class used by DijkstraWizard.
1040
  /// \tparam GR The type of the digraph.
1041
  /// \tparam LEN The type of the length map.
1038 1042
  template<typename GR, typename LEN>
1039 1043
  class DijkstraWizardBase : public DijkstraWizardDefaultTraits<GR,LEN>
1040 1044
  {
... ...
@@ -1093,7 +1097,6 @@
1093 1097
  {
1094 1098
    typedef TR Base;
1095 1099

	
1096
    ///The type of the digraph the algorithm runs on.
1097 1100
    typedef typename TR::Digraph Digraph;
1098 1101

	
1099 1102
    typedef typename Digraph::Node Node;
... ...
@@ -1101,20 +1104,12 @@
1101 1104
    typedef typename Digraph::Arc Arc;
1102 1105
    typedef typename Digraph::OutArcIt OutArcIt;
1103 1106

	
1104
    ///The type of the map that stores the arc lengths.
1105 1107
    typedef typename TR::LengthMap LengthMap;
1106
    ///The type of the length of the arcs.
1107 1108
    typedef typename LengthMap::Value Value;
1108
    ///\brief The type of the map that stores the predecessor
1109
    ///arcs of the shortest paths.
1110 1109
    typedef typename TR::PredMap PredMap;
1111
    ///The type of the map that stores the distances of the nodes.
1112 1110
    typedef typename TR::DistMap DistMap;
1113
    ///The type of the map that indicates which nodes are processed.
1114 1111
    typedef typename TR::ProcessedMap ProcessedMap;
1115
    ///The type of the shortest paths
1116 1112
    typedef typename TR::Path Path;
1117
    ///The heap type used by the dijkstra algorithm.
1118 1113
    typedef typename TR::Heap Heap;
1119 1114

	
1120 1115
  public:
... ...
@@ -1186,11 +1181,12 @@
1186 1181
      static PredMap *createPredMap(const Digraph &) { return 0; };
1187 1182
      SetPredMapBase(const TR &b) : TR(b) {}
1188 1183
    };
1189
    ///\brief \ref named-func-param "Named parameter"
1190
    ///for setting PredMap object.
1184

	
1185
    ///\brief \ref named-templ-param "Named parameter" for setting
1186
    ///the predecessor map.
1191 1187
    ///
1192
    ///\ref named-func-param "Named parameter"
1193
    ///for setting PredMap object.
1188
    ///\ref named-templ-param "Named parameter" function for setting
1189
    ///the map that stores the predecessor arcs of the nodes.
1194 1190
    template<class T>
1195 1191
    DijkstraWizard<SetPredMapBase<T> > predMap(const T &t)
1196 1192
    {
... ...
@@ -1204,11 +1200,13 @@
1204 1200
      static DistMap *createDistMap(const Digraph &) { return 0; };
1205 1201
      SetDistMapBase(const TR &b) : TR(b) {}
1206 1202
    };
1207
    ///\brief \ref named-func-param "Named parameter"
1208
    ///for setting DistMap object.
1203

	
1204
    ///\brief \ref named-templ-param "Named parameter" for setting
1205
    ///the distance map.
1209 1206
    ///
1210
    ///\ref named-func-param "Named parameter"
1211
    ///for setting DistMap object.
1207
    ///\ref named-templ-param "Named parameter" function for setting
1208
    ///the map that stores the distances of the nodes calculated
1209
    ///by the algorithm.
1212 1210
    template<class T>
1213 1211
    DijkstraWizard<SetDistMapBase<T> > distMap(const T &t)
1214 1212
    {
... ...
@@ -1222,11 +1220,12 @@
1222 1220
      static ProcessedMap *createProcessedMap(const Digraph &) { return 0; };
1223 1221
      SetProcessedMapBase(const TR &b) : TR(b) {}
1224 1222
    };
1225
    ///\brief \ref named-func-param "Named parameter"
1226
    ///for setting ProcessedMap object.
1223

	
1224
    ///\brief \ref named-func-param "Named parameter" for setting
1225
    ///the processed map.
1227 1226
    ///
1228
    /// \ref named-func-param "Named parameter"
1229
    ///for setting ProcessedMap object.
1227
    ///\ref named-templ-param "Named parameter" function for setting
1228
    ///the map that indicates which nodes are processed.
1230 1229
    template<class T>
1231 1230
    DijkstraWizard<SetProcessedMapBase<T> > processedMap(const T &t)
1232 1231
    {
... ...
@@ -1239,6 +1238,7 @@
1239 1238
      typedef T Path;
1240 1239
      SetPathBase(const TR &b) : TR(b) {}
1241 1240
    };
1241

	
1242 1242
    ///\brief \ref named-func-param "Named parameter"
1243 1243
    ///for getting the shortest path to the target node.
1244 1244
    ///
Ignore white space 6 line context
... ...
@@ -21,16 +21,9 @@
21 21

	
22 22
#include <iostream>
23 23

	
24
///\ingroup misc
24
///\ingroup geomdat
25 25
///\file
26 26
///\brief A simple two dimensional vector and a bounding box implementation
27
///
28
/// The class \ref lemon::dim2::Point "dim2::Point" implements
29
/// a two dimensional vector with the usual operations.
30
///
31
/// The class \ref lemon::dim2::Box "dim2::Box" can be used to determine
32
/// the rectangular bounding box of a set of
33
/// \ref lemon::dim2::Point "dim2::Point"'s.
34 27

	
35 28
namespace lemon {
36 29

	
... ...
@@ -40,7 +33,7 @@
40 33
  ///tools for handling two dimensional coordinates
41 34
  namespace dim2 {
42 35

	
43
  /// \addtogroup misc
36
  /// \addtogroup geomdat
44 37
  /// @{
45 38

	
46 39
  /// Two dimensional vector (plain vector)
Ignore white space 6 line context
... ...
@@ -359,10 +359,10 @@
359 359
    /// This example counts the nodes in the minimum cut separating \c s from
360 360
    /// \c t.
361 361
    /// \code
362
    /// GomoruHu<Graph> gom(g, capacities);
362
    /// GomoryHu<Graph> gom(g, capacities);
363 363
    /// gom.run();
364 364
    /// int cnt=0;
365
    /// for(GomoruHu<Graph>::MinCutNodeIt n(gom,s,t); n!=INVALID; ++n) ++cnt;
365
    /// for(GomoryHu<Graph>::MinCutNodeIt n(gom,s,t); n!=INVALID; ++n) ++cnt;
366 366
    /// \endcode
367 367
    class MinCutNodeIt
368 368
    {
... ...
@@ -456,10 +456,10 @@
456 456
    /// This example computes the value of the minimum cut separating \c s from
457 457
    /// \c t.
458 458
    /// \code
459
    /// GomoruHu<Graph> gom(g, capacities);
459
    /// GomoryHu<Graph> gom(g, capacities);
460 460
    /// gom.run();
461 461
    /// int value=0;
462
    /// for(GomoruHu<Graph>::MinCutEdgeIt e(gom,s,t); e!=INVALID; ++e)
462
    /// for(GomoryHu<Graph>::MinCutEdgeIt e(gom,s,t); e!=INVALID; ++e)
463 463
    ///   value+=capacities[e];
464 464
    /// \endcode
465 465
    /// The result will be the same as the value returned by
Ignore white space 6 line context
... ...
@@ -56,7 +56,7 @@
56 56
  /// its type definitions, or if you have to provide a writable map,
57 57
  /// but data written to it is not required (i.e. it will be sent to
58 58
  /// <tt>/dev/null</tt>).
59
  /// It conforms the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
59
  /// It conforms to the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
60 60
  ///
61 61
  /// \sa ConstMap
62 62
  template<typename K, typename V>
... ...
@@ -89,7 +89,7 @@
89 89
  /// value to each key.
90 90
  ///
91 91
  /// In other aspects it is equivalent to \c NullMap.
92
  /// So it conforms the \ref concepts::ReadWriteMap "ReadWriteMap"
92
  /// So it conforms to the \ref concepts::ReadWriteMap "ReadWriteMap"
93 93
  /// concept, but it absorbs the data written to it.
94 94
  ///
95 95
  /// The simplest way of using this map is through the constMap()
... ...
@@ -158,7 +158,7 @@
158 158
  /// value to each key.
159 159
  ///
160 160
  /// In other aspects it is equivalent to \c NullMap.
161
  /// So it conforms the \ref concepts::ReadWriteMap "ReadWriteMap"
161
  /// So it conforms to the \ref concepts::ReadWriteMap "ReadWriteMap"
162 162
  /// concept, but it absorbs the data written to it.
163 163
  ///
164 164
  /// The simplest way of using this map is through the constMap()
... ...
@@ -232,7 +232,7 @@
232 232
  /// values to integer keys from the range <tt>[0..size-1]</tt>.
233 233
  /// It can be used with some data structures, for example
234 234
  /// \c UnionFind, \c BinHeap, when the used items are small
235
  /// integers. This map conforms the \ref concepts::ReferenceMap
235
  /// integers. This map conforms to the \ref concepts::ReferenceMap
236 236
  /// "ReferenceMap" concept.
237 237
  ///
238 238
  /// The simplest way of using this map is through the rangeMap()
... ...
@@ -340,7 +340,7 @@
340 340
  /// that you can specify a default value for the keys that are not
341 341
  /// stored actually. This value can be different from the default
342 342
  /// contructed value (i.e. \c %Value()).
343
  /// This type conforms the \ref concepts::ReferenceMap "ReferenceMap"
343
  /// This type conforms to the \ref concepts::ReferenceMap "ReferenceMap"
344 344
  /// concept.
345 345
  ///
346 346
  /// This map is useful if a default value should be assigned to most of
... ...
@@ -706,7 +706,7 @@
706 706
  /// "readable map" to another type using the default conversion.
707 707
  /// The \c Key type of it is inherited from \c M and the \c Value
708 708
  /// type is \c V.
709
  /// This type conforms the \ref concepts::ReadMap "ReadMap" concept.
709
  /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept.
710 710
  ///
711 711
  /// The simplest way of using this map is through the convertMap()
712 712
  /// function.
... ...
@@ -1789,11 +1789,11 @@
1789 1789
  /// order of Dfs algorithm, as the following examples show.
1790 1790
  /// \code
1791 1791
  ///   std::vector<Node> v;
1792
  ///   dfs(g,s).processedMap(loggerBoolMap(std::back_inserter(v))).run();
1792
  ///   dfs(g).processedMap(loggerBoolMap(std::back_inserter(v))).run(s);
1793 1793
  /// \endcode
1794 1794
  /// \code
1795 1795
  ///   std::vector<Node> v(countNodes(g));
1796
  ///   dfs(g,s).processedMap(loggerBoolMap(v.begin())).run();
1796
  ///   dfs(g).processedMap(loggerBoolMap(v.begin())).run(s);
1797 1797
  /// \endcode
1798 1798
  ///
1799 1799
  /// \note The container of the iterator must contain enough space
... ...
@@ -1825,7 +1825,7 @@
1825 1825
  /// Using this map you get access (i.e. can read) the inner id values of
1826 1826
  /// the items stored in the graph, which is returned by the \c id()
1827 1827
  /// function of the graph. This map can be inverted with its member
1828
  /// class \c InverseMap or with the \c operator() member.
1828
  /// class \c InverseMap or with the \c operator()() member.
1829 1829
  ///
1830 1830
  /// \tparam GR The graph type.
1831 1831
  /// \tparam K The key type of the map (\c GR::Node, \c GR::Arc or
... ...
@@ -1865,9 +1865,11 @@
1865 1865

	
1866 1866
  public:
1867 1867

	
1868
    /// \brief This class represents the inverse of its owner (IdMap).
1868
    /// \brief The inverse map type of IdMap.
1869 1869
    ///
1870
    /// This class represents the inverse of its owner (IdMap).
1870
    /// The inverse map type of IdMap. The subscript operator gives back
1871
    /// an item by its id.
1872
    /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept.
1871 1873
    /// \see inverse()
1872 1874
    class InverseMap {
1873 1875
    public:
... ...
@@ -1882,9 +1884,9 @@
1882 1884
      /// Constructor for creating an id-to-item map.
1883 1885
      explicit InverseMap(const IdMap& map) : _graph(map._graph) {}
1884 1886

	
1885
      /// \brief Gives back the given item from its id.
1887
      /// \brief Gives back an item by its id.
1886 1888
      ///
1887
      /// Gives back the given item from its id.
1889
      /// Gives back an item by its id.
1888 1890
      Item operator[](int id) const { return _graph->fromId(id, Item());}
1889 1891

	
1890 1892
    private:
... ...
@@ -1897,14 +1899,31 @@
1897 1899
    InverseMap inverse() const { return InverseMap(*_graph);}
1898 1900
  };
1899 1901

	
1902
  /// \brief Returns an \c IdMap class.
1903
  ///
1904
  /// This function just returns an \c IdMap class.
1905
  /// \relates IdMap
1906
  template <typename K, typename GR>
1907
  inline IdMap<GR, K> idMap(const GR& graph) {
1908
    return IdMap<GR, K>(graph);
1909
  }
1900 1910

	
1901 1911
  /// \brief General cross reference graph map type.
1902 1912

	
1903 1913
  /// This class provides simple invertable graph maps.
1904 1914
  /// It wraps a standard graph map (\c NodeMap, \c ArcMap or \c EdgeMap)
1905 1915
  /// and if a key is set to a new value, then stores it in the inverse map.
1906
  /// The values of the map can be accessed
1907
  /// with stl compatible forward iterator.
1916
  /// The graph items can be accessed by their values either using
1917
  /// \c InverseMap or \c operator()(), and the values of the map can be
1918
  /// accessed with an STL compatible forward iterator (\c ValueIt).
1919
  /// 
1920
  /// This map is intended to be used when all associated values are
1921
  /// different (the map is actually invertable) or there are only a few
1922
  /// items with the same value.
1923
  /// Otherwise consider to use \c IterableValueMap, which is more 
1924
  /// suitable and more efficient for such cases. It provides iterators
1925
  /// to traverse the items with the same associated value, however
1926
  /// it does not have \c InverseMap.
1908 1927
  ///
1909 1928
  /// This type is not reference map, so it cannot be modified with
1910 1929
  /// the subscript operator.
... ...
@@ -1945,56 +1964,66 @@
1945 1964

	
1946 1965
    /// \brief Forward iterator for values.
1947 1966
    ///
1948
    /// This iterator is an stl compatible forward
1967
    /// This iterator is an STL compatible forward
1949 1968
    /// iterator on the values of the map. The values can
1950 1969
    /// be accessed in the <tt>[beginValue, endValue)</tt> range.
1951 1970
    /// They are considered with multiplicity, so each value is
1952 1971
    /// traversed for each item it is assigned to.
1953
    class ValueIterator
1972
    class ValueIt
1954 1973
      : public std::iterator<std::forward_iterator_tag, Value> {
1955 1974
      friend class CrossRefMap;
1956 1975
    private:
1957
      ValueIterator(typename Container::const_iterator _it)
1976
      ValueIt(typename Container::const_iterator _it)
1958 1977
        : it(_it) {}
1959 1978
    public:
1960 1979

	
1961
      ValueIterator() {}
1962

	
1963
      ValueIterator& operator++() { ++it; return *this; }
1964
      ValueIterator operator++(int) {
1965
        ValueIterator tmp(*this);
1980
      /// Constructor
1981
      ValueIt() {}
1982

	
1983
      /// \e
1984
      ValueIt& operator++() { ++it; return *this; }
1985
      /// \e
1986
      ValueIt operator++(int) {
1987
        ValueIt tmp(*this);
1966 1988
        operator++();
1967 1989
        return tmp;
1968 1990
      }
1969 1991

	
1992
      /// \e
1970 1993
      const Value& operator*() const { return it->first; }
1994
      /// \e
1971 1995
      const Value* operator->() const { return &(it->first); }
1972 1996

	
1973
      bool operator==(ValueIterator jt) const { return it == jt.it; }
1974
      bool operator!=(ValueIterator jt) const { return it != jt.it; }
1997
      /// \e
1998
      bool operator==(ValueIt jt) const { return it == jt.it; }
1999
      /// \e
2000
      bool operator!=(ValueIt jt) const { return it != jt.it; }
1975 2001

	
1976 2002
    private:
1977 2003
      typename Container::const_iterator it;
1978 2004
    };
2005
    
2006
    /// Alias for \c ValueIt
2007
    typedef ValueIt ValueIterator;
1979 2008

	
1980 2009
    /// \brief Returns an iterator to the first value.
1981 2010
    ///
1982
    /// Returns an stl compatible iterator to the
2011
    /// Returns an STL compatible iterator to the
1983 2012
    /// first value of the map. The values of the
1984 2013
    /// map can be accessed in the <tt>[beginValue, endValue)</tt>
1985 2014
    /// range.
1986
    ValueIterator beginValue() const {
1987
      return ValueIterator(_inv_map.begin());
2015
    ValueIt beginValue() const {
2016
      return ValueIt(_inv_map.begin());
1988 2017
    }
1989 2018

	
1990 2019
    /// \brief Returns an iterator after the last value.
1991 2020
    ///
1992
    /// Returns an stl compatible iterator after the
2021
    /// Returns an STL compatible iterator after the
1993 2022
    /// last value of the map. The values of the
1994 2023
    /// map can be accessed in the <tt>[beginValue, endValue)</tt>
1995 2024
    /// range.
1996
    ValueIterator endValue() const {
1997
      return ValueIterator(_inv_map.end());
2025
    ValueIt endValue() const {
2026
      return ValueIt(_inv_map.end());
1998 2027
    }
1999 2028

	
2000 2029
    /// \brief Sets the value associated with the given key.
... ...
@@ -2032,6 +2061,14 @@
2032 2061
      typename Container::const_iterator it = _inv_map.find(val);
2033 2062
      return it != _inv_map.end() ? it->second : INVALID;
2034 2063
    }
2064
    
2065
    /// \brief Returns the number of items with the given value.
2066
    ///
2067
    /// This function returns the number of items with the given value
2068
    /// associated with it.
2069
    int count(const Value &val) const {
2070
      return _inv_map.count(val);
2071
    }
2035 2072

	
2036 2073
  protected:
2037 2074

	
... ...
@@ -2082,10 +2119,12 @@
2082 2119

	
2083 2120
  public:
2084 2121

	
2085
    /// \brief The inverse map type.
2122
    /// \brief The inverse map type of CrossRefMap.
2086 2123
    ///
2087
    /// The inverse of this map. The subscript operator of the map
2088
    /// gives back the item that was last assigned to the value.
2124
    /// The inverse map type of CrossRefMap. The subscript operator gives
2125
    /// back an item by its value.
2126
    /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept.
2127
    /// \see inverse()
2089 2128
    class InverseMap {
2090 2129
    public:
2091 2130
      /// \brief Constructor
... ...
@@ -2112,20 +2151,20 @@
2112 2151
      const CrossRefMap& _inverted;
2113 2152
    };
2114 2153

	
2115
    /// \brief It gives back the read-only inverse map.
2154
    /// \brief Gives back the inverse of the map.
2116 2155
    ///
2117
    /// It gives back the read-only inverse map.
2156
    /// Gives back the inverse of the CrossRefMap.
2118 2157
    InverseMap inverse() const {
2119 2158
      return InverseMap(*this);
2120 2159
    }
2121 2160

	
2122 2161
  };
2123 2162

	
2124
  /// \brief Provides continuous and unique ID for the
2163
  /// \brief Provides continuous and unique id for the
2125 2164
  /// items of a graph.
2126 2165
  ///
2127 2166
  /// RangeIdMap provides a unique and continuous
2128
  /// ID for each item of a given type (\c Node, \c Arc or
2167
  /// id for each item of a given type (\c Node, \c Arc or
2129 2168
  /// \c Edge) in a graph. This id is
2130 2169
  ///  - \b unique: different items get different ids,
2131 2170
  ///  - \b continuous: the range of the ids is the set of integers
... ...
@@ -2136,7 +2175,7 @@
2136 2175
  /// Thus this id is not (necessarily) the same as what can get using
2137 2176
  /// the \c id() function of the graph or \ref IdMap.
2138 2177
  /// This map can be inverted with its member class \c InverseMap,
2139
  /// or with the \c operator() member.
2178
  /// or with the \c operator()() member.
2140 2179
  ///
2141 2180
  /// \tparam GR The graph type.
2142 2181
  /// \tparam K The key type of the map (\c GR::Node, \c GR::Arc or
... ...
@@ -2264,16 +2303,16 @@
2264 2303
      _inv_map[pi] = q;
2265 2304
    }
2266 2305

	
2267
    /// \brief Gives back the \e RangeId of the item
2306
    /// \brief Gives back the \e range \e id of the item
2268 2307
    ///
2269
    /// Gives back the \e RangeId of the item.
2308
    /// Gives back the \e range \e id of the item.
2270 2309
    int operator[](const Item& item) const {
2271 2310
      return Map::operator[](item);
2272 2311
    }
2273 2312

	
2274
    /// \brief Gives back the item belonging to a \e RangeId
2313
    /// \brief Gives back the item belonging to a \e range \e id
2275 2314
    ///
2276
    /// Gives back the item belonging to a \e RangeId.
2315
    /// Gives back the item belonging to the given \e range \e id.
2277 2316
    Item operator()(int id) const {
2278 2317
      return _inv_map[id];
2279 2318
    }
... ...
@@ -2287,7 +2326,9 @@
2287 2326

	
2288 2327
    /// \brief The inverse map type of RangeIdMap.
2289 2328
    ///
2290
    /// The inverse map type of RangeIdMap.
2329
    /// The inverse map type of RangeIdMap. The subscript operator gives
2330
    /// back an item by its \e range \e id.
2331
    /// This type conforms to the \ref concepts::ReadMap "ReadMap" concept.
2291 2332
    class InverseMap {
2292 2333
    public:
2293 2334
      /// \brief Constructor
... ...
@@ -2305,7 +2346,7 @@
2305 2346
      /// \brief Subscript operator.
2306 2347
      ///
2307 2348
      /// Subscript operator. It gives back the item
2308
      /// that the descriptor currently belongs to.
2349
      /// that the given \e range \e id currently belongs to.
2309 2350
      Value operator[](const Key& key) const {
2310 2351
        return _inverted(key);
2311 2352
      }
... ...
@@ -2323,18 +2364,27 @@
2323 2364

	
2324 2365
    /// \brief Gives back the inverse of the map.
2325 2366
    ///
2326
    /// Gives back the inverse of the map.
2367
    /// Gives back the inverse of the RangeIdMap.
2327 2368
    const InverseMap inverse() const {
2328 2369
      return InverseMap(*this);
2329 2370
    }
2330 2371
  };
2331 2372

	
2373
  /// \brief Returns a \c RangeIdMap class.
2374
  ///
2375
  /// This function just returns an \c RangeIdMap class.
2376
  /// \relates RangeIdMap
2377
  template <typename K, typename GR>
2378
  inline RangeIdMap<GR, K> rangeIdMap(const GR& graph) {
2379
    return RangeIdMap<GR, K>(graph);
2380
  }
2381
  
2332 2382
  /// \brief Dynamic iterable \c bool map.
2333 2383
  ///
2334 2384
  /// This class provides a special graph map type which can store a
2335 2385
  /// \c bool value for graph items (\c Node, \c Arc or \c Edge).
2336 2386
  /// For both \c true and \c false values it is possible to iterate on
2337
  /// the keys.
2387
  /// the keys mapped to the value.
2338 2388
  ///
2339 2389
  /// This type is a reference map, so it can be modified with the
2340 2390
  /// subscript operator.
... ...
@@ -2703,6 +2753,11 @@
2703 2753
  /// For each non-negative value it is possible to iterate on the keys
2704 2754
  /// mapped to the value.
2705 2755
  ///
2756
  /// This map is intended to be used with small integer values, for which
2757
  /// it is efficient, and supports iteration only for non-negative values.
2758
  /// If you need large values and/or iteration for negative integers,
2759
  /// consider to use \ref IterableValueMap instead.
2760
  ///
2706 2761
  /// This type is a reference map, so it can be modified with the
2707 2762
  /// subscript operator.
2708 2763
  ///
... ...
@@ -2984,15 +3039,17 @@
2984 3039

	
2985 3040
  /// \brief Dynamic iterable map for comparable values.
2986 3041
  ///
2987
  /// This class provides a special graph map type which can store an
3042
  /// This class provides a special graph map type which can store a
2988 3043
  /// comparable value for graph items (\c Node, \c Arc or \c Edge).
2989 3044
  /// For each value it is possible to iterate on the keys mapped to
2990
  /// the value.
3045
  /// the value (\c ItemIt), and the values of the map can be accessed
3046
  /// with an STL compatible forward iterator (\c ValueIt).
3047
  /// The map stores a linked list for each value, which contains
3048
  /// the items mapped to the value, and the used values are stored
3049
  /// in balanced binary tree (\c std::map).
2991 3050
  ///
2992
  /// The map stores for each value a linked list with
2993
  /// the items which mapped to the value, and the values are stored
2994
  /// in balanced binary tree. The values of the map can be accessed
2995
  /// with stl compatible forward iterator.
3051
  /// \ref IterableBoolMap and \ref IterableIntMap are similar classes
3052
  /// specialized for \c bool and \c int values, respectively.
2996 3053
  ///
2997 3054
  /// This type is not reference map, so it cannot be modified with
2998 3055
  /// the subscript operator.
... ...
@@ -3071,31 +3128,38 @@
3071 3128

	
3072 3129
    /// \brief Forward iterator for values.
3073 3130
    ///
3074
    /// This iterator is an stl compatible forward
3131
    /// This iterator is an STL compatible forward
3075 3132
    /// iterator on the values of the map. The values can
3076 3133
    /// be accessed in the <tt>[beginValue, endValue)</tt> range.
3077
    class ValueIterator
3134
    class ValueIt
3078 3135
      : public std::iterator<std::forward_iterator_tag, Value> {
3079 3136
      friend class IterableValueMap;
3080 3137
    private:
3081
      ValueIterator(typename std::map<Value, Key>::const_iterator _it)
3138
      ValueIt(typename std::map<Value, Key>::const_iterator _it)
3082 3139
        : it(_it) {}
3083 3140
    public:
3084 3141

	
3085
      ValueIterator() {}
3086

	
3087
      ValueIterator& operator++() { ++it; return *this; }
3088
      ValueIterator operator++(int) {
3089
        ValueIterator tmp(*this);
3142
      /// Constructor
3143
      ValueIt() {}
3144

	
3145
      /// \e
3146
      ValueIt& operator++() { ++it; return *this; }
3147
      /// \e
3148
      ValueIt operator++(int) {
3149
        ValueIt tmp(*this);
3090 3150
        operator++();
3091 3151
        return tmp;
3092 3152
      }
3093 3153

	
3154
      /// \e
3094 3155
      const Value& operator*() const { return it->first; }
3156
      /// \e
3095 3157
      const Value* operator->() const { return &(it->first); }
3096 3158

	
3097
      bool operator==(ValueIterator jt) const { return it == jt.it; }
3098
      bool operator!=(ValueIterator jt) const { return it != jt.it; }
3159
      /// \e
3160
      bool operator==(ValueIt jt) const { return it == jt.it; }
3161
      /// \e
3162
      bool operator!=(ValueIt jt) const { return it != jt.it; }
3099 3163

	
3100 3164
    private:
3101 3165
      typename std::map<Value, Key>::const_iterator it;
... ...
@@ -3103,22 +3167,22 @@
3103 3167

	
3104 3168
    /// \brief Returns an iterator to the first value.
3105 3169
    ///
3106
    /// Returns an stl compatible iterator to the
3170
    /// Returns an STL compatible iterator to the
3107 3171
    /// first value of the map. The values of the
3108 3172
    /// map can be accessed in the <tt>[beginValue, endValue)</tt>
3109 3173
    /// range.
3110
    ValueIterator beginValue() const {
3111
      return ValueIterator(_first.begin());
3174
    ValueIt beginValue() const {
3175
      return ValueIt(_first.begin());
3112 3176
    }
3113 3177

	
3114 3178
    /// \brief Returns an iterator after the last value.
3115 3179
    ///
3116
    /// Returns an stl compatible iterator after the
3180
    /// Returns an STL compatible iterator after the
3117 3181
    /// last value of the map. The values of the
3118 3182
    /// map can be accessed in the <tt>[beginValue, endValue)</tt>
3119 3183
    /// range.
3120
    ValueIterator endValue() const {
3121
      return ValueIterator(_first.end());
3184
    ValueIt endValue() const {
3185
      return ValueIt(_first.end());
3122 3186
    }
3123 3187

	
3124 3188
    /// \brief Set operation of the map.
... ...
@@ -3236,9 +3300,9 @@
3236 3300
  class SourceMap {
3237 3301
  public:
3238 3302

	
3239
    ///\e
3303
    /// The key type (the \c Arc type of the digraph).
3240 3304
    typedef typename GR::Arc Key;
3241
    ///\e
3305
    /// The value type (the \c Node type of the digraph).
3242 3306
    typedef typename GR::Node Value;
3243 3307

	
3244 3308
    /// \brief Constructor
... ...
@@ -3277,9 +3341,9 @@
3277 3341
  class TargetMap {
3278 3342
  public:
3279 3343

	
3280
    ///\e
3344
    /// The key type (the \c Arc type of the digraph).
3281 3345
    typedef typename GR::Arc Key;
3282
    ///\e
3346
    /// The value type (the \c Node type of the digraph).
3283 3347
    typedef typename GR::Node Value;
3284 3348

	
3285 3349
    /// \brief Constructor
... ...
@@ -3319,8 +3383,10 @@
3319 3383
  class ForwardMap {
3320 3384
  public:
3321 3385

	
3386
    /// The key type (the \c Edge type of the digraph).
3387
    typedef typename GR::Edge Key;
3388
    /// The value type (the \c Arc type of the digraph).
3322 3389
    typedef typename GR::Arc Value;
3323
    typedef typename GR::Edge Key;
3324 3390

	
3325 3391
    /// \brief Constructor
3326 3392
    ///
... ...
@@ -3359,8 +3425,10 @@
3359 3425
  class BackwardMap {
3360 3426
  public:
3361 3427

	
3428
    /// The key type (the \c Edge type of the digraph).
3429
    typedef typename GR::Edge Key;
3430
    /// The value type (the \c Arc type of the digraph).
3362 3431
    typedef typename GR::Arc Value;
3363
    typedef typename GR::Edge Key;
3364 3432

	
3365 3433
    /// \brief Constructor
3366 3434
    ///
Ignore white space 6 line context
... ...
@@ -488,8 +488,8 @@
488 488
    /// \name Execution Control
489 489
    /// The simplest way to execute the algorithm is to use
490 490
    /// one of the member functions called \c run(...). \n
491
    /// If you need more control on the execution,
492
    /// first you must call \ref init(), then you can add several
491
    /// If you need better control on the execution,
492
    /// you have to call \ref init() first, then you can add several
493 493
    /// source nodes with \ref addSource().
494 494
    /// Finally \ref start() will perform the arborescence
495 495
    /// computation.
Ignore white space 6 line context
... ...
@@ -52,7 +52,11 @@
52 52
    ///
53 53
    /// The type of the map that stores the flow values.
54 54
    /// It must meet the \ref concepts::ReadWriteMap "ReadWriteMap" concept.
55
#ifdef DOXYGEN
56
    typedef GR::ArcMap<Value> FlowMap;
57
#else
55 58
    typedef typename Digraph::template ArcMap<Value> FlowMap;
59
#endif
56 60

	
57 61
    /// \brief Instantiates a FlowMap.
58 62
    ///
... ...
@@ -67,9 +71,12 @@
67 71
    ///
68 72
    /// The elevator type used by Preflow algorithm.
69 73
    ///
70
    /// \sa Elevator
71
    /// \sa LinkedElevator
72
    typedef LinkedElevator<Digraph, typename Digraph::Node> Elevator;
74
    /// \sa Elevator, LinkedElevator
75
#ifdef DOXYGEN
76
    typedef lemon::Elevator<GR, GR::Node> Elevator;
77
#else
78
    typedef lemon::Elevator<Digraph, typename Digraph::Node> Elevator;
79
#endif
73 80

	
74 81
    /// \brief Instantiates an Elevator.
75 82
    ///
... ...
@@ -391,8 +398,8 @@
391 398
    /// \name Execution Control
392 399
    /// The simplest way to execute the preflow algorithm is to use
393 400
    /// \ref run() or \ref runMinCut().\n
394
    /// If you need more control on the initial solution or the execution,
395
    /// first you have to call one of the \ref init() functions, then
401
    /// If you need better control on the initial solution or the execution,
402
    /// you have to call one of the \ref init() functions first, then
396 403
    /// \ref startFirstPhase() and if you need it \ref startSecondPhase().
397 404

	
398 405
    ///@{
Ignore white space 6 line context
... ...
@@ -22,7 +22,10 @@
22 22
#include <lemon/concept_check.h>
23 23
#include <lemon/concepts/maps.h>
24 24
#include <lemon/maps.h>
25
#include <lemon/list_graph.h>
25 26
#include <lemon/smart_graph.h>
27
#include <lemon/adaptors.h>
28
#include <lemon/dfs.h>
26 29

	
27 30
#include "test_tools.h"
28 31

	
... ...
@@ -61,6 +64,12 @@
61 64
typedef ReadWriteMap<A, bool> BoolWriteMap;
62 65
typedef ReferenceMap<A, bool, bool&, const bool&> BoolRefMap;
63 66

	
67
template<typename Map1, typename Map2, typename ItemIt>
68
void compareMap(const Map1& map1, const Map2& map2, ItemIt it) {
69
  for (; it != INVALID; ++it)
70
    check(map1[it] == map2[it], "The maps are not equal");
71
}
72

	
64 73
int main()
65 74
{
66 75
  // Map concepts
... ...
@@ -329,6 +338,10 @@
329 338
  // LoggerBoolMap
330 339
  {
331 340
    typedef std::vector<int> vec;
341
    checkConcept<WriteMap<int, bool>, LoggerBoolMap<vec::iterator> >();
342
    checkConcept<WriteMap<int, bool>,
343
                 LoggerBoolMap<std::back_insert_iterator<vec> > >();
344

	
332 345
    vec v1;
333 346
    vec v2(10);
334 347
    LoggerBoolMap<std::back_insert_iterator<vec> >
... ...
@@ -348,6 +361,222 @@
348 361
    for ( LoggerBoolMap<vec::iterator>::Iterator it = map2.begin();
349 362
          it != map2.end(); ++it )
350 363
      check(v1[i++] == *it, "Something is wrong with LoggerBoolMap");
364
    
365
    typedef ListDigraph Graph;
366
    DIGRAPH_TYPEDEFS(Graph);
367
    Graph gr;
368

	
369
    Node n0 = gr.addNode();
370
    Node n1 = gr.addNode();
371
    Node n2 = gr.addNode();
372
    Node n3 = gr.addNode();
373
    
374
    gr.addArc(n3, n0);
375
    gr.addArc(n3, n2);
376
    gr.addArc(n0, n2);
377
    gr.addArc(n2, n1);
378
    gr.addArc(n0, n1);
379
    
380
    {
381
      std::vector<Node> v;
382
      dfs(gr).processedMap(loggerBoolMap(std::back_inserter(v))).run();
383

	
384
      check(v.size()==4 && v[0]==n1 && v[1]==n2 && v[2]==n0 && v[3]==n3,
385
            "Something is wrong with LoggerBoolMap");
386
    }
387
    {
388
      std::vector<Node> v(countNodes(gr));
389
      dfs(gr).processedMap(loggerBoolMap(v.begin())).run();
390
      
391
      check(v.size()==4 && v[0]==n1 && v[1]==n2 && v[2]==n0 && v[3]==n3,
392
            "Something is wrong with LoggerBoolMap");
393
    }
394
  }
395
  
396
  // IdMap, RangeIdMap
397
  {
398
    typedef ListDigraph Graph;
399
    DIGRAPH_TYPEDEFS(Graph);
400

	
401
    checkConcept<ReadMap<Node, int>, IdMap<Graph, Node> >();
402
    checkConcept<ReadMap<Arc, int>, IdMap<Graph, Arc> >();
403
    checkConcept<ReadMap<Node, int>, RangeIdMap<Graph, Node> >();
404
    checkConcept<ReadMap<Arc, int>, RangeIdMap<Graph, Arc> >();
405
    
406
    Graph gr;
407
    IdMap<Graph, Node> nmap(gr);
408
    IdMap<Graph, Arc> amap(gr);
409
    RangeIdMap<Graph, Node> nrmap(gr);
410
    RangeIdMap<Graph, Arc> armap(gr);
411
    
412
    Node n0 = gr.addNode();
413
    Node n1 = gr.addNode();
414
    Node n2 = gr.addNode();
415
    
416
    Arc a0 = gr.addArc(n0, n1);
417
    Arc a1 = gr.addArc(n0, n2);
418
    Arc a2 = gr.addArc(n2, n1);
419
    Arc a3 = gr.addArc(n2, n0);
420
    
421
    check(nmap[n0] == gr.id(n0) && nmap(gr.id(n0)) == n0, "Wrong IdMap");
422
    check(nmap[n1] == gr.id(n1) && nmap(gr.id(n1)) == n1, "Wrong IdMap");
423
    check(nmap[n2] == gr.id(n2) && nmap(gr.id(n2)) == n2, "Wrong IdMap");
424

	
425
    check(amap[a0] == gr.id(a0) && amap(gr.id(a0)) == a0, "Wrong IdMap");
426
    check(amap[a1] == gr.id(a1) && amap(gr.id(a1)) == a1, "Wrong IdMap");
427
    check(amap[a2] == gr.id(a2) && amap(gr.id(a2)) == a2, "Wrong IdMap");
428
    check(amap[a3] == gr.id(a3) && amap(gr.id(a3)) == a3, "Wrong IdMap");
429

	
430
    check(nmap.inverse()[gr.id(n0)] == n0, "Wrong IdMap::InverseMap");
431
    check(amap.inverse()[gr.id(a0)] == a0, "Wrong IdMap::InverseMap");
432
    
433
    check(nrmap.size() == 3 && armap.size() == 4,
434
          "Wrong RangeIdMap::size()");
435

	
436
    check(nrmap[n0] == 0 && nrmap(0) == n0, "Wrong RangeIdMap");
437
    check(nrmap[n1] == 1 && nrmap(1) == n1, "Wrong RangeIdMap");
438
    check(nrmap[n2] == 2 && nrmap(2) == n2, "Wrong RangeIdMap");
439
    
440
    check(armap[a0] == 0 && armap(0) == a0, "Wrong RangeIdMap");
441
    check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
442
    check(armap[a2] == 2 && armap(2) == a2, "Wrong RangeIdMap");
443
    check(armap[a3] == 3 && armap(3) == a3, "Wrong RangeIdMap");
444

	
445
    check(nrmap.inverse()[0] == n0, "Wrong RangeIdMap::InverseMap");
446
    check(armap.inverse()[0] == a0, "Wrong RangeIdMap::InverseMap");
447
    
448
    gr.erase(n1);
449
    
450
    if (nrmap[n0] == 1) nrmap.swap(n0, n2);
451
    nrmap.swap(n2, n0);
452
    if (armap[a1] == 1) armap.swap(a1, a3);
453
    armap.swap(a3, a1);
454
    
455
    check(nrmap.size() == 2 && armap.size() == 2,
456
          "Wrong RangeIdMap::size()");
457

	
458
    check(nrmap[n0] == 1 && nrmap(1) == n0, "Wrong RangeIdMap");
459
    check(nrmap[n2] == 0 && nrmap(0) == n2, "Wrong RangeIdMap");
460
    
461
    check(armap[a1] == 1 && armap(1) == a1, "Wrong RangeIdMap");
462
    check(armap[a3] == 0 && armap(0) == a3, "Wrong RangeIdMap");
463

	
464
    check(nrmap.inverse()[0] == n2, "Wrong RangeIdMap::InverseMap");
465
    check(armap.inverse()[0] == a3, "Wrong RangeIdMap::InverseMap");
466
  }
467
  
468
  // SourceMap, TargetMap, ForwardMap, BackwardMap, InDegMap, OutDegMap
469
  {
470
    typedef ListGraph Graph;
471
    GRAPH_TYPEDEFS(Graph);
472
    
473
    checkConcept<ReadMap<Arc, Node>, SourceMap<Graph> >();
474
    checkConcept<ReadMap<Arc, Node>, TargetMap<Graph> >();
475
    checkConcept<ReadMap<Edge, Arc>, ForwardMap<Graph> >();
476
    checkConcept<ReadMap<Edge, Arc>, BackwardMap<Graph> >();
477
    checkConcept<ReadMap<Node, int>, InDegMap<Graph> >();
478
    checkConcept<ReadMap<Node, int>, OutDegMap<Graph> >();
479

	
480
    Graph gr;
481
    Node n0 = gr.addNode();
482
    Node n1 = gr.addNode();
483
    Node n2 = gr.addNode();
484
    
485
    gr.addEdge(n0,n1);
486
    gr.addEdge(n1,n2);
487
    gr.addEdge(n0,n2);
488
    gr.addEdge(n2,n1);
489
    gr.addEdge(n1,n2);
490
    gr.addEdge(n0,n1);
491
    
492
    for (EdgeIt e(gr); e != INVALID; ++e) {
493
      check(forwardMap(gr)[e] == gr.direct(e, true), "Wrong ForwardMap");
494
      check(backwardMap(gr)[e] == gr.direct(e, false), "Wrong BackwardMap");
495
    }
496
    
497
    compareMap(sourceMap(orienter(gr, constMap<Edge, bool>(true))),
498
               targetMap(orienter(gr, constMap<Edge, bool>(false))),
499
               EdgeIt(gr));
500

	
501
    typedef Orienter<Graph, const ConstMap<Edge, bool> > Digraph;
502
    Digraph dgr(gr, constMap<Edge, bool>(true));
503
    OutDegMap<Digraph> odm(dgr);
504
    InDegMap<Digraph> idm(dgr);
505
    
506
    check(odm[n0] == 3 && odm[n1] == 2 && odm[n2] == 1, "Wrong OutDegMap");
507
    check(idm[n0] == 0 && idm[n1] == 3 && idm[n2] == 3, "Wrong InDegMap");
508
   
509
    gr.addEdge(n2, n0);
510

	
511
    check(odm[n0] == 3 && odm[n1] == 2 && odm[n2] == 2, "Wrong OutDegMap");
512
    check(idm[n0] == 1 && idm[n1] == 3 && idm[n2] == 3, "Wrong InDegMap");
513
  }
514
  
515
  // CrossRefMap
516
  {
517
    typedef ListDigraph Graph;
518
    DIGRAPH_TYPEDEFS(Graph);
519

	
520
    checkConcept<ReadWriteMap<Node, int>,
521
                 CrossRefMap<Graph, Node, int> >();
522
    checkConcept<ReadWriteMap<Node, bool>,
523
                 CrossRefMap<Graph, Node, bool> >();
524
    checkConcept<ReadWriteMap<Node, double>,
525
                 CrossRefMap<Graph, Node, double> >();
526
    
527
    Graph gr;
528
    typedef CrossRefMap<Graph, Node, char> CRMap;
529
    CRMap map(gr);
530
    
531
    Node n0 = gr.addNode();
532
    Node n1 = gr.addNode();
533
    Node n2 = gr.addNode();
534
    
535
    map.set(n0, 'A');
536
    map.set(n1, 'B');
537
    map.set(n2, 'C');
538
    
539
    check(map[n0] == 'A' && map('A') == n0 && map.inverse()['A'] == n0,
540
          "Wrong CrossRefMap");
541
    check(map[n1] == 'B' && map('B') == n1 && map.inverse()['B'] == n1,
542
          "Wrong CrossRefMap");
543
    check(map[n2] == 'C' && map('C') == n2 && map.inverse()['C'] == n2,
544
          "Wrong CrossRefMap");
545
    check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
546
          "Wrong CrossRefMap::count()");
547
    
548
    CRMap::ValueIt it = map.beginValue();
549
    check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
550
          it == map.endValue(), "Wrong value iterator");
551
    
552
    map.set(n2, 'A');
553

	
554
    check(map[n0] == 'A' && map[n1] == 'B' && map[n2] == 'A',
555
          "Wrong CrossRefMap");
556
    check(map('A') == n0 && map.inverse()['A'] == n0, "Wrong CrossRefMap");
557
    check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
558
    check(map('C') == INVALID && map.inverse()['C'] == INVALID,
559
          "Wrong CrossRefMap");
560
    check(map.count('A') == 2 && map.count('B') == 1 && map.count('C') == 0,
561
          "Wrong CrossRefMap::count()");
562

	
563
    it = map.beginValue();
564
    check(*it++ == 'A' && *it++ == 'A' && *it++ == 'B' &&
565
          it == map.endValue(), "Wrong value iterator");
566

	
567
    map.set(n0, 'C');
568

	
569
    check(map[n0] == 'C' && map[n1] == 'B' && map[n2] == 'A',
570
          "Wrong CrossRefMap");
571
    check(map('A') == n2 && map.inverse()['A'] == n2, "Wrong CrossRefMap");
572
    check(map('B') == n1 && map.inverse()['B'] == n1, "Wrong CrossRefMap");
573
    check(map('C') == n0 && map.inverse()['C'] == n0, "Wrong CrossRefMap");
574
    check(map.count('A') == 1 && map.count('B') == 1 && map.count('C') == 1,
575
          "Wrong CrossRefMap::count()");
576

	
577
    it = map.beginValue();
578
    check(*it++ == 'A' && *it++ == 'B' && *it++ == 'C' &&
579
          it == map.endValue(), "Wrong value iterator");
351 580
  }
352 581

	
353 582
  // CrossRefMap
... ...
@@ -546,10 +775,10 @@
546 775
      check(static_cast<Item>(it) == INVALID, "Wrong value");
547 776
    }
548 777

	
549
    for (Ivm::ValueIterator vit = map1.beginValue();
778
    for (Ivm::ValueIt vit = map1.beginValue();
550 779
         vit != map1.endValue(); ++vit) {
551 780
      check(map1[static_cast<Item>(Ivm::ItemIt(map1, *vit))] == *vit,
552
            "Wrong ValueIterator");
781
            "Wrong ValueIt");
553 782
    }
554 783

	
555 784
    for (int i = 0; i < num; ++i) {
0 comments (0 inline)