gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Doc improvements
0 2 0
default
2 files changed with 73 insertions and 72 deletions:
↑ Collapse diff ↑
Show white space 8 line context
... ...
@@ -42,16 +42,17 @@
42 42
  /// A structure for representing directed path in a digraph.
43 43
  /// \param Digraph The digraph type in which the path is.
44 44
  ///
45 45
  /// In a sense, the path can be treated as a list of arcs. The
46
  /// lemon path type stores just this list. As a consequence it
47
  /// cannot enumerate the nodes in the path and the zero length paths
48
  /// cannot store the source.
46
  /// lemon path type stores just this list. As a consequence, it
47
  /// cannot enumerate the nodes of the path and the source node of
48
  /// a zero length path is undefined.
49 49
  ///
50 50
  /// This implementation is a back and front insertable and erasable
51 51
  /// path type. It can be indexed in O(1) time. The front and back
52
  /// insertion and erasure is amortized O(1) time. The
53
  /// impelementation is based on two opposite organized vectors.
52
  /// insertion and erase is done in O(1) (amortized) time. The
53
  /// implementation uses two vectors for storing the front and back
54
  /// insertions.
54 55
  template <typename _Digraph>
55 56
  class Path {
56 57
  public:
57 58

	
... ...
@@ -64,19 +65,18 @@
64 65
    Path() {}
65 66

	
66 67
    /// \brief Template copy constructor
67 68
    ///
68
    /// This path can be initialized with any other path type. It just
69
    /// makes a copy of the given path.
69
    /// This constuctor initializes the path from any other path type.
70
    /// It simply makes a copy of the given path.
70 71
    template <typename CPath>
71 72
    Path(const CPath& cpath) {
72 73
      copyPath(*this, cpath);
73 74
    }
74 75

	
75 76
    /// \brief Template copy assignment
76 77
    ///
77
    /// This path can be initialized with any other path type. It just
78
    /// makes a copy of the given path.
78
    /// This operator makes a copy of a path of any other type.
79 79
    template <typename CPath>
80 80
    Path& operator=(const CPath& cpath) {
81 81
      copyPath(*this, cpath);
82 82
      return *this;
... ...
@@ -91,9 +91,9 @@
91 91
      /// \brief Default constructor
92 92
      ArcIt() {}
93 93
      /// \brief Invalid constructor
94 94
      ArcIt(Invalid) : path(0), idx(-1) {}
95
      /// \brief Initializate the constructor to the first arc of path
95
      /// \brief Initializate the iterator to the first arc of path
96 96
      ArcIt(const Path &_path) 
97 97
        : path(&_path), idx(_path.empty() ? -1 : 0) {}
98 98

	
99 99
    private:
... ...
@@ -128,30 +128,30 @@
128 128
    };
129 129

	
130 130
    /// \brief Length of the path.
131 131
    int length() const { return head.size() + tail.size(); }
132
    /// \brief Returns whether the path is empty.
132
    /// \brief Return whether the path is empty.
133 133
    bool empty() const { return head.empty() && tail.empty(); }
134 134

	
135
    /// \brief Resets the path to an empty path.
135
    /// \brief Reset the path to an empty one.
136 136
    void clear() { head.clear(); tail.clear(); }
137 137

	
138
    /// \brief Gives back the nth arc.
138
    /// \brief The nth arc.
139 139
    ///
140 140
    /// \pre n is in the [0..length() - 1] range
141 141
    const Arc& nth(int n) const {
142 142
      return n < int(head.size()) ? *(head.rbegin() + n) :
143 143
        *(tail.begin() + (n - head.size()));
144 144
    }
145 145

	
146
    /// \brief Initializes arc iterator to point to the nth arc
146
    /// \brief Initialize arc iterator to point to the nth arc
147 147
    ///
148 148
    /// \pre n is in the [0..length() - 1] range
149 149
    ArcIt nthIt(int n) const {
150 150
      return ArcIt(*this, n);
151 151
    }
152 152

	
153
    /// \brief Gives back the first arc of the path
153
    /// \brief The first arc of the path
154 154
    const Arc& front() const {
155 155
      return head.empty() ? tail.front() : head.back();
156 156
    }
157 157

	
... ...
@@ -174,9 +174,9 @@
174 174
        tail.resize(tail.size() - halfsize - 1);
175 175
      }
176 176
    }
177 177

	
178
    /// \brief Gives back the last arc of the path
178
    /// \brief The last arc of the path
179 179
    const Arc& back() const {
180 180
      return tail.empty() ? head.front() : tail.back();
181 181
    }
182 182

	
... ...
@@ -198,10 +198,8 @@
198 198
        head.resize(head.size() - halfsize - 1);
199 199
      }
200 200
    }
201 201

	
202

	
203

	
204 202
    typedef True BuildTag;
205 203

	
206 204
    template <typename CPath>
207 205
    void build(const CPath& path) {
... ...
@@ -322,15 +320,15 @@
322 320
    };
323 321

	
324 322
    /// \brief Length of the path.
325 323
    int length() const { return data.size(); }
326
    /// \brief Returns whether the path is empty.
324
    /// \brief Return true if the path is empty.
327 325
    bool empty() const { return data.empty(); }
328 326

	
329
    /// \brief Resets the path to an empty path.
327
    /// \brief Reset the path to an empty one.
330 328
    void clear() { data.clear(); }
331 329

	
332
    /// \brief Gives back the nth arc.
330
    /// \brief The nth arc.
333 331
    ///
334 332
    /// \pre n is in the [0..length() - 1] range
335 333
    const Arc& nth(int n) const {
336 334
      return data[n];
... ...
@@ -340,14 +338,14 @@
340 338
    ArcIt nthIt(int n) const {
341 339
      return ArcIt(*this, n);
342 340
    }
343 341

	
344
    /// \brief Gives back the first arc of the path.
342
    /// \brief The first arc of the path.
345 343
    const Arc& front() const {
346 344
      return data.front();
347 345
    }
348 346

	
349
    /// \brief Gives back the last arc of the path.
347
    /// \brief The last arc of the path.
350 348
    const Arc& back() const {
351 349
      return data.back();
352 350
    }
353 351

	
... ...
@@ -505,11 +503,11 @@
505 503
      const ListPath *path;
506 504
      Node *node;
507 505
    };
508 506

	
509
    /// \brief Gives back the nth arc.
507
    /// \brief The nth arc.
510 508
    ///
511
    /// Gives back the nth arc in O(n) time.
509
    /// This function looks for the nth arc in O(n) time.
512 510
    /// \pre n is in the [0..length() - 1] range
513 511
    const Arc& nth(int n) const {
514 512
      Node *node = first;
515 513
      for (int i = 0; i < n; ++i) {
... ...
@@ -537,12 +535,12 @@
537 535
      }
538 536
      return len;
539 537
    }
540 538

	
541
    /// \brief Returns whether the path is empty.
539
    /// \brief Return true if the path is empty.
542 540
    bool empty() const { return first == 0; }
543 541

	
544
    /// \brief Resets the path to an empty path.
542
    /// \brief Reset the path to an empty one.
545 543
    void clear() {
546 544
      while (first != 0) {
547 545
        last = first->next;
548 546
        alloc.destroy(first);
... ...
@@ -550,9 +548,9 @@
550 548
        first = last;
551 549
      }
552 550
    }
553 551

	
554
    /// \brief Gives back the first arc of the path
552
    /// \brief The first arc of the path
555 553
    const Arc& front() const {
556 554
      return first->arc;
557 555
    }
558 556

	
... ...
@@ -583,9 +581,9 @@
583 581
      alloc.destroy(node);
584 582
      alloc.deallocate(node, 1);
585 583
    }
586 584

	
587
    /// \brief Gives back the last arc of the path.
585
    /// \brief The last arc of the path.
588 586
    const Arc& back() const {
589 587
      return last->arc;
590 588
    }
591 589

	
... ...
@@ -616,11 +614,11 @@
616 614
      alloc.destroy(node);
617 615
      alloc.deallocate(node, 1);
618 616
    }
619 617

	
620
    /// \brief Splicing the given path to the current path.
618
    /// \brief Splice a path to the back of the current path.
621 619
    ///
622
    /// It splices the \c tpath to the back of the current path and \c
620
    /// It splices \c tpath to the back of the current path and \c
623 621
    /// tpath becomes empty. The time complexity of this function is
624 622
    /// O(1).
625 623
    void spliceBack(ListPath& tpath) {
626 624
      if (first) {
... ...
@@ -635,11 +633,11 @@
635 633
      }
636 634
      tpath.first = tpath.last = 0;
637 635
    }
638 636

	
639
    /// \brief Splicing the given path to the current path.
637
    /// \brief Splice a path to the front of the current path.
640 638
    ///
641
    /// It splices the \c tpath before the current path and \c tpath
639
    /// It splices \c tpath before the current path and \c tpath
642 640
    /// becomes empty. The time complexity of this function
643 641
    /// is O(1).
644 642
    void spliceFront(ListPath& tpath) {
645 643
      if (first) {
... ...
@@ -654,14 +652,14 @@
654 652
      }
655 653
      tpath.first = tpath.last = 0;
656 654
    }
657 655

	
658
    /// \brief Splicing the given path into the current path.
656
    /// \brief Splice a path into the current path.
659 657
    ///
660 658
    /// It splices the \c tpath into the current path before the
661 659
    /// position of \c it iterator and \c tpath becomes empty. The
662
    /// time complexity of this function is O(1). If the \c it is \c
663
    /// INVALID then it will splice behind the current path.
660
    /// time complexity of this function is O(1). If the \c it is
661
    /// \c INVALID then it will splice behind the current path.
664 662
    void splice(ArcIt it, ListPath& tpath) {
665 663
      if (it.node) {
666 664
        if (tpath.first) {
667 665
          tpath.first->prev = it.node->prev;
... ...
@@ -687,17 +685,17 @@
687 685
      }
688 686
      tpath.first = tpath.last = 0;
689 687
    }
690 688

	
691
    /// \brief Spliting the current path.
689
    /// \brief Split the current path.
692 690
    ///
693
    /// It splits the current path into two parts. The part before \c
694
    /// it iterator will remain in the current path and the part from
695
    /// the it will put into the \c tpath. If the \c tpath had arcs
696
    /// before the operation they will be removed first.  The time
697
    /// complexity of this function is O(1) plus the clearing of \c
698
    /// tpath. If the \c it is \c INVALID then it just clears \c
699
    /// tpath.
691
    /// It splits the current path into two parts. The part before
692
    /// the iterator \c it will remain in the current path and the part
693
    /// starting with
694
    /// \c it will put into \c tpath. If \c tpath have arcs
695
    /// before the operation they are removed first.  The time
696
    /// complexity of this function is O(1) plus the the time of emtying
697
    /// \c tpath. If \c it is \c INVALID then it just clears \c tpath
700 698
    void split(ArcIt it, ListPath& tpath) {
701 699
      tpath.clear();
702 700
      if (it.node) {
703 701
        tpath.first = it.node;
... ...
@@ -737,15 +735,18 @@
737 735
  /// \param Digraph The digraph type in which the path is.
738 736
  ///
739 737
  /// In a sense, the path can be treated as a list of arcs. The
740 738
  /// lemon path type stores just this list. As a consequence it
741
  /// cannot enumerate the nodes in the path and the zero length paths
742
  /// cannot store the source.
739
  /// cannot enumerate the nodes in the path and the source node of
740
  /// a zero length path is undefined.
743 741
  ///
744
  /// This implementation is completly static, so it cannot be
745
  /// modified exclude the assign an other path. It is intented to be
746
  /// used when you want to store a large number of paths because it is
747
  /// the most memory efficient path type in the lemon.
742
  /// This implementation is completly static, i.e. it can be copy constucted
743
  /// or copy assigned from another path, but otherwise it cannot be
744
  /// modified.
745
  ///
746
  /// Being the the most memory efficient path type in LEMON,
747
  /// it is intented to be
748
  /// used when you want to store a large number of paths.
748 749
  template <typename _Digraph>
749 750
  class StaticPath {
750 751
  public:
751 752

	
... ...
@@ -758,10 +759,9 @@
758 759
    StaticPath() : len(0), arcs(0) {}
759 760
    
760 761
    /// \brief Template copy constructor
761 762
    ///
762
    /// This path can be initialized with any other path type. It just
763
    /// makes a copy of the given path.
763
    /// This path can be initialized from any other path type.
764 764
    template <typename CPath>
765 765
    StaticPath(const CPath& cpath) : arcs(0) {
766 766
      copyPath(*this, cpath);
767 767
    }
... ...
@@ -774,9 +774,9 @@
774 774
    }
775 775

	
776 776
    /// \brief Template copy assignment
777 777
    ///
778
    /// This path can be initialized with any other path type. It just
778
    /// This path can be made equal to any other path type. It simply
779 779
    /// makes a copy of the given path.
780 780
    template <typename CPath>
781 781
    StaticPath& operator=(const CPath& cpath) {
782 782
      copyPath(*this, cpath);
... ...
@@ -830,39 +830,39 @@
830 830
      const StaticPath *path;
831 831
      int idx;
832 832
    };
833 833

	
834
    /// \brief Gives back the nth arc.
834
    /// \brief The nth arc.
835 835
    ///
836 836
    /// \pre n is in the [0..length() - 1] range
837 837
    const Arc& nth(int n) const {
838 838
      return arcs[n];
839 839
    }
840 840

	
841
    /// \brief Initializes arc iterator to point to the nth arc.
841
    /// \brief The arc iterator pointing to the nth arc.
842 842
    ArcIt nthIt(int n) const {
843 843
      return ArcIt(*this, n);
844 844
    }
845 845

	
846
    /// \brief Gives back the length of the path.
846
    /// \brief The length of the path.
847 847
    int length() const { return len; }
848 848

	
849
    /// \brief Returns true when the path is empty.
849
    /// \brief Return true when the path is empty.
850 850
    int empty() const { return len == 0; }
851 851

	
852
    /// \break Erase all arc in the digraph.
852
    /// \break Erase all arcs in the digraph.
853 853
    void clear() {
854 854
      len = 0;
855 855
      if (arcs) delete[] arcs;
856 856
      arcs = 0;
857 857
    }
858 858

	
859
    /// \brief Gives back the first arc of the path.
859
    /// \brief The first arc of the path.
860 860
    const Arc& front() const {
861 861
      return arcs[0];
862 862
    }
863 863

	
864
    /// \brief Gives back the last arc of the path.
864
    /// \brief The last arc of the path.
865 865
    const Arc& back() const {
866 866
      return arcs[len - 1];
867 867
    }
868 868

	
Show white space 8 line context
... ...
@@ -89,20 +89,21 @@
89 89

	
90 90
  }
91 91

	
92 92

	
93
  /// \brief Make of copy of a path.
93
  /// \brief Make a copy of a path.
94 94
  ///
95
  ///  Make of copy of a path.
95
  ///  This function makes a copy of a path.
96 96
  template <typename Target, typename Source>
97 97
  void copyPath(Target& target, const Source& source) {
98 98
    checkConcept<concepts::PathDumper<typename Source::Digraph>, Source>();
99 99
    _path_bits::PathCopySelector<Target, Source>::copy(target, source);
100 100
  }
101 101

	
102
  /// \brief Checks the path's consistency.
102
  /// \brief Check the consistency of a path.
103 103
  ///
104
  /// Checks that each arc's target is the next's source. 
104
  /// This function checks that the target of each arc is the same
105
  /// as the source of the next one. 
105 106
  /// 
106 107
  template <typename Digraph, typename Path>
107 108
  bool checkPath(const Digraph& digraph, const Path& path) {
108 109
    typename Path::ArcIt it(path);
... ...
@@ -116,33 +117,33 @@
116 117
    }
117 118
    return true;
118 119
  }
119 120

	
120
  /// \brief Gives back the source of the path
121
  /// \brief The source of a path
121 122
  ///
122
  /// Gives back the source of the path.
123
  /// This function returns the source of the given path.
123 124
  template <typename Digraph, typename Path>
124 125
  typename Digraph::Node pathSource(const Digraph& digraph, const Path& path) {
125 126
    return digraph.source(path.front());
126 127
  }
127 128

	
128
  /// \brief Gives back the target of the path
129
  /// \brief The target of a path
129 130
  ///
130
  /// Gives back the target of the path.
131
  /// This function returns the target of the given path.
131 132
  template <typename Digraph, typename Path>
132 133
  typename Digraph::Node pathTarget(const Digraph& digraph, const Path& path) {
133 134
    return digraph.target(path.back());
134 135
  }
135 136

	
136
  /// \brief Class which helps to iterate the nodes of a path
137
  /// \brief Class which helps to iterate through the nodes of a path
137 138
  ///
138 139
  /// In a sense, the path can be treated as a list of arcs. The
139
  /// lemon path type stores just this list. As a consequence it
140
  /// lemon path type stores only this list. As a consequence, it
140 141
  /// cannot enumerate the nodes in the path and the zero length paths
141
  /// cannot store the node.
142
  /// cannot have a source node.
142 143
  ///
143 144
  /// This class implements the node iterator of a path structure. To
144
  /// provide this feature, the underlying digraph should be given to
145
  /// provide this feature, the underlying digraph should be passed to
145 146
  /// the constructor of the iterator.
146 147
  template <typename Path>
147 148
  class PathNodeIt {
148 149
  private:
0 comments (0 inline)