gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Doc improvements for elevator classes (#174)
0 1 0
default
1 file changed with 88 insertions and 110 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -27,7 +27,8 @@
27 27
///for labeling items in push-relabel type algorithms.
28 28
///
29 29

	
30
#include <test/test_tools.h>
30
#include <lemon/bits/traits.h>
31

	
31 32
namespace lemon {
32 33

	
33 34
  ///Class for handling "labels" in push-relabel type algorithms.
... ...
@@ -44,9 +45,9 @@
44 45
  ///
45 46
  ///\sa LinkedElevator
46 47
  ///
47
  ///\param Graph the underlying graph type
48
  ///\param Graph Type of the underlying graph.
48 49
  ///\param Item Type of the items the data is assigned to (Graph::Node,
49
  ///Graph::Edge, Graph::UEdge)
50
  ///Graph::Arc, Graph::Edge).
50 51
  template<class Graph, class Item>
51 52
  class Elevator
52 53
  {
... ...
@@ -100,15 +101,15 @@
100 101

	
101 102
    ///Constructor with given maximum level.
102 103
    ///
103
    ///\param g The underlying graph
104
    ///\param max_level Set the range of the possible labels to
105
    ///[0...\c max_level]
106
    Elevator(const Graph &g,int max_level) :
107
      _g(g),
104
    ///\param graph The underlying graph.
105
    ///\param max_level The maximum allowed level.
106
    ///Set the range of the possible labels to <tt>[0..max_level]</tt>.
107
    Elevator(const Graph &graph,int max_level) :
108
      _g(graph),
108 109
      _max_level(max_level),
109 110
      _item_num(_max_level),
110
      _where(g),
111
      _level(g,0),
111
      _where(graph),
112
      _level(graph,0),
112 113
      _items(_max_level),
113 114
      _first(_max_level+2),
114 115
      _last_active(_max_level+2),
... ...
@@ -117,15 +118,15 @@
117 118

	
118 119
    ///Constructor.
119 120
    ///
120
    ///\param g The underlying graph
121
    ///The range of the possible labels is [0...\c max_level],
121
    ///\param graph The underlying graph.
122
    ///Set the range of the possible labels to <tt>[0..max_level]</tt>,
122 123
    ///where \c max_level is equal to the number of labeled items in the graph.
123
    Elevator(const Graph &g) :
124
      _g(g),
125
      _max_level(countItems<Graph, Item>(g)),
124
    Elevator(const Graph &graph) :
125
      _g(graph),
126
      _max_level(countItems<Graph, Item>(graph)),
126 127
      _item_num(_max_level),
127
      _where(g),
128
      _level(g,0),
128
      _where(graph),
129
      _level(graph,0),
129 130
      _items(_max_level),
130 131
      _first(_max_level+2),
131 132
      _last_active(_max_level+2),
... ...
@@ -167,7 +168,7 @@
167 168
    {
168 169
      return _first[l+1]-_first[l];
169 170
    }
170
    ///Return true if the level is empty.
171
    ///Return true if level \c l is empty.
171 172
    bool emptyLevel(int l) const
172 173
    {
173 174
      return _first[l+1]-_first[l]==0;
... ...
@@ -182,7 +183,7 @@
182 183
    {
183 184
      return _last_active[l]-_first[l]+1;
184 185
    }
185
    ///Return true if there is not active item on level \c l.
186
    ///Return true if there is no active item on level \c l.
186 187
    bool activeFree(int l) const
187 188
    {
188 189
      return _last_active[l]<_first[l];
... ...
@@ -201,20 +202,16 @@
201 202

	
202 203
    ///Return a highest level active item.
203 204

	
204
    ///Return a highest level active item.
205
    ///
206
    ///\return the highest level active item or INVALID if there is no active
205
    ///Return a highest level active item or INVALID if there is no active
207 206
    ///item.
208 207
    Item highestActive() const
209 208
    {
210 209
      return _highest_active>=0?*_last_active[_highest_active]:INVALID;
211 210
    }
212 211

	
213
    ///Return a highest active level.
212
    ///Return the highest active level.
214 213

	
215
    ///Return a highest active level.
216
    ///
217
    ///\return the level of the highest active item or -1 if there is no active
214
    ///Return the level of the highest active item or -1 if there is no active
218 215
    ///item.
219 216
    int highestActiveLevel() const
220 217
    {
... ...
@@ -233,7 +230,7 @@
233 230
      --_first[++_highest_active];
234 231
    }
235 232

	
236
    ///Lift the highest active item.
233
    ///Lift the highest active item to the given level.
237 234

	
238 235
    ///Lift the item returned by highestActive() to level \c new_level.
239 236
    ///
... ...
@@ -255,14 +252,10 @@
255 252
      _highest_active=new_level;
256 253
    }
257 254

	
258
    ///Lift the highest active item.
255
    ///Lift the highest active item to the top level.
259 256

	
260 257
    ///Lift the item returned by highestActive() to the top level and
261
    ///deactivates it.
262
    ///
263
    ///\warning \c new_level must be strictly higher
264
    ///than the current level.
265
    ///
258
    ///deactivate it.
266 259
    void liftHighestActiveToTop()
267 260
    {
268 261
      const Item li = *_last_active[_highest_active];
... ...
@@ -289,20 +282,18 @@
289 282

	
290 283
    ///@{
291 284

	
292
    ///Returns an active item on level \c l.
285
    ///Return an active item on level \c l.
293 286

	
294
    ///Returns an active item on level \c l.
295
    ///
296
    ///Returns an active item on level \c l or \ref INVALID if there is no such
287
    ///Return an active item on level \c l or \ref INVALID if there is no such
297 288
    ///an item. (\c l must be from the range [0...\c max_level].
298 289
    Item activeOn(int l) const
299 290
    {
300 291
      return _last_active[l]>=_first[l]?*_last_active[l]:INVALID;
301 292
    }
302 293

	
303
    ///Lifts the active item returned by \c activeOn() member function.
294
    ///Lift the active item returned by \c activeOn(level) by one.
304 295

	
305
    ///Lifts the active item returned by \c activeOn() member function
296
    ///Lift the active item returned by \ref activeOn() "activeOn(level)"
306 297
    ///by one.
307 298
    Item liftActiveOn(int level)
308 299
    {
... ...
@@ -312,9 +303,9 @@
312 303
      if (level+1>_highest_active) ++_highest_active;
313 304
    }
314 305

	
315
    ///Lifts the active item returned by \c activeOn() member function.
306
    ///Lift the active item returned by \c activeOn(level) to the given level.
316 307

	
317
    ///Lifts the active item returned by \c activeOn() member function
308
    ///Lift the active item returned by \ref activeOn() "activeOn(level)"
318 309
    ///to the given level.
319 310
    void liftActiveOn(int level, int new_level)
320 311
    {
... ...
@@ -331,10 +322,10 @@
331 322
      if (new_level>_highest_active) _highest_active=new_level;
332 323
    }
333 324

	
334
    ///Lifts the active item returned by \c activeOn() member function.
325
    ///Lift the active item returned by \c activeOn(level) to the top level.
335 326

	
336
    ///Lifts the active item returned by \c activeOn() member function
337
    ///to the top level.
327
    ///Lift the active item returned by \ref activeOn() "activeOn(level)"
328
    ///to the top level and deactivate it.
338 329
    void liftActiveToTop(int level)
339 330
    {
340 331
      const Item ai = *_last_active[level];
... ...
@@ -384,18 +375,19 @@
384 375

	
385 376
    ///Move an inactive item to the top but one level (in a dirty way).
386 377

	
387
    ///This function moves an inactive item to the top but one level.
388
    ///It makes the underlying datastructure corrupt, so use is only if
389
    ///you really know what it is for.
378
    ///This function moves an inactive item from the top level to the top
379
    ///but one level (in a dirty way).
380
    ///\warning It makes the underlying datastructure corrupt, so use it
381
    ///only if you really know what it is for.
390 382
    ///\pre The item is on the top level.
391 383
    void dirtyTopButOne(Item i) {
392 384
      _level.set(i,_max_level - 1);
393 385
    }
394 386

	
395
    ///Lift all items on and above a level to the top (and deactivate them).
387
    ///Lift all items on and above the given level to the top level.
396 388

	
397
    ///This function lifts all items on and above level \c l to \c
398
    ///maxLevel(), and also deactivates them.
389
    ///This function lifts all items on and above level \c l to the top
390
    ///level and deactivates them.
399 391
    void liftToTop(int l)
400 392
    {
401 393
      const Vit f=_first[l];
... ...
@@ -420,18 +412,16 @@
420 412
  public:
421 413

	
422 414
    ///\name Initialization
423
    ///Using this function you can initialize the levels of the item.
415
    ///Using these functions you can initialize the levels of the items.
424 416
    ///\n
425
    ///This initializatios is started with calling \c initStart().
426
    ///Then the
427
    ///items should be listed levels by levels statring with the lowest one
428
    ///(with level 0). This is done by using \c initAddItem()
429
    ///and \c initNewLevel(). Finally \c initFinish() must be called.
430
    ///The items not listed will be put on the highest level.
417
    ///The initialization must be started with calling \c initStart().
418
    ///Then the items should be listed level by level starting with the
419
    ///lowest one (level 0) using \c initAddItem() and \c initNewLevel().
420
    ///Finally \c initFinish() must be called.
421
    ///The items not listed are put on the highest level.
431 422
    ///@{
432 423

	
433 424
    ///Start the initialization process.
434

	
435 425
    void initStart()
436 426
    {
437 427
      _init_lev=0;
... ...
@@ -449,7 +439,6 @@
449 439
    }
450 440

	
451 441
    ///Add an item to the current level.
452

	
453 442
    void initAddItem(Item i)
454 443
    {
455 444
      swap(_where[i],_init_num);
... ...
@@ -469,7 +458,6 @@
469 458
    }
470 459

	
471 460
    ///Finalize the initialization process.
472

	
473 461
    void initFinish()
474 462
    {
475 463
      for(_init_lev++;_init_lev<=_max_level;_init_lev++)
... ...
@@ -500,9 +488,9 @@
500 488
  ///
501 489
  ///\sa Elevator
502 490
  ///
503
  ///\param Graph the underlying graph type
491
  ///\param Graph Type of the underlying graph.
504 492
  ///\param Item Type of the items the data is assigned to (Graph::Node,
505
  ///Graph::Edge, Graph::UEdge)
493
  ///Graph::Arc, Graph::Edge).
506 494
  template <class Graph, class Item>
507 495
  class LinkedElevator {
508 496
  public:
... ...
@@ -533,9 +521,9 @@
533 521

	
534 522
    ///Constructor with given maximum level.
535 523
    ///
536
    ///\param g The underlying graph
537
    ///\param max_level Set the range of the possible labels to
538
    ///[0...\c max_level]
524
    ///\param graph The underlying graph.
525
    ///\param max_level The maximum allowed level.
526
    ///Set the range of the possible labels to <tt>[0..max_level]</tt>.
539 527
    LinkedElevator(const Graph& graph, int max_level)
540 528
      : _graph(graph), _max_level(max_level), _item_num(_max_level),
541 529
        _first(_max_level + 1), _last(_max_level + 1),
... ...
@@ -546,8 +534,8 @@
546 534

	
547 535
    ///Constructor.
548 536
    ///
549
    ///\param g The underlying graph
550
    ///The range of the possible labels is [0...\c max_level],
537
    ///\param graph The underlying graph.
538
    ///Set the range of the possible labels to <tt>[0..max_level]</tt>,
551 539
    ///where \c max_level is equal to the number of labeled items in the graph.
552 540
    LinkedElevator(const Graph& graph)
553 541
      : _graph(graph), _max_level(countItems<Graph, Item>(graph)),
... ...
@@ -657,7 +645,7 @@
657 645
      return num;
658 646
    }
659 647

	
660
    ///Return true if there is not active item on level \c l.
648
    ///Return true if there is no active item on level \c l.
661 649
    bool activeFree(int l) const {
662 650
      return _first[l] == INVALID || !_active[_first[l]];
663 651
    }
... ...
@@ -675,20 +663,16 @@
675 663

	
676 664
    ///Return a highest level active item.
677 665

	
678
    ///Return a highest level active item.
679
    ///
680
    ///\return the highest level active item or INVALID if there is no
681
    ///active item.
666
    ///Return a highest level active item or INVALID if there is no active
667
    ///item.
682 668
    Item highestActive() const {
683 669
      return _highest_active >= 0 ? _first[_highest_active] : INVALID;
684 670
    }
685 671

	
686
    ///Return a highest active level.
672
    ///Return the highest active level.
687 673

	
688
    ///Return a highest active level.
689
    ///
690
    ///\return the level of the highest active item or -1 if there is
691
    ///no active item.
674
    ///Return the level of the highest active item or -1 if there is no active
675
    ///item.
692 676
    int highestActiveLevel() const {
693 677
      return _highest_active;
694 678
    }
... ...
@@ -719,7 +703,7 @@
719 703
      }
720 704
    }
721 705

	
722
    ///Lift the highest active item.
706
    ///Lift the highest active item to the given level.
723 707

	
724 708
    ///Lift the item returned by highestActive() to level \c new_level.
725 709
    ///
... ...
@@ -747,11 +731,10 @@
747 731
      }
748 732
    }
749 733

	
750
    ///Lift the highest active to top.
734
    ///Lift the highest active item to the top level.
751 735

	
752 736
    ///Lift the item returned by highestActive() to the top level and
753
    ///deactivates the item.
754
    ///
737
    ///deactivate it.
755 738
    void liftHighestActiveToTop() {
756 739
      Item i = _first[_highest_active];
757 740
      _level.set(i, _max_level);
... ...
@@ -773,20 +756,18 @@
773 756

	
774 757
    ///@{
775 758

	
776
    ///Returns an active item on level \c l.
759
    ///Return an active item on level \c l.
777 760

	
778
    ///Returns an active item on level \c l.
779
    ///
780
    ///Returns an active item on level \c l or \ref INVALID if there is no such
761
    ///Return an active item on level \c l or \ref INVALID if there is no such
781 762
    ///an item. (\c l must be from the range [0...\c max_level].
782 763
    Item activeOn(int l) const
783 764
    {
784 765
      return _active[_first[l]] ? _first[l] : INVALID;
785 766
    }
786 767

	
787
    ///Lifts the active item returned by \c activeOn() member function.
768
    ///Lift the active item returned by \c activeOn(l) by one.
788 769

	
789
    ///Lifts the active item returned by \c activeOn() member function
770
    ///Lift the active item returned by \ref activeOn() "activeOn(l)"
790 771
    ///by one.
791 772
    Item liftActiveOn(int l)
792 773
    {
... ...
@@ -813,10 +794,10 @@
813 794
      }
814 795
    }
815 796

	
816
    /// \brief Lifts the active item returned by \c activeOn() member function.
817
    ///
818
    /// Lifts the active item returned by \c activeOn() member function
819
    /// to the given level.
797
    ///Lift the active item returned by \c activeOn(l) to the given level.
798

	
799
    ///Lift the active item returned by \ref activeOn() "activeOn(l)"
800
    ///to the given level.
820 801
    void liftActiveOn(int l, int new_level)
821 802
    {
822 803
      Item i = _first[l];
... ...
@@ -842,10 +823,10 @@
842 823
      }
843 824
    }
844 825

	
845
    ///Lifts the active item returned by \c activeOn() member function.
826
    ///Lift the active item returned by \c activeOn(l) to the top level.
846 827

	
847
    ///Lifts the active item returned by \c activeOn() member function
848
    ///to the top level.
828
    ///Lift the active item returned by \ref activeOn() "activeOn(l)"
829
    ///to the top level and deactivate it.
849 830
    void liftActiveToTop(int l)
850 831
    {
851 832
      Item i = _first[l];
... ...
@@ -900,18 +881,19 @@
900 881

	
901 882
    ///Move an inactive item to the top but one level (in a dirty way).
902 883

	
903
    ///This function moves an inactive item to the top but one level.
904
    ///It makes the underlying datastructure corrupt, so use is only if
905
    ///you really know what it is for.
884
    ///This function moves an inactive item from the top level to the top
885
    ///but one level (in a dirty way).
886
    ///\warning It makes the underlying datastructure corrupt, so use it
887
    ///only if you really know what it is for.
906 888
    ///\pre The item is on the top level.
907 889
    void dirtyTopButOne(Item i) {
908 890
      _level.set(i, _max_level - 1);
909 891
    }
910 892

	
911
    ///Lift all items on and above a level to the top (and deactivate them).
893
    ///Lift all items on and above the given level to the top level.
912 894

	
913
    ///This function lifts all items on and above level \c l to \c
914
    ///maxLevel(), and also deactivates them.
895
    ///This function lifts all items on and above level \c l to the top
896
    ///level and deactivates them.
915 897
    void liftToTop(int l)  {
916 898
      for (int i = l + 1; _first[i] != INVALID; ++i) {
917 899
        Item n = _first[i];
... ...
@@ -936,18 +918,16 @@
936 918
  public:
937 919

	
938 920
    ///\name Initialization
939
    ///Using this function you can initialize the levels of the item.
921
    ///Using these functions you can initialize the levels of the items.
940 922
    ///\n
941
    ///This initializatios is started with calling \c initStart().
942
    ///Then the
943
    ///items should be listed levels by levels statring with the lowest one
944
    ///(with level 0). This is done by using \c initAddItem()
945
    ///and \c initNewLevel(). Finally \c initFinish() must be called.
946
    ///The items not listed will be put on the highest level.
923
    ///The initialization must be started with calling \c initStart().
924
    ///Then the items should be listed level by level starting with the
925
    ///lowest one (level 0) using \c initAddItem() and \c initNewLevel().
926
    ///Finally \c initFinish() must be called.
927
    ///The items not listed are put on the highest level.
947 928
    ///@{
948 929

	
949 930
    ///Start the initialization process.
950

	
951 931
    void initStart() {
952 932

	
953 933
      for (int i = 0; i <= _max_level; ++i) {
... ...
@@ -962,7 +942,6 @@
962 942
    }
963 943

	
964 944
    ///Add an item to the current level.
965

	
966 945
    void initAddItem(Item i) {
967 946
      _level.set(i, _init_level);
968 947
      if (_last[_init_level] == INVALID) {
... ...
@@ -987,7 +966,6 @@
987 966
    }
988 967

	
989 968
    ///Finalize the initialization process.
990

	
991 969
    void initFinish() {
992 970
      _highest_active = -1;
993 971
    }
0 comments (0 inline)