| Index: lib/src/canonicalized_map.dart
|
| diff --git a/lib/src/canonicalized_map.dart b/lib/src/canonicalized_map.dart
|
| index d967f70d005b5fafd981b4755a4e18b93438b1bf..cc78105eb18a926ade4d1742720715551154a140 100644
|
| --- a/lib/src/canonicalized_map.dart
|
| +++ b/lib/src/canonicalized_map.dart
|
| @@ -6,6 +6,10 @@ import 'dart:collection';
|
|
|
| import 'utils.dart';
|
|
|
| +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
|
| @@ -16,9 +20,9 @@ import 'utils.dart';
|
| /// 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>>();
|
|
|
| @@ -52,7 +56,7 @@ 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;
|
| }
|
|
|
| @@ -71,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,7 +100,7 @@ class CanonicalizedMap<C, K, V> implements Map<K, V> {
|
|
|
| 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;
|
| }
|
|
|
|
|