Index: packages/collection/lib/src/equality_map.dart |
diff --git a/packages/collection/lib/src/equality_map.dart b/packages/collection/lib/src/equality_map.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..14f074c637c1f55cca0959ea43b283307f469be4 |
--- /dev/null |
+++ b/packages/collection/lib/src/equality_map.dart |
@@ -0,0 +1,31 @@ |
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+import 'dart:collection'; |
+ |
+import 'equality.dart'; |
+import 'wrappers.dart'; |
+ |
+/// A [Map] whose key equality is determined by an [Equality] object. |
+class EqualityMap<K, V> extends DelegatingMap<K, V> { |
+ /// Creates a map with equality based on [equality]. |
+ EqualityMap(Equality<K> equality) |
+ : super(new LinkedHashMap( |
+ equals: equality.equals, |
+ hashCode: equality.hash, |
+ isValidKey: equality.isValidKey)); |
+ |
+ /// Creates a map with equality based on [equality] that contains all |
+ /// key-value pairs of [other]. |
+ /// |
+ /// If [other] has multiple keys that are equivalent according to [equality], |
+ /// the last one reached during iteration takes precedence. |
+ EqualityMap.from(Equality<K> equality, Map<K, V> other) |
+ : super(new LinkedHashMap( |
+ equals: equality.equals, |
+ hashCode: equality.hash, |
+ isValidKey: equality.isValidKey)) { |
+ addAll(other); |
+ } |
+} |