Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Unified Diff: packages/collection/lib/src/canonicalized_map.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: packages/collection/lib/src/canonicalized_map.dart
diff --git a/packages/collection/lib/src/canonicalized_map.dart b/packages/collection/lib/src/canonicalized_map.dart
index 7ee3f86c4c717ae4f7c38c72fdf789d19ee926ea..a8af43a0a854b3a313b9d996a8018e69b6e52ef6 100644
--- a/packages/collection/lib/src/canonicalized_map.dart
+++ b/packages/collection/lib/src/canonicalized_map.dart
@@ -2,56 +2,53 @@
// 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.
-library dart.pkg.collection.canonicalized_map;
-
import 'dart:collection';
import 'utils.dart';
-/**
- * A map whose keys are converted to canonical values of type `C`.
- *
- * This is useful for using case-insensitive String keys, for example. It's more
- * efficient than a [LinkedHashMap] with a custom equality operator because it
- * only canonicalizes each key once, rather than doing so for each comparison.
- *
- * By default, `null` is allowed as a key. It can be forbidden via the
- * `isValidKey` parameter.
- */
+typedef C _Canonicalize<C, K>(K key);
+
+typedef bool _IsValidKey(Object key);
+
+/// A map whose keys are converted to canonical values of type `C`.
+///
+/// This is useful for using case-insensitive String keys, for example. It's
+/// more efficient than a [LinkedHashMap] with a custom equality operator
+/// because it only canonicalizes each key once, rather than doing so for each
+/// comparison.
+///
+/// By default, `null` is allowed as a key. It can be forbidden via the
+/// `isValidKey` parameter.
class CanonicalizedMap<C, K, V> implements Map<K, V> {
- final Function _canonicalize;
+ final _Canonicalize<C, K> _canonicalize;
- final Function _isValidKeyFn;
+ final _IsValidKey _isValidKeyFn;
final _base = new Map<C, Pair<K, V>>();
- /**
- * Creates an empty canonicalized map.
- *
- * The [canonicalize] function should return the canonical value for the given
- * key. Keys with the same canonical value are considered equivalent.
- *
- * The [isValidKey] function is called before calling [canonicalize] for
- * methods that take arbitrary objects. It can be used to filter out keys that
- * can't be canonicalized.
- */
+ /// Creates an empty canonicalized map.
+ ///
+ /// The [canonicalize] function should return the canonical value for the
+ /// given key. Keys with the same canonical value are considered equivalent.
+ ///
+ /// The [isValidKey] function is called before calling [canonicalize] for
+ /// methods that take arbitrary objects. It can be used to filter out keys
+ /// that can't be canonicalized.
CanonicalizedMap(C canonicalize(K key), {bool isValidKey(Object key)})
: _canonicalize = canonicalize,
_isValidKeyFn = isValidKey;
- /**
- * Creates a canonicalized map that is initialized with the key/value pairs of
- * [other].
- *
- * The [canonicalize] function should return the canonical value for the given
- * key. Keys with the same canonical value are considered equivalent.
- *
- * The [isValidKey] function is called before calling [canonicalize] for
- * methods that take arbitrary objects. It can be used to filter out keys that
- * can't be canonicalized.
- */
+ /// Creates a canonicalized map that is initialized with the key/value pairs
+ /// of [other].
+ ///
+ /// The [canonicalize] function should return the canonical value for the
+ /// given key. Keys with the same canonical value are considered equivalent.
+ ///
+ /// The [isValidKey] function is called before calling [canonicalize] for
+ /// methods that take arbitrary objects. It can be used to filter out keys
+ /// that can't be canonicalized.
CanonicalizedMap.from(Map<K, V> other, C canonicalize(K key),
- {bool isValidKey(Object key)})
+ {bool isValidKey(Object key)})
: _canonicalize = canonicalize,
_isValidKeyFn = isValidKey {
addAll(other);
@@ -59,11 +56,12 @@ class CanonicalizedMap<C, K, V> implements Map<K, V> {
V operator [](Object key) {
if (!_isValidKey(key)) return null;
- var pair = _base[_canonicalize(key)];
+ var pair = _base[_canonicalize(key as K)];
return pair == null ? null : pair.last;
}
void operator []=(K key, V value) {
+ if (!_isValidKey(key)) return;
_base[_canonicalize(key)] = new Pair(key, value);
}
@@ -77,7 +75,7 @@ class CanonicalizedMap<C, K, V> implements Map<K, V> {
bool containsKey(Object key) {
if (!_isValidKey(key)) return false;
- return _base.containsKey(_canonicalize(key));
+ return _base.containsKey(_canonicalize(key as K));
}
bool containsValue(Object value) =>
@@ -96,13 +94,14 @@ class CanonicalizedMap<C, K, V> implements Map<K, V> {
int get length => _base.length;
V putIfAbsent(K key, V ifAbsent()) {
- return _base.putIfAbsent(_canonicalize(key),
- () => new Pair(key, ifAbsent())).last;
+ return _base
+ .putIfAbsent(_canonicalize(key), () => new Pair(key, ifAbsent()))
+ .last;
}
V remove(Object key) {
if (!_isValidKey(key)) return null;
- var pair = _base.remove(_canonicalize(key));
+ var pair = _base.remove(_canonicalize(key as K));
return pair == null ? null : pair.last;
}
@@ -110,6 +109,7 @@ class CanonicalizedMap<C, K, V> implements Map<K, V> {
String toString() => Maps.mapToString(this);
- bool _isValidKey(Object key) => (key == null || key is K) &&
+ bool _isValidKey(Object key) =>
+ (key == null || key is K) &&
(_isValidKeyFn == null || _isValidKeyFn(key));
}
« no previous file with comments | « packages/collection/lib/src/algorithms.dart ('k') | packages/collection/lib/src/combined_wrappers/combined_iterable.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698