| 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) { |
| (...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 899 /// only the head entry itself). | 899 /// only the head entry itself). |
| 900 var _nextEntry; | 900 var _nextEntry; |
| 901 var _previousEntry; | 901 var _previousEntry; |
| 902 | 902 |
| 903 /* patch */ factory LinkedHashMap({ bool equals(K key1, K key2), | 903 /* patch */ factory LinkedHashMap({ bool equals(K key1, K key2), |
| 904 int hashCode(K key), | 904 int hashCode(K key), |
| 905 bool isValidKey(potentialKey) }) { | 905 bool isValidKey(potentialKey) }) { |
| 906 if (isValidKey == null) { | 906 if (isValidKey == null) { |
| 907 if (hashCode == null) { | 907 if (hashCode == null) { |
| 908 if (equals == null) { | 908 if (equals == null) { |
| 909 return new _LinkedHashMap<K, V>(); | 909 if (_useInternalCached) { |
| 910 return new _InternalLinkedHashMap<K, V>(); |
| 911 } else { |
| 912 return new _LinkedHashMap<K, V>(); |
| 913 } |
| 910 } | 914 } |
| 911 hashCode = _defaultHashCode; | 915 hashCode = _defaultHashCode; |
| 912 } else { | 916 } else { |
| 913 if (identical(identityHashCode, hashCode) && | 917 if (identical(identityHashCode, hashCode) && |
| 914 identical(identical, equals)) { | 918 identical(identical, equals)) { |
| 915 return new _LinkedIdentityHashMap<K, V>(); | 919 return new _LinkedIdentityHashMap<K, V>(); |
| 916 } | 920 } |
| 917 if (equals == null) { | 921 if (equals == null) { |
| 918 equals = _defaultEquals; | 922 equals = _defaultEquals; |
| 919 } | 923 } |
| 920 } | 924 } |
| 921 } else { | 925 } else { |
| 922 if (hashCode == null) { | 926 if (hashCode == null) { |
| 923 hashCode = _defaultHashCode; | 927 hashCode = _defaultHashCode; |
| 924 } | 928 } |
| 925 if (equals == null) { | 929 if (equals == null) { |
| 926 equals = _defaultEquals; | 930 equals = _defaultEquals; |
| 927 } | 931 } |
| 928 } | 932 } |
| 929 return new _LinkedCustomHashMap<K, V>(equals, hashCode, isValidKey); | 933 return new _LinkedCustomHashMap<K, V>(equals, hashCode, isValidKey); |
| 930 } | 934 } |
| 931 | 935 |
| 932 /* patch */ factory LinkedHashMap.identity() = _LinkedIdentityHashMap<K, V>; | 936 /* patch */ factory LinkedHashMap.identity() = _LinkedIdentityHashMap<K, V>; |
| 937 |
| 938 static final bool _useInternalCached = _useInternal; |
| 939 static bool get _useInternal native "LinkedHashMap_useInternal"; |
| 933 } | 940 } |
| 934 | 941 |
| 935 // Methods that are exactly the same in all three linked hash map variants. | 942 // Methods that are exactly the same in all three linked hash map variants. |
| 936 abstract class _LinkedHashMapMixin<K, V> implements LinkedHashMap<K, V> { | 943 abstract class _LinkedHashMapMixin<K, V> implements LinkedHashMap<K, V> { |
| 937 var _nextEntry; | 944 var _nextEntry; |
| 938 var _previousEntry; | 945 var _previousEntry; |
| 939 | 946 |
| 940 | 947 |
| 941 bool containsValue(Object value) { | 948 bool containsValue(Object value) { |
| 942 int modificationCount = _modificationCount; | 949 int modificationCount = _modificationCount; |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 return false; | 1253 return false; |
| 1247 } | 1254 } |
| 1248 _LinkedHashSetEntry entry = _next; | 1255 _LinkedHashSetEntry entry = _next; |
| 1249 _current = entry.key; | 1256 _current = entry.key; |
| 1250 _next = entry._nextEntry; | 1257 _next = entry._nextEntry; |
| 1251 return true; | 1258 return true; |
| 1252 } | 1259 } |
| 1253 | 1260 |
| 1254 E get current => _current; | 1261 E get current => _current; |
| 1255 } | 1262 } |
| OLD | NEW |