OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 patch class HashMap<K, V> { | 5 @patch class HashMap<K, V> { |
6 /* patch */ factory HashMap({ bool equals(K key1, K key2), | 6 /* @patch */ factory HashMap({ bool equals(K key1, K key2), |
7 int hashCode(K key), | 7 int hashCode(K key), |
8 bool isValidKey(potentialKey) }) { | 8 bool isValidKey(potentialKey) }) { |
9 if (isValidKey == null) { | 9 if (isValidKey == null) { |
10 if (hashCode == null) { | 10 if (hashCode == null) { |
11 if (equals == null) { | 11 if (equals == null) { |
12 return new _HashMap<K, V>(); | 12 return new _HashMap<K, V>(); |
13 } | 13 } |
14 hashCode = _defaultHashCode; | 14 hashCode = _defaultHashCode; |
15 } else { | 15 } else { |
16 if (identical(identityHashCode, hashCode) && | 16 if (identical(identityHashCode, hashCode) && |
17 identical(identical, equals)) { | 17 identical(identical, equals)) { |
18 return new _IdentityHashMap<K, V>(); | 18 return new _IdentityHashMap<K, V>(); |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 } | 511 } |
512 | 512 |
513 class _HashMapValueIterator<V> extends _HashMapIterator<V> { | 513 class _HashMapValueIterator<V> extends _HashMapIterator<V> { |
514 _HashMapValueIterator(HashMap map) : super(map); | 514 _HashMapValueIterator(HashMap map) : super(map); |
515 V get current { | 515 V get current { |
516 _HashMapEntry entry = _entry; | 516 _HashMapEntry entry = _entry; |
517 return (entry == null) ? null : entry.value; | 517 return (entry == null) ? null : entry.value; |
518 } | 518 } |
519 } | 519 } |
520 | 520 |
521 patch class HashSet<E> { | 521 @patch class HashSet<E> { |
522 /* patch */ factory HashSet({ bool equals(E e1, E e2), | 522 /* @patch */ factory HashSet({ bool equals(E e1, E e2), |
523 int hashCode(E e), | 523 int hashCode(E e), |
524 bool isValidKey(potentialKey) }) { | 524 bool isValidKey(potentialKey) }) { |
525 if (isValidKey == null) { | 525 if (isValidKey == null) { |
526 if (hashCode == null) { | 526 if (hashCode == null) { |
527 if (equals == null) { | 527 if (equals == null) { |
528 return new _HashSet<E>(); | 528 return new _HashSet<E>(); |
529 } | 529 } |
530 hashCode = _defaultHashCode; | 530 hashCode = _defaultHashCode; |
531 } else { | 531 } else { |
532 if (identical(identityHashCode, hashCode) && | 532 if (identical(identityHashCode, hashCode) && |
533 identical(identical, equals)) { | 533 identical(identical, equals)) { |
534 return new _IdentityHashSet<E>(); | 534 return new _IdentityHashSet<E>(); |
535 } | 535 } |
536 if (equals == null) { | 536 if (equals == null) { |
537 equals = _defaultEquals; | 537 equals = _defaultEquals; |
538 } | 538 } |
539 } | 539 } |
540 } else { | 540 } else { |
541 if (hashCode == null) { | 541 if (hashCode == null) { |
542 hashCode = _defaultHashCode; | 542 hashCode = _defaultHashCode; |
543 } | 543 } |
544 if (equals == null) { | 544 if (equals == null) { |
545 equals = _defaultEquals; | 545 equals = _defaultEquals; |
546 } | 546 } |
547 } | 547 } |
548 return new _CustomHashSet<E>(equals, hashCode, isValidKey); | 548 return new _CustomHashSet<E>(equals, hashCode, isValidKey); |
549 } | 549 } |
550 | 550 |
551 /* patch */ factory HashSet.identity() = _IdentityHashSet<E>; | 551 /* @patch */ factory HashSet.identity() = _IdentityHashSet<E>; |
552 } | 552 } |
553 | 553 |
554 class _HashSet<E> extends _HashSetBase<E> implements HashSet<E> { | 554 class _HashSet<E> extends _HashSetBase<E> implements HashSet<E> { |
555 static const int _INITIAL_CAPACITY = 8; | 555 static const int _INITIAL_CAPACITY = 8; |
556 | 556 |
557 List<_HashSetEntry> _buckets = new List(_INITIAL_CAPACITY); | 557 List<_HashSetEntry> _buckets = new List(_INITIAL_CAPACITY); |
558 int _elementCount = 0; | 558 int _elementCount = 0; |
559 int _modificationCount = 0; | 559 int _modificationCount = 0; |
560 | 560 |
561 bool _equals(e1, e2) => e1 == e2; | 561 bool _equals(e1, e2) => e1 == e2; |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 | 894 |
895 class _LinkedHashMapValueIterator<V> extends _LinkedHashMapIterator<V> { | 895 class _LinkedHashMapValueIterator<V> extends _LinkedHashMapIterator<V> { |
896 _LinkedHashMapValueIterator(LinkedHashMap map) : super(map); | 896 _LinkedHashMapValueIterator(LinkedHashMap map) : super(map); |
897 V _getValue(_LinkedHashMapEntry entry) => entry.value; | 897 V _getValue(_LinkedHashMapEntry entry) => entry.value; |
898 } | 898 } |
899 | 899 |
900 | 900 |
901 /** | 901 /** |
902 * A hash-based map that iterates keys and values in key insertion order. | 902 * A hash-based map that iterates keys and values in key insertion order. |
903 */ | 903 */ |
904 patch class LinkedHashMap<K, V> { | 904 @patch class LinkedHashMap<K, V> { |
905 /// Holds a double-linked list of entries in insertion order. | 905 /// Holds a double-linked list of entries in insertion order. |
906 /// The fields have the same name as the ones in [_LinkedHashMapEntry], | 906 /// The fields have the same name as the ones in [_LinkedHashMapEntry], |
907 /// and this map is itself used as the head entry of the list. | 907 /// and this map is itself used as the head entry of the list. |
908 /// Set to `this` when initialized, representing the empty list (containing | 908 /// Set to `this` when initialized, representing the empty list (containing |
909 /// only the head entry itself). | 909 /// only the head entry itself). |
910 var _nextEntry; | 910 var _nextEntry; |
911 var _previousEntry; | 911 var _previousEntry; |
912 | 912 |
913 /* patch */ factory LinkedHashMap({ bool equals(K key1, K key2), | 913 /* @patch */ factory LinkedHashMap({ bool equals(K key1, K key2), |
914 int hashCode(K key), | 914 int hashCode(K key), |
915 bool isValidKey(potentialKey) }) { | 915 bool isValidKey(potentialKey) }) { |
916 if (isValidKey == null) { | 916 if (isValidKey == null) { |
917 if (hashCode == null) { | 917 if (hashCode == null) { |
918 if (equals == null) { | 918 if (equals == null) { |
919 return new _InternalLinkedHashMap<K, V>(); | 919 return new _InternalLinkedHashMap<K, V>(); |
920 } | 920 } |
921 hashCode = _defaultHashCode; | 921 hashCode = _defaultHashCode; |
922 } else { | 922 } else { |
923 if (identical(identityHashCode, hashCode) && | 923 if (identical(identityHashCode, hashCode) && |
924 identical(identical, equals)) { | 924 identical(identical, equals)) { |
925 return new _CompactLinkedIdentityHashMap<K, V>(); | 925 return new _CompactLinkedIdentityHashMap<K, V>(); |
926 } | 926 } |
927 if (equals == null) { | 927 if (equals == null) { |
928 equals = _defaultEquals; | 928 equals = _defaultEquals; |
929 } | 929 } |
930 } | 930 } |
931 } else { | 931 } else { |
932 if (hashCode == null) { | 932 if (hashCode == null) { |
933 hashCode = _defaultHashCode; | 933 hashCode = _defaultHashCode; |
934 } | 934 } |
935 if (equals == null) { | 935 if (equals == null) { |
936 equals = _defaultEquals; | 936 equals = _defaultEquals; |
937 } | 937 } |
938 } | 938 } |
939 return new _CompactLinkedCustomHashMap<K, V>(equals, hashCode, isValidKey); | 939 return new _CompactLinkedCustomHashMap<K, V>(equals, hashCode, isValidKey); |
940 } | 940 } |
941 | 941 |
942 /* patch */ factory LinkedHashMap.identity() = | 942 /* @patch */ factory LinkedHashMap.identity() = |
943 _CompactLinkedIdentityHashMap<K, V>; | 943 _CompactLinkedIdentityHashMap<K, V>; |
944 } | 944 } |
945 | 945 |
946 patch class LinkedHashSet<E> { | 946 @patch class LinkedHashSet<E> { |
947 /* patch */ factory LinkedHashSet({ bool equals(E e1, E e2), | 947 /* @patch */ factory LinkedHashSet({ bool equals(E e1, E e2), |
948 int hashCode(E e), | 948 int hashCode(E e), |
949 bool isValidKey(potentialKey) }) { | 949 bool isValidKey(potentialKey) }) { |
950 if (isValidKey == null) { | 950 if (isValidKey == null) { |
951 if (hashCode == null) { | 951 if (hashCode == null) { |
952 if (equals == null) { | 952 if (equals == null) { |
953 return new _CompactLinkedHashSet<E>(); | 953 return new _CompactLinkedHashSet<E>(); |
954 } | 954 } |
955 hashCode = _defaultHashCode; | 955 hashCode = _defaultHashCode; |
956 } else { | 956 } else { |
957 if (identical(identityHashCode, hashCode) && | 957 if (identical(identityHashCode, hashCode) && |
958 identical(identical, equals)) { | 958 identical(identical, equals)) { |
959 return new _CompactLinkedIdentityHashSet<E>(); | 959 return new _CompactLinkedIdentityHashSet<E>(); |
960 } | 960 } |
961 if (equals == null) { | 961 if (equals == null) { |
962 equals = _defaultEquals; | 962 equals = _defaultEquals; |
963 } | 963 } |
964 } | 964 } |
965 } else { | 965 } else { |
966 if (hashCode == null) { | 966 if (hashCode == null) { |
967 hashCode = _defaultHashCode; | 967 hashCode = _defaultHashCode; |
968 } | 968 } |
969 if (equals == null) { | 969 if (equals == null) { |
970 equals = _defaultEquals; | 970 equals = _defaultEquals; |
971 } | 971 } |
972 } | 972 } |
973 return new _CompactLinkedCustomHashSet<E>(equals, hashCode, isValidKey); | 973 return new _CompactLinkedCustomHashSet<E>(equals, hashCode, isValidKey); |
974 } | 974 } |
975 | 975 |
976 /* patch */ factory LinkedHashSet.identity() = | 976 /* @patch */ factory LinkedHashSet.identity() = |
977 _CompactLinkedIdentityHashSet<E>; | 977 _CompactLinkedIdentityHashSet<E>; |
978 } | 978 } |
OLD | NEW |