Ticket #1303: x86_64-4055.diff
| File x86_64-4055.diff, 40.2 kB (added by Cyborg16, 4 years ago) |
|---|
Updated; diff against r4055 |
-
tango/util/container/model/IContainer.d
old new 22 22 23 23 interface IContainer (V) 24 24 { 25 uint size ();25 size_t size (); 26 26 27 27 bool isEmpty (); 28 28 … … 40 40 41 41 V[] toArray (V[] dst = null); 42 42 43 uint remove (V element, bool all);43 size_t remove (V element, bool all); 44 44 45 45 int opApply (int delegate(ref V value) dg); 46 46 47 uint replace (V oldElement, V newElement, bool all);47 size_t replace (V oldElement, V newElement, bool all); 48 48 } 49 49 50 50 -
tango/util/container/SortedMap.d
old new 43 43 bool take (ref V v) 44 44 bool take (K key, ref V v) 45 45 bool removeKey (K key) 46 uint remove (V value, bool all)47 uint remove (IContainer!(V) e, bool all)46 size_t remove (V value, bool all) 47 size_t remove (IContainer!(V) e, bool all) 48 48 49 49 bool add (K key, V value) 50 uint replace (V oldElement, V newElement, bool all)50 size_t replace (V oldElement, V newElement, bool all) 51 51 bool replacePair (K key, V oldElement, V newElement) 52 52 bool opIndexAssign (V element, K key) 53 53 K nearbyKey (K key, bool greater) 54 54 V opIndex (K key) 55 55 V* opIn_r (K key) 56 56 57 uint size ()57 size_t size () 58 58 bool isEmpty () 59 59 V[] toArray (V[] dst) 60 60 SortedMap dup () … … 86 86 private Comparator cmp; 87 87 private Compare!(V) cmpElem; 88 88 89 private intcount,89 private size_t count, 90 90 mutation; 91 91 92 92 … … 107 107 108 108 ***********************************************************************/ 109 109 110 private this (Comparator c, int n)110 private this (Comparator c, size_t n) 111 111 { 112 112 count = n; 113 113 cmpElem = &compareElem; … … 176 176 177 177 ***********************************************************************/ 178 178 179 final uint size ()179 final size_t size () 180 180 { 181 181 return count; 182 182 } … … 438 438 439 439 ************************************************************************/ 440 440 441 final uint remove (IContainer!(V) e, bool all)441 final size_t remove (IContainer!(V) e, bool all) 442 442 { 443 443 auto c = count; 444 444 foreach (v; e) … … 452 452 453 453 ***********************************************************************/ 454 454 455 final uint remove (V value, bool all = false)455 final size_t remove (V value, bool all = false) 456 456 { 457 uint i = count;457 size_t i = count; 458 458 if (count) 459 459 { 460 460 auto p = tree.findAttribute (value, cmpElem); … … 476 476 477 477 ***********************************************************************/ 478 478 479 final uint replace (V oldElement, V newElement, bool all = false)479 final size_t replace (V oldElement, V newElement, bool all = false) 480 480 { 481 uint c;481 size_t c; 482 482 483 483 if (count) 484 484 { … … 636 636 if (dst.length < count) 637 637 dst.length = count; 638 638 639 int i = 0;639 size_t i = 0; 640 640 foreach (k, v; this) 641 641 dst[i++] = v; 642 642 return dst [0 .. count]; … … 700 700 701 701 ***********************************************************************/ 702 702 703 private uint instances (V value)703 private size_t instances (V value) 704 704 { 705 705 if (count is 0) 706 706 return 0; … … 894 894 Ref node, 895 895 prior; 896 896 SortedMap owner; 897 uintmutation;897 size_t mutation; 898 898 899 899 /*************************************************************** 900 900 -
tango/util/container/HashSet.d
old new 34 34 bool contains (V element) 35 35 bool take (ref V element) 36 36 bool remove (V element) 37 uint remove (IContainer!(V) e)37 size_t remove (IContainer!(V) e) 38 38 bool replace (V oldElement, V newElement) 39 39 40 uint size ()40 size_t size () 41 41 bool isEmpty () 42 42 V[] toArray (V[] dst) 43 43 HashSet dup () 44 44 HashSet clear () 45 45 HashSet reset () 46 46 47 uint buckets ()48 void buckets ( uint cap)47 size_t buckets () 48 void buckets (size_t cap) 49 49 float threshold () 50 50 void threshold (float desired) 51 51 --- … … 68 68 private Ref table[]; 69 69 70 70 // number of elements contained 71 private uintcount;71 private size_t count; 72 72 73 73 // the threshold load factor 74 74 private float loadFactor; … … 77 77 private Alloc heap; 78 78 79 79 // mutation tag updates on each change 80 private uint mutation;80 private size_t mutation; 81 81 82 82 /*********************************************************************** 83 83 … … 145 145 146 146 ***********************************************************************/ 147 147 148 final uint size ()148 final size_t size () 149 149 { 150 150 return count; 151 151 } … … 231 231 232 232 ***********************************************************************/ 233 233 234 final uint remove (V element, bool all)234 final size_t remove (V element, bool all) 235 235 { 236 236 return remove(element) ? 1 : 0; 237 237 } … … 287 287 288 288 ***********************************************************************/ 289 289 290 final uint replace (V oldElement, V newElement, bool all)290 final size_t replace (V oldElement, V newElement, bool all) 291 291 { 292 292 return replace (oldElement, newElement) ? 1 : 0; 293 293 } … … 351 351 352 352 ************************************************************************/ 353 353 354 public uint remove (IContainer!(V) e)354 public size_t remove (IContainer!(V) e) 355 355 { 356 uint c;356 size_t c; 357 357 foreach (value; e) 358 358 if (remove (value)) 359 359 ++c; … … 400 400 401 401 ***********************************************************************/ 402 402 403 final uint buckets ()403 final size_t buckets () 404 404 { 405 405 return table ? table.length : 0; 406 406 } … … 413 413 414 414 ***********************************************************************/ 415 415 416 final void buckets ( uint cap)416 final void buckets (size_t cap) 417 417 { 418 418 if (cap < Container.defaultInitialBuckets) 419 419 cap = Container.defaultInitialBuckets; … … 468 468 if (dst.length < count) 469 469 dst.length = count; 470 470 471 int i = 0;471 size_t i = 0; 472 472 foreach (v; this) 473 473 dst[i++] = v; 474 474 return dst [0 .. count]; … … 501 501 502 502 if (table) 503 503 { 504 int c = 0;505 for ( int i = 0; i < table.length; ++i)504 size_t c = 0; 505 for (size_t i = 0; i < table.length; ++i) 506 506 { 507 507 for (auto p = table[i]; p; p = p.next) 508 508 { … … 539 539 float fc = count; 540 540 float ft = table.length; 541 541 if (fc / ft > loadFactor) 542 resize (2 * cast( int)(fc / loadFactor) + 1);542 resize (2 * cast(size_t)(fc / loadFactor) + 1); 543 543 } 544 544 545 545 /*********************************************************************** … … 548 548 549 549 ***********************************************************************/ 550 550 551 private void resize ( uint newCap)551 private void resize (size_t newCap) 552 552 { 553 553 //Stdout.formatln ("resize {}", newCap); 554 554 auto newtab = heap.allocate (newCap); … … 579 579 580 580 ***********************************************************************/ 581 581 582 private bool remove (Ref node, uint row)582 private bool remove (Ref node, size_t row) 583 583 { 584 584 auto hd = table[row]; 585 585 auto trail = hd; … … 683 683 684 684 private struct Iterator 685 685 { 686 uintrow;686 size_t row; 687 687 Ref cell, 688 688 prior; 689 689 Ref[] table; 690 690 HashSet owner; 691 uintmutation;691 size_t mutation; 692 692 693 693 /*************************************************************** 694 694 -
tango/util/container/CircularList.d
old new 28 28 29 29 --- 30 30 Iterator iterator () 31 uint opApply (int delegate(ref V value) dg)31 int opApply (int delegate(ref V value) dg) 32 32 33 33 CircularList add (V element) 34 CircularList addAt ( uint index, V element)34 CircularList addAt (size_t index, V element) 35 35 CircularList append (V element) 36 36 CircularList prepend (V element) 37 uint addAt (uint index, IContainer!(V) e)38 uint append (IContainer!(V) e)39 uint prepend (IContainer!(V) e)37 size_t addAt (size_t index, IContainer!(V) e) 38 size_t append (IContainer!(V) e) 39 size_t prepend (IContainer!(V) e) 40 40 41 41 bool take (ref V v) 42 42 bool contains (V element) 43 V get ( uint index)44 uint first (V element, uint startingIndex = 0)45 uint last (V element, uint startingIndex = 0)43 V get (size_t index) 44 size_t first (V element, size_t startingIndex = 0) 45 size_t last (V element, size_t startingIndex = 0) 46 46 47 47 V head () 48 48 V tail () … … 51 51 V removeHead () 52 52 V removeTail () 53 53 54 bool removeAt ( uint index)55 uint remove (V element, bool all)56 uint removeRange (uint fromIndex, uint toIndex)54 bool removeAt (size_t index) 55 size_t remove (V element, bool all) 56 size_t removeRange (size_t fromIndex, size_t toIndex) 57 57 58 uint replace (V oldElement, V newElement, bool all)59 bool replaceAt ( uint index, V element)58 size_t replace (V oldElement, V newElement, bool all) 59 bool replaceAt (size_t index, V element) 60 60 61 uint size ()61 size_t size () 62 62 bool isEmpty () 63 63 V[] toArray (V[] dst) 64 64 CircularList dup () 65 CircularList subset ( uint from, uint length)65 CircularList subset (size_t from, size_t length) 66 66 CircularList clear () 67 67 CircularList reset () 68 68 CircularList check () … … 82 82 private alias Heap!(Type) Alloc; 83 83 84 84 // number of elements contained 85 private uintcount;85 private size_t count; 86 86 87 87 // configured heap manager 88 88 private Alloc heap; 89 89 90 90 // mutation tag updates on each change 91 private uintmutation;91 private size_t mutation; 92 92 93 93 // head of the list. Null if empty 94 94 private Ref list; … … 111 111 112 112 ***********************************************************************/ 113 113 114 protected this (Ref h, uint c)114 protected this (Ref h, size_t c) 115 115 { 116 116 list = h; 117 117 count = c; … … 172 172 173 173 ***********************************************************************/ 174 174 175 final uint size ()175 final size_t size () 176 176 { 177 177 return count; 178 178 } … … 230 230 231 231 ***********************************************************************/ 232 232 233 final V get ( uint index)233 final V get (size_t index) 234 234 { 235 235 return cellAt(index).value; 236 236 } … … 238 238 /*********************************************************************** 239 239 240 240 Time complexity: O(n) 241 Returns size_t.max if no element found. 241 242 242 243 ***********************************************************************/ 243 244 244 final uint first (V element, uint startingIndex = 0)245 final size_t first (V element, size_t startingIndex = 0) 245 246 { 246 247 if (startingIndex < 0) 247 248 startingIndex = 0; 248 249 249 250 auto p = list; 250 251 if (p is null) 251 return uint.max;252 return size_t.max; 252 253 253 for ( uint i = 0; true; ++i)254 for (size_t i = 0; true; ++i) 254 255 { 255 256 if (i >= startingIndex && element == p.value) 256 257 return i; … … 259 260 if (p is list) 260 261 break; 261 262 } 262 return uint.max;263 return size_t.max; 263 264 } 264 265 265 266 /*********************************************************************** 266 267 267 268 Time complexity: O(n) 269 Returns size_t.max if no element found. 268 270 269 271 ***********************************************************************/ 270 272 271 final uint last (V element, uint startingIndex = 0)273 final size_t last (V element, size_t startingIndex = 0) 272 274 { 273 275 if (count is 0) 274 return uint.max;276 return size_t.max; 275 277 276 278 if (startingIndex >= count) 277 279 startingIndex = count - 1; … … 280 282 startingIndex = 0; 281 283 282 284 auto p = cellAt (startingIndex); 283 uint i = startingIndex;285 size_t i = startingIndex; 284 286 for (;;) 285 287 { 286 288 if (element == p.value) … … 294 296 --i; 295 297 } 296 298 } 297 return uint.max;299 return size_t.max; 298 300 } 299 301 300 302 /*********************************************************************** … … 303 305 304 306 ***********************************************************************/ 305 307 306 final CircularList subset ( uint from, uint length)308 final CircularList subset (size_t from, size_t length) 307 309 { 308 310 Ref newlist = null; 309 311 … … 313 315 auto p = cellAt (from); 314 316 auto current = newlist = heap.allocate.set (p.value); 315 317 316 for ( uint i = 1; i < length; ++i)318 for (size_t i = 1; i < length; ++i) 317 319 { 318 320 p = p.next; 319 321 if (p is null) … … 496 498 497 499 ***********************************************************************/ 498 500 499 final CircularList addAt ( uint index, V element)501 final CircularList addAt (size_t index, V element) 500 502 { 501 503 if (index is 0) 502 504 prepend (element); … … 514 516 515 517 ***********************************************************************/ 516 518 517 final CircularList replaceAt ( uint index, V element)519 final CircularList replaceAt (size_t index, V element) 518 520 { 519 521 cellAt(index).value = element; 520 522 mutate; … … 527 529 528 530 ***********************************************************************/ 529 531 530 final CircularList removeAt ( uint index)532 final CircularList removeAt (size_t index) 531 533 { 532 534 if (index is 0) 533 535 removeHead; … … 546 548 547 549 ***********************************************************************/ 548 550 549 final uint remove (V element, bool all)551 final size_t remove (V element, bool all) 550 552 { 551 553 auto c = count; 552 554 if (list) … … 591 593 592 594 ***********************************************************************/ 593 595 594 final uint replace (V oldElement, V newElement, bool all)596 final size_t replace (V oldElement, V newElement, bool all) 595 597 { 596 uint c;598 size_t c; 597 599 if (list) 598 600 { 599 601 auto p = list; … … 618 620 619 621 ***********************************************************************/ 620 622 621 final uint prepend (IContainer!(V) e)623 final size_t prepend (IContainer!(V) e) 622 624 { 623 625 Ref hd = null; 624 626 Ref current = null; … … 661 663 662 664 ***********************************************************************/ 663 665 664 final uint append (IContainer!(V) e)666 final size_t append (IContainer!(V) e) 665 667 { 666 668 auto c = count; 667 669 if (list is null) … … 685 687 686 688 ***********************************************************************/ 687 689 688 final uint addAt (uint index, IContainer!(V) e)690 final size_t addAt (size_t index, IContainer!(V) e) 689 691 { 690 692 auto c = count; 691 693 if (list is null || index is 0) … … 709 711 710 712 ***********************************************************************/ 711 713 712 final uint removeRange (uint fromIndex, uint toIndex)714 final size_t removeRange (size_t fromIndex, size_t toIndex) 713 715 { 714 716 auto p = cellAt (fromIndex); 715 717 auto last = list.prev; 716 718 auto c = count; 717 for ( uint i = fromIndex; i <= toIndex; ++i)719 for (size_t i = fromIndex; i <= toIndex; ++i) 718 720 { 719 721 auto n = p.next; 720 722 p.unlink; … … 751 753 if (dst.length < count) 752 754 dst.length = count; 753 755 754 int i = 0;756 size_t i = 0; 755 757 foreach (v; this) 756 758 dst[i++] = v; 757 759 return dst [0 .. count]; … … 782 784 783 785 if (list) 784 786 { 785 uint c = 0;787 size_t c = 0; 786 788 auto p = list; 787 789 do { 788 790 assert(p.prev.next is p); … … 803 805 804 806 ***********************************************************************/ 805 807 806 private uint instances (V element)808 private size_t instances (V element) 807 809 { 808 810 if (list) 809 811 return list.count (element); … … 815 817 816 818 ***********************************************************************/ 817 819 818 private void checkIndex ( uint i)820 private void checkIndex (size_t i) 819 821 { 820 822 if (i >= count) 821 823 throw new Exception ("out of range"); … … 851 853 852 854 ***********************************************************************/ 853 855 854 private Ref cellAt ( uint index)856 private Ref cellAt (size_t index) 855 857 { 856 858 checkIndex (index); 857 859 return list.nth (index); … … 933 935 head, 934 936 prior; 935 937 CircularList owner; 936 uintmutation;938 size_t mutation; 937 939 938 940 /*************************************************************** 939 941 -
tango/util/container/HashMap.d
old new 41 41 bool removeKey (K key) 42 42 bool take (ref V element) 43 43 bool take (K key, ref V element) 44 uint remove (V element, bool all)45 uint remove (IContainer!(V) e, bool all)46 uint replace (V oldElement, V newElement, bool all)44 size_t remove (V element, bool all) 45 size_t remove (IContainer!(V) e, bool all) 46 size_t replace (V oldElement, V newElement, bool all) 47 47 bool replacePair (K key, V oldElement, V newElement) 48 48 49 49 bool add (K key, V element) … … 51 51 V opIndex (K key) 52 52 V* opIn_r (K key) 53 53 54 uint size ()54 size_t size () 55 55 bool isEmpty () 56 56 V[] toArray (V[] dst) 57 57 HashMap dup () 58 58 HashMap clear () 59 59 HashMap reset () 60 uint buckets ()60 size_t buckets () 61 61 float threshold () 62 void buckets ( uint cap)62 void buckets (size_t cap) 63 63 void threshold (float desired) 64 64 Allocator allocator() 65 65 --- … … 82 82 private Ref table[]; 83 83 84 84 // number of elements contained 85 private uintcount;85 private size_t count; 86 86 87 87 // the threshold load factor 88 88 private float loadFactor; … … 91 91 private Alloc heap; 92 92 93 93 // mutation tag updates on each change 94 private uintmutation;94 private size_t mutation; 95 95 96 96 /*********************************************************************** 97 97 … … 169 169 170 170 ***********************************************************************/ 171 171 172 final uint size ()172 final size_t size () 173 173 { 174 174 return count; 175 175 } … … 526 526 527 527 ************************************************************************/ 528 528 529 final uint remove (IContainer!(V) e, bool all = false)529 final size_t remove (IContainer!(V) e, bool all = false) 530 530 { 531 inti = count;531 auto i = count; 532 532 foreach (value; e) 533 533 remove (value, all); 534 534 return i - count; … … 543 543 544 544 ************************************************************************/ 545 545 546 final uint remove (V element, bool all = false)546 final size_t remove (V element, bool all = false) 547 547 { 548 548 auto i = count; 549 549 … … 592 592 593 593 ************************************************************************/ 594 594 595 final uint replace (V oldElement, V newElement, bool all = false)595 final size_t replace (V oldElement, V newElement, bool all = false) 596 596 { 597 uint i;597 size_t i; 598 598 599 599 if (count && oldElement != newElement) 600 600 foreach (node; table) … … 649 649 650 650 ***********************************************************************/ 651 651 652 final uint buckets ()652 final size_t buckets () 653 653 { 654 654 return table ? table.length : 0; 655 655 } … … 665 665 666 666 ***********************************************************************/ 667 667 668 final void buckets ( uint cap)668 final void buckets (size_t cap) 669 669 { 670 670 if (cap < Container.defaultInitialBuckets) 671 671 cap = Container.defaultInitialBuckets; … … 683 683 684 684 ***********************************************************************/ 685 685 686 final void buckets ( uint cap, float threshold)686 final void buckets (size_t cap, float threshold) 687 687 { 688 688 loadFactor = threshold; 689 buckets (cast( int)(cap / threshold) + 1);689 buckets (cast(size_t)(cap / threshold) + 1); 690 690 } 691 691 692 692 /*********************************************************************** … … 741 741 if (dst.length < count) 742 742 dst.length = count; 743 743 744 int i = 0;744 size_t i = 0; 745 745 foreach (k, v; this) 746 746 dst[i++] = v; 747 747 return dst [0 .. count]; … … 774 774 775 775 if (table) 776 776 { 777 int c = 0;778 for ( int i=0; i < table.length; ++i)777 size_t c = 0; 778 for (size_t i=0; i < table.length; ++i) 779 779 for (auto p = table[i]; p; p = p.next) 780 780 { 781 781 ++c; … … 799 799 800 800 ***********************************************************************/ 801 801 802 private uint instances (V element)802 private size_t instances (V element) 803 803 { 804 uint c = 0;804 size_t c = 0; 805 805 foreach (node; table) 806 806 if (node) 807 807 c += node.count (element); … … 820 820 float fc = count; 821 821 float ft = table.length; 822 822 if (fc / ft > loadFactor) 823 resize (2 * cast( int)(fc / loadFactor) + 1);823 resize (2 * cast(size_t)(fc / loadFactor) + 1); 824 824 return this; 825 825 } 826 826 … … 830 830 831 831 ***********************************************************************/ 832 832 833 private void resize ( uint newCap)833 private void resize (size_t newCap) 834 834 { 835 835 // Stdout.formatln ("resize {}", newCap); 836 836 auto newtab = heap.allocate (newCap); … … 955 955 956 956 private struct Iterator 957 957 { 958 uintrow;958 size_t row; 959 959 Ref cell, 960 960 prior; 961 961 Ref[] table; 962 962 HashMap owner; 963 uintmutation;963 size_t mutation; 964 964 965 965 /*************************************************************** 966 966 -
tango/util/container/Container.d
old new 32 32 33 33 ***********************************************************************/ 34 34 35 static int defaultInitialBuckets = 31;35 static size_t defaultInitialBuckets = 31; 36 36 37 37 /*********************************************************************** 38 38 … … 67 67 68 68 ***********************************************************************/ 69 69 70 static uint hash(K) (K k, uint length)70 static size_t hash(K) (K k, size_t length) 71 71 { 72 72 static if (is(K : int) || is(K : uint) || 73 73 is(K : long) || is(K : ulong) || 74 74 is(K : short) || is(K : ushort) || 75 75 is(K : byte) || is(K : ubyte) || 76 76 is(K : char) || is(K : wchar) || is (K : dchar)) 77 return cast( uint) (k % length);77 return cast(size_t) (k % length); 78 78 else 79 79 return (typeid(K).getHash(&k) & 0x7FFFFFFF) % length; 80 80 } … … 104 104 105 105 ***************************************************************/ 106 106 107 T*[] allocate ( uint count)107 T*[] allocate (size_t count) 108 108 { 109 109 return new T*[count]; 110 110 } … … 191 191 192 192 ***************************************************************/ 193 193 194 T*[] allocate ( uint count)194 T*[] allocate (size_t count) 195 195 { 196 196 return (cast(T**) calloc(count, (T*).sizeof)) [0 .. count]; 197 197 } … … 268 268 { 269 269 private T[] list; 270 270 private T[][] lists; 271 private int index;272 private int freelists;273 private int presize = 0;274 private int chunks = 1000;271 private size_t index; 272 private size_t freelists; 273 private size_t presize = 0; 274 private size_t chunks = 1000; 275 275 276 276 private struct Discarded 277 277 { … … 285 285 286 286 ***************************************************************/ 287 287 288 void config ( int chunks, int presize)288 void config (size_t chunks, size_t presize) 289 289 { 290 290 this.chunks = chunks; 291 291 this.presize = presize; … … 322 322 323 323 ***************************************************************/ 324 324 325 T*[] allocate ( uint count)325 T*[] allocate (size_t count) 326 326 { 327 327 return (cast(T**) calloc(count, (T*).sizeof)) [0 .. count]; 328 328 } -
tango/util/container/LinkedList.d
old new 38 38 V removeTail () 39 39 40 40 bool contains (V value) 41 uint first (V value, uint startingIndex = 0)42 uint last (V value, uint startingIndex = 0)41 size_t first (V value, size_t startingIndex = 0) 42 size_t last (V value, size_t startingIndex = 0) 43 43 44 44 LinkedList add (V value) 45 45 LinkedList prepend (V value) 46 uint prepend (IContainer!(V) e)46 size_t prepend (IContainer!(V) e) 47 47 LinkedList append (V value) 48 uint append (IContainer!(V) e)49 LinkedList addAt ( uint index, V value)50 uint addAt (uint index, IContainer!(V) e)48 size_t append (IContainer!(V) e) 49 LinkedList addAt (size_t index, V value) 50 size_t addAt (size_t index, IContainer!(V) e) 51 51 52 V get ( uint index)52 V get (size_t index) 53 53 bool take (ref V v) 54 uint remove (V value, bool all)55 bool removeAt ( uint index)56 uint removeRange (uint fromIndex, uint toIndex)57 uint replace (V oldElement, V newElement, bool all)58 bool replaceAt ( uint index, V value)54 size_t remove (V value, bool all) 55 bool removeAt (size_t index) 56 size_t removeRange (size_t fromIndex, size_t toIndex) 57 size_t replace (V oldElement, V newElement, bool all) 58 bool replaceAt (size_t index, V value) 59 59 60 60 LinkedList clear () 61 61 LinkedList reset () 62 62 63 LinkedList subset ( uint from, uint length = int.max)63 LinkedList subset (size_t from, size_t length = size_t.max) 64 64 LinkedList dup () 65 65 66 uint size ()66 size_t size () 67 67 bool isEmpty () 68 68 V[] toArray (V[] dst) 69 69 LinkedList sort (Compare!(V) cmp) … … 85 85 private alias Heap!(Type) Alloc; 86 86 87 87 // number of elements contained 88 private uintcount;88 private size_t count; 89 89 90 90 // configured heap manager 91 91 private Alloc heap; 92 92 93 93 // mutation tag updates on each change 94 private uintmutation;94 private size_t mutation; 95 95 96 96 // head of the list. Null if empty 97 97 private Ref list; … … 113 113 114 114 ***********************************************************************/ 115 115 116 protected this (Ref l, int c)116 protected this (Ref l, size_t c) 117 117 { 118 118 list = l; 119 119 count = c; … … 173 173 174 174 ***********************************************************************/ 175 175 176 final uint size ()176 final size_t size () 177 177 { 178 178 return count; 179 179 } … … 232 232 233 233 ***********************************************************************/ 234 234 235 final V get ( uint index)235 final V get (size_t index) 236 236 { 237 237 return cellAt(index).value; 238 238 } … … 240 240 /*********************************************************************** 241 241 242 242 Time complexity: O(n) 243 Returns size_t.max if no element found. 243 244 244 245 ***********************************************************************/ 245 246 246 final uint first (V value, uint startingIndex = 0)247 final size_t first (V value, size_t startingIndex = 0) 247 248 { 248 249 if (list is null || startingIndex >= count) 249 return uint.max;250 return size_t.max; 250 251 251 252 if (startingIndex < 0) 252 253 startingIndex = 0; … … 258 259 if (i >= 0) 259 260 return i + startingIndex; 260 261 } 261 return uint.max;262 return size_t.max; 262 263 } 263 264 264 265 /*********************************************************************** 265 266 266 267 Time complexity: O(n) 268 Returns size_t.max if no element found. 267 269 268 270 ***********************************************************************/ 269 271 270 final uint last (V value, uint startingIndex = 0)272 final size_t last (V value, size_t startingIndex = 0) 271 273 { 272 274 if (list is null) 273 return uint.max;275 return size_t.max; 274 276 275 277 auto i = 0; 276 278 if (startingIndex >= count) 277 279 startingIndex = count - 1; 278 280 279 auto index = uint.max;281 auto index = size_t.max; 280 282 auto p = list; 281 283 while (i <= startingIndex && p) 282 284 { … … 294 296 295 297 ***********************************************************************/ 296 298 297 final LinkedList subset ( uint from, uint length = int.max)299 final LinkedList subset (size_t from, size_t length = size_t.max) 298 300 { 299 301 Ref newlist = null; 300 302 … … 410 412 411 413 ***********************************************************************/ 412 414 413 final uint remove (V value, bool all = false)415 final size_t remove (V value, bool all = false) 414 416 { 415 417 auto c = count; 416 418 if (c) … … 453 455 454 456 ***********************************************************************/ 455 457 456 final uint replace (V oldElement, V newElement, bool all = false)458 final size_t replace (V oldElement, V newElement, bool all = false) 457 459 { 458 uint c;460 size_t c; 459 461 if (count && oldElement != newElement) 460 462 { 461 463 auto p = list.find (oldElement); … … 566 568 567 569 ***********************************************************************/ 568 570 569 final LinkedList addAt ( uint index, V value)571 final LinkedList addAt (size_t index, V value) 570 572 { 571 573 if (index is 0) 572 574 prepend (value); … … 584 586 585 587 ***********************************************************************/ 586 588 587 final LinkedList removeAt ( uint index)589 final LinkedList removeAt (size_t index) 588 590 { 589 591 if (index is 0) 590 592 removeHead; … … 604 606 605 607 ***********************************************************************/ 606 608 607 final LinkedList replaceAt ( uint index, V value)609 final LinkedList replaceAt (size_t index, V value) 608 610 { 609 611 cellAt(index).value = value; 610 612 mutate; … … 617 619 618 620 ***********************************************************************/ 619 621 620 final uint prepend (IContainer!(V) e)622 final size_t prepend (IContainer!(V) e) 621 623 { 622 624 auto c = count; 623 625 splice_ (e, null, list); … … 630 632 631 633 ***********************************************************************/ 632 634 633 final uint append (IContainer!(V) e)635 final size_t append (IContainer!(V) e) 634 636 { 635 637 auto c = count; 636 638 if (list is null) … … 646 648 647 649 ***********************************************************************/ 648 650 649 final uint addAt (uint index, IContainer!(V) e)651 final size_t addAt (size_t index, IContainer!(V) e) 650 652 { 651 653 auto c = count; 652 654 if (index is 0) … … 665 667 666 668 ***********************************************************************/ 667 669 668 final uint removeRange (uint fromIndex, uint toIndex)670 final size_t removeRange (size_t fromIndex, size_t toIndex) 669 671 { 670 672 auto c = count; 671 673 if (fromIndex <= toIndex) … … 673 675 if (fromIndex is 0) 674 676 { 675 677 auto p = firstCell; 676 for ( int i = fromIndex; i <= toIndex; ++i)678 for (size_t i = fromIndex; i <= toIndex; ++i) 677 679 p = p.next; 678 680 list = p; 679 681 } … … 681 683 { 682 684 auto f = cellAt (fromIndex - 1); 683 685 auto p = f; 684 for ( int i = fromIndex; i <= toIndex; ++i)686 for (size_t i = fromIndex; i <= toIndex; ++i) 685 687 p = p.next; 686 688 f.next = p.next; 687 689 } … … 709 711 if (dst.length < count) 710 712 dst.length = count; 711 713 712 int i = 0;714 size_t i = 0; 713 715 foreach (v; this) 714 716 dst[i++] = v; 715 717 return dst [0 .. count]; … … 737 739 assert(((count is 0) is (list is null))); 738 740 assert((list is null || list.count is size)); 739 741 740 int c = 0;742 size_t c = 0; 741 743 for (Ref p = list; p; p = p.next) 742 744 { 743 745 assert(instances(p.value) > 0); … … 754 756 755 757 ***********************************************************************/ 756 758 757 private uint instances (V value)759 private size_t instances (V value) 758 760 { 759 761 if (count is 0) 760 762 return 0; … … 786 788 787 789 ***********************************************************************/ 788 790 789 private Ref cellAt ( uint index)791 private Ref cellAt (size_t index) 790 792 { 791 793 checkIndex (index); 792 794 return list.nth (index); … … 796 798 797 799 ***********************************************************************/ 798 800 799 private void checkIndex ( uint index)801 private void checkIndex (size_t index) 800 802 { 801 803 if (index >= count) 802 804 throw new Exception ("out of range"); … … 915 917 Ref* hook, 916 918 prior; 917 919 LinkedList owner; 918 uintmutation;920 size_t mutation; 919 921 920 922 /*************************************************************** 921 923










