Changeset 628:aa1804409f29 in lemon for lemon/elevator.h
- Timestamp:
- 04/14/09 10:35:38 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/elevator.h
r606 r628 77 77 void copy(Item i, Vit p) 78 78 { 79 _where .set(*p=i,p);79 _where[*p=i] = p; 80 80 } 81 81 void copy(Vit s, Vit p) … … 85 85 Item i=*s; 86 86 *p=i; 87 _where .set(i,p);87 _where[i] = p; 88 88 } 89 89 } … … 92 92 Item ti=*i; 93 93 Vit ct = _where[ti]; 94 _where .set(ti,_where[*i=*j]);95 _where .set(*j,ct);94 _where[ti] = _where[*i=*j]; 95 _where[*j] = ct; 96 96 *j=ti; 97 97 } … … 227 227 { 228 228 Item it = *_last_active[_highest_active]; 229 _level.set(it,_level[it]+1);229 ++_level[it]; 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 .set(li,new_level);252 _level[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 .set(li,_max_level);272 _level[li] = _max_level; 273 273 274 274 while(_highest_active>=0 && … … 300 300 { 301 301 Item it =*_last_active[level]; 302 _level.set(it,_level[it]+1);302 ++_level[it]; 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 .set(ai,new_level);322 _level[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 .set(ai,_max_level);342 _level[ai] = _max_level; 343 343 344 344 if (_highest_active==level) { … … 371 371 } 372 372 copy(i,_first[new_level]); 373 _level .set(i,new_level);373 _level[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 .set(i,_max_level - 1);385 _level[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 .set(*i,_max_level);397 _level[*i] = _max_level; 398 398 for(int i=l;i<=_max_level;i++) 399 399 { … … 434 434 { 435 435 *n=i; 436 _where .set(i,n);437 _level .set(i,_max_level);436 _where[i] = n; 437 _level[i] = _max_level; 438 438 ++n; 439 439 } … … 444 444 { 445 445 swap(_where[i],_init_num); 446 _level .set(i,_init_lev);446 _level[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 .set(i, true);554 _active[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 .set(_prev[i], _next[i]);563 _next[_prev[i]] = _next[i]; 564 564 if (_next[i] != INVALID) { 565 _prev .set(_next[i], _prev[i]);565 _prev[_next[i]] = _prev[i]; 566 566 } else { 567 567 _last[level] = _prev[i]; 568 568 } 569 569 //lace 570 _next .set(i, _first[level]);571 _prev .set(_first[level], i);572 _prev .set(i, INVALID);570 _next[i] = _first[level]; 571 _prev[_first[level]] = i; 572 _prev[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 .set(i, false);582 _active[i] = false; 583 583 int level = _level[i]; 584 584 … … 587 587 588 588 //unlace 589 _prev .set(_next[i], _prev[i]);589 _prev[_next[i]] = _prev[i]; 590 590 if (_prev[i] != INVALID) { 591 _next .set(_prev[i], _next[i]);591 _next[_prev[i]] = _next[i]; 592 592 } else { 593 593 _first[_level[i]] = _next[i]; 594 594 } 595 595 //lace 596 _prev .set(i, _last[level]);597 _next .set(_last[level], i);598 _next .set(i, INVALID);596 _prev[i] = _last[level]; 597 _next[_last[level]] = i; 598 _next[i] = INVALID; 599 599 _last[level] = i; 600 600 … … 686 686 Item i = _first[_highest_active]; 687 687 if (_next[i] != INVALID) { 688 _prev .set(_next[i], INVALID);688 _prev[_next[i]] = INVALID; 689 689 _first[_highest_active] = _next[i]; 690 690 } else { … … 692 692 _last[_highest_active] = INVALID; 693 693 } 694 _level .set(i, ++_highest_active);694 _level[i] = ++_highest_active; 695 695 if (_first[_highest_active] == INVALID) { 696 696 _first[_highest_active] = i; 697 697 _last[_highest_active] = i; 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]);698 _prev[i] = INVALID; 699 _next[i] = INVALID; 700 } else { 701 _prev[_first[_highest_active]] = i; 702 _next[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 .set(_next[i], INVALID);717 _prev[_next[i]] = INVALID; 718 718 _first[_highest_active] = _next[i]; 719 719 } else { … … 721 721 _last[_highest_active] = INVALID; 722 722 } 723 _level .set(i, _highest_active = new_level);723 _level[i] = _highest_active = new_level; 724 724 if (_first[_highest_active] == INVALID) { 725 725 _first[_highest_active] = _last[_highest_active] = i; 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]);726 _prev[i] = INVALID; 727 _next[i] = INVALID; 728 } else { 729 _prev[_first[_highest_active]] = i; 730 _next[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 .set(i, _max_level);741 _level[i] = _max_level; 742 742 if (_next[i] != INVALID) { 743 _prev .set(_next[i], INVALID);743 _prev[_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 .set(_next[i], INVALID);777 _prev[_next[i]] = INVALID; 778 778 _first[l] = _next[i]; 779 779 } else { … … 781 781 _last[l] = INVALID; 782 782 } 783 _level .set(i, ++l);783 _level[i] = ++l; 784 784 if (_first[l] == INVALID) { 785 785 _first[l] = _last[l] = i; 786 _prev .set(i, INVALID);787 _next .set(i, INVALID);788 } else { 789 _prev .set(_first[l], i);790 _next .set(i, _first[l]);786 _prev[i] = INVALID; 787 _next[i] = INVALID; 788 } else { 789 _prev[_first[l]] = i; 790 _next[i] = _first[l]; 791 791 _first[l] = i; 792 792 } … … 804 804 Item i = _first[l]; 805 805 if (_next[i] != INVALID) { 806 _prev .set(_next[i], INVALID);806 _prev[_next[i]] = INVALID; 807 807 _first[l] = _next[i]; 808 808 } else { … … 810 810 _last[l] = INVALID; 811 811 } 812 _level .set(i, l = new_level);812 _level[i] = l = new_level; 813 813 if (_first[l] == INVALID) { 814 814 _first[l] = _last[l] = i; 815 _prev .set(i, INVALID);816 _next .set(i, INVALID);817 } else { 818 _prev .set(_first[l], i);819 _next .set(i, _first[l]);815 _prev[i] = INVALID; 816 _next[i] = INVALID; 817 } else { 818 _prev[_first[l]] = i; 819 _next[i] = _first[l]; 820 820 _first[l] = i; 821 821 } … … 833 833 Item i = _first[l]; 834 834 if (_next[i] != INVALID) { 835 _prev .set(_next[i], INVALID);835 _prev[_next[i]] = INVALID; 836 836 _first[l] = _next[i]; 837 837 } else { … … 839 839 _last[l] = INVALID; 840 840 } 841 _level .set(i, _max_level);841 _level[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 .set(_next[i], _prev[i]);859 _prev[_next[i]] = _prev[i]; 860 860 } else { 861 861 _last[new_level] = _prev[i]; 862 862 } 863 863 if (_prev[i] != INVALID) { 864 _next .set(_prev[i], _next[i]);864 _next[_prev[i]] = _next[i]; 865 865 } else { 866 866 _first[new_level] = _next[i]; 867 867 } 868 _level .set(i, new_level);868 _level[i] = new_level; 869 869 if (_first[new_level] == INVALID) { 870 870 _first[new_level] = _last[new_level] = i; 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]);871 _prev[i] = INVALID; 872 _next[i] = INVALID; 873 } else { 874 _prev[_first[new_level]] = i; 875 _next[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 .set(i, _max_level - 1);891 _level[i] = _max_level - 1; 892 892 } 893 893 … … 900 900 Item n = _first[i]; 901 901 while (n != INVALID) { 902 _level .set(n, _max_level);902 _level[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 .set(i, _max_level);941 _active .set(i, false);940 _level[i] = _max_level; 941 _active[i] = false; 942 942 } 943 943 } … … 945 945 ///Add an item to the current level. 946 946 void initAddItem(Item i) { 947 _level .set(i, _init_level);947 _level[i] = _init_level; 948 948 if (_last[_init_level] == INVALID) { 949 949 _first[_init_level] = i; 950 950 _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);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; 957 957 _last[_init_level] = i; 958 958 }
Note: See TracChangeset
for help on using the changeset viewer.