Changes in lemon/elevator.h [581:aa1804409f29:559:c5fd2d996909] in lemon-main
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/elevator.h
r581 r559 77 77 void copy(Item i, Vit p) 78 78 { 79 _where [*p=i] = p;79 _where.set(*p=i,p); 80 80 } 81 81 void copy(Vit s, Vit p) … … 85 85 Item i=*s; 86 86 *p=i; 87 _where [i] = p;87 _where.set(i,p); 88 88 } 89 89 } … … 92 92 Item ti=*i; 93 93 Vit ct = _where[ti]; 94 _where [ti] = _where[*i=*j];95 _where [*j] = ct;94 _where.set(ti,_where[*i=*j]); 95 _where.set(*j,ct); 96 96 *j=ti; 97 97 } … … 227 227 { 228 228 Item it = *_last_active[_highest_active]; 229 ++_level[it];229 _level.set(it,_level[it]+1); 230 230 swap(_last_active[_highest_active]--,_last_active[_highest_active+1]); 231 231 --_first[++_highest_active]; … … 250 250 } 251 251 copy(li,_first[new_level]); 252 _level [li] = new_level;252 _level.set(li,new_level); 253 253 _highest_active=new_level; 254 254 } … … 270 270 copy(li,_first[_max_level]); 271 271 --_last_active[_max_level]; 272 _level [li] = _max_level;272 _level.set(li,_max_level); 273 273 274 274 while(_highest_active>=0 && … … 300 300 { 301 301 Item it =*_last_active[level]; 302 ++_level[it];302 _level.set(it,_level[it]+1); 303 303 swap(_last_active[level]--, --_first[level+1]); 304 304 if (level+1>_highest_active) ++_highest_active; … … 320 320 } 321 321 copy(ai,_first[new_level]); 322 _level [ai] = new_level;322 _level.set(ai,new_level); 323 323 if (new_level>_highest_active) _highest_active=new_level; 324 324 } … … 340 340 copy(ai,_first[_max_level]); 341 341 --_last_active[_max_level]; 342 _level [ai] = _max_level;342 _level.set(ai,_max_level); 343 343 344 344 if (_highest_active==level) { … … 371 371 } 372 372 copy(i,_first[new_level]); 373 _level [i] = new_level;373 _level.set(i,new_level); 374 374 if(new_level>_highest_active) _highest_active=new_level; 375 375 } … … 383 383 ///\pre The item is on the top level. 384 384 void dirtyTopButOne(Item i) { 385 _level [i] = _max_level - 1;385 _level.set(i,_max_level - 1); 386 386 } 387 387 … … 395 395 const Vit tl=_first[_max_level]; 396 396 for(Vit i=f;i!=tl;++i) 397 _level [*i] = _max_level;397 _level.set(*i,_max_level); 398 398 for(int i=l;i<=_max_level;i++) 399 399 { … … 434 434 { 435 435 *n=i; 436 _where [i] = n;437 _level [i] = _max_level;436 _where.set(i,n); 437 _level.set(i,_max_level); 438 438 ++n; 439 439 } … … 444 444 { 445 445 swap(_where[i],_init_num); 446 _level [i] = _init_lev;446 _level.set(i,_init_lev); 447 447 ++_init_num; 448 448 } … … 552 552 ///\pre Item \c i shouldn't be active before. 553 553 void activate(Item i) { 554 _active [i] = true;554 _active.set(i, true); 555 555 556 556 int level = _level[i]; … … 561 561 if (_prev[i] == INVALID || _active[_prev[i]]) return; 562 562 //unlace 563 _next [_prev[i]] = _next[i];563 _next.set(_prev[i], _next[i]); 564 564 if (_next[i] != INVALID) { 565 _prev [_next[i]] = _prev[i];565 _prev.set(_next[i], _prev[i]); 566 566 } else { 567 567 _last[level] = _prev[i]; 568 568 } 569 569 //lace 570 _next [i] = _first[level];571 _prev [_first[level]] = i;572 _prev [i] = INVALID;570 _next.set(i, _first[level]); 571 _prev.set(_first[level], i); 572 _prev.set(i, INVALID); 573 573 _first[level] = i; 574 574 … … 580 580 ///\pre Item \c i must be active before. 581 581 void deactivate(Item i) { 582 _active [i] = false;582 _active.set(i, false); 583 583 int level = _level[i]; 584 584 … … 587 587 588 588 //unlace 589 _prev [_next[i]] = _prev[i];589 _prev.set(_next[i], _prev[i]); 590 590 if (_prev[i] != INVALID) { 591 _next [_prev[i]] = _next[i];591 _next.set(_prev[i], _next[i]); 592 592 } else { 593 593 _first[_level[i]] = _next[i]; 594 594 } 595 595 //lace 596 _prev [i] = _last[level];597 _next [_last[level]] = i;598 _next [i] = INVALID;596 _prev.set(i, _last[level]); 597 _next.set(_last[level], i); 598 _next.set(i, INVALID); 599 599 _last[level] = i; 600 600 … … 686 686 Item i = _first[_highest_active]; 687 687 if (_next[i] != INVALID) { 688 _prev [_next[i]] = INVALID;688 _prev.set(_next[i], INVALID); 689 689 _first[_highest_active] = _next[i]; 690 690 } else { … … 692 692 _last[_highest_active] = INVALID; 693 693 } 694 _level [i] = ++_highest_active;694 _level.set(i, ++_highest_active); 695 695 if (_first[_highest_active] == INVALID) { 696 696 _first[_highest_active] = i; 697 697 _last[_highest_active] = i; 698 _prev [i] = INVALID;699 _next [i] = INVALID;700 } else { 701 _prev [_first[_highest_active]] = i;702 _next [i] = _first[_highest_active];698 _prev.set(i, INVALID); 699 _next.set(i, INVALID); 700 } else { 701 _prev.set(_first[_highest_active], i); 702 _next.set(i, _first[_highest_active]); 703 703 _first[_highest_active] = i; 704 704 } … … 715 715 Item i = _first[_highest_active]; 716 716 if (_next[i] != INVALID) { 717 _prev [_next[i]] = INVALID;717 _prev.set(_next[i], INVALID); 718 718 _first[_highest_active] = _next[i]; 719 719 } else { … … 721 721 _last[_highest_active] = INVALID; 722 722 } 723 _level [i] = _highest_active = new_level;723 _level.set(i, _highest_active = new_level); 724 724 if (_first[_highest_active] == INVALID) { 725 725 _first[_highest_active] = _last[_highest_active] = i; 726 _prev [i] = INVALID;727 _next [i] = INVALID;728 } else { 729 _prev [_first[_highest_active]] = i;730 _next [i] = _first[_highest_active];726 _prev.set(i, INVALID); 727 _next.set(i, INVALID); 728 } else { 729 _prev.set(_first[_highest_active], i); 730 _next.set(i, _first[_highest_active]); 731 731 _first[_highest_active] = i; 732 732 } … … 739 739 void liftHighestActiveToTop() { 740 740 Item i = _first[_highest_active]; 741 _level [i] = _max_level;741 _level.set(i, _max_level); 742 742 if (_next[i] != INVALID) { 743 _prev [_next[i]] = INVALID;743 _prev.set(_next[i], INVALID); 744 744 _first[_highest_active] = _next[i]; 745 745 } else { … … 775 775 Item i = _first[l]; 776 776 if (_next[i] != INVALID) { 777 _prev [_next[i]] = INVALID;777 _prev.set(_next[i], INVALID); 778 778 _first[l] = _next[i]; 779 779 } else { … … 781 781 _last[l] = INVALID; 782 782 } 783 _level [i] = ++l;783 _level.set(i, ++l); 784 784 if (_first[l] == INVALID) { 785 785 _first[l] = _last[l] = i; 786 _prev [i] = INVALID;787 _next [i] = INVALID;788 } else { 789 _prev [_first[l]] = i;790 _next [i] = _first[l];786 _prev.set(i, INVALID); 787 _next.set(i, INVALID); 788 } else { 789 _prev.set(_first[l], i); 790 _next.set(i, _first[l]); 791 791 _first[l] = i; 792 792 } … … 804 804 Item i = _first[l]; 805 805 if (_next[i] != INVALID) { 806 _prev [_next[i]] = INVALID;806 _prev.set(_next[i], INVALID); 807 807 _first[l] = _next[i]; 808 808 } else { … … 810 810 _last[l] = INVALID; 811 811 } 812 _level [i] = l = new_level;812 _level.set(i, l = new_level); 813 813 if (_first[l] == INVALID) { 814 814 _first[l] = _last[l] = i; 815 _prev [i] = INVALID;816 _next [i] = INVALID;817 } else { 818 _prev [_first[l]] = i;819 _next [i] = _first[l];815 _prev.set(i, INVALID); 816 _next.set(i, INVALID); 817 } else { 818 _prev.set(_first[l], i); 819 _next.set(i, _first[l]); 820 820 _first[l] = i; 821 821 } … … 833 833 Item i = _first[l]; 834 834 if (_next[i] != INVALID) { 835 _prev [_next[i]] = INVALID;835 _prev.set(_next[i], INVALID); 836 836 _first[l] = _next[i]; 837 837 } else { … … 839 839 _last[l] = INVALID; 840 840 } 841 _level [i] = _max_level;841 _level.set(i, _max_level); 842 842 if (l == _highest_active) { 843 843 while (_highest_active >= 0 && activeFree(_highest_active)) … … 857 857 void lift(Item i, int new_level) { 858 858 if (_next[i] != INVALID) { 859 _prev [_next[i]] = _prev[i];859 _prev.set(_next[i], _prev[i]); 860 860 } else { 861 861 _last[new_level] = _prev[i]; 862 862 } 863 863 if (_prev[i] != INVALID) { 864 _next [_prev[i]] = _next[i];864 _next.set(_prev[i], _next[i]); 865 865 } else { 866 866 _first[new_level] = _next[i]; 867 867 } 868 _level [i] = new_level;868 _level.set(i, new_level); 869 869 if (_first[new_level] == INVALID) { 870 870 _first[new_level] = _last[new_level] = i; 871 _prev [i] = INVALID;872 _next [i] = INVALID;873 } else { 874 _prev [_first[new_level]] = i;875 _next [i] = _first[new_level];871 _prev.set(i, INVALID); 872 _next.set(i, INVALID); 873 } else { 874 _prev.set(_first[new_level], i); 875 _next.set(i, _first[new_level]); 876 876 _first[new_level] = i; 877 877 } … … 889 889 ///\pre The item is on the top level. 890 890 void dirtyTopButOne(Item i) { 891 _level [i] = _max_level - 1;891 _level.set(i, _max_level - 1); 892 892 } 893 893 … … 900 900 Item n = _first[i]; 901 901 while (n != INVALID) { 902 _level [n] = _max_level;902 _level.set(n, _max_level); 903 903 n = _next[n]; 904 904 } … … 938 938 for(typename ItemSetTraits<GR,Item>::ItemIt i(_graph); 939 939 i != INVALID; ++i) { 940 _level [i] = _max_level;941 _active [i] = false;940 _level.set(i, _max_level); 941 _active.set(i, false); 942 942 } 943 943 } … … 945 945 ///Add an item to the current level. 946 946 void initAddItem(Item i) { 947 _level [i] = _init_level;947 _level.set(i, _init_level); 948 948 if (_last[_init_level] == INVALID) { 949 949 _first[_init_level] = i; 950 950 _last[_init_level] = i; 951 _prev [i] = INVALID;952 _next [i] = INVALID;953 } else { 954 _prev [i] = _last[_init_level];955 _next [i] = INVALID;956 _next [_last[_init_level]] = i;951 _prev.set(i, INVALID); 952 _next.set(i, INVALID); 953 } else { 954 _prev.set(i, _last[_init_level]); 955 _next.set(i, INVALID); 956 _next.set(_last[_init_level], i); 957 957 _last[_init_level] = i; 958 958 }
Note: See TracChangeset
for help on using the changeset viewer.