Chromium Code Reviews| Index: pkg/yaml/lib/src/yaml_map.dart |
| diff --git a/pkg/yaml/lib/src/yaml_map.dart b/pkg/yaml/lib/src/yaml_map.dart |
| index ab07c72b48d5aa98823159d954a10e5c8aa4d976..44c999f14e17c5f3aefd5d9cd42f6a2b2e58e8f8 100644 |
| --- a/pkg/yaml/lib/src/yaml_map.dart |
| +++ b/pkg/yaml/lib/src/yaml_map.dart |
| @@ -2,86 +2,39 @@ |
| // 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 yaml_map; |
| +library yaml.map; |
| + |
| +import 'dart:collection'; |
| + |
| +import 'package:collection/collection.dart'; |
| import 'deep_equals.dart'; |
| import 'utils.dart'; |
| -/// This class wraps behaves almost identically to the normal Dart Map |
| +/// This class behaves almost identically to the normal Dart [Map] |
| /// implementation, with the following differences: |
| /// |
| -/// * It allows null, NaN, boolean, list, and map keys. |
| +/// * It NaN, list, and map keys. |
|
Bob Nystrom
2014/05/09 00:18:56
"It NaN" -> "It allows NaN".
nweiz
2014/05/20 00:15:07
Done.
|
| /// * It defines `==` structurally. That is, `yamlMap1 == yamlMap2` if they |
| /// have the same contents. |
| /// * It has a compatible [hashCode] method. |
| -class YamlMap implements Map { |
| - final Map _map; |
| - |
| - YamlMap() : _map = new Map(); |
| - |
| - YamlMap.from(Map map) : _map = new Map.from(map); |
| - |
| - YamlMap._wrap(this._map); |
| - |
| - void addAll(Map other) { |
| - other.forEach((key, value) { |
| - this[key] = value; |
| - }); |
| +/// |
| +/// This class is deprecated. In future releases, this package will use |
| +/// a [HashMap] with a custom equality operation rather than a custom class. |
| +@Deprecated('1.0.0') |
| +class YamlMap extends DelegatingMap { |
| + YamlMap() |
| + : super(new HashMap(equals: deepEquals, hashCode: hashCodeFor)); |
| + |
| + YamlMap.from(Map map) |
| + : super(new HashMap(equals: deepEquals, hashCode: hashCodeFor)) { |
| + addAll(map); |
| } |
| - bool containsValue(value) => _map.containsValue(value); |
| - bool containsKey(key) => _map.containsKey(_wrapKey(key)); |
| - operator [](key) => _map[_wrapKey(key)]; |
| - operator []=(key, value) { _map[_wrapKey(key)] = value; } |
| - putIfAbsent(key, ifAbsent()) => _map.putIfAbsent(_wrapKey(key), ifAbsent); |
| - remove(key) => _map.remove(_wrapKey(key)); |
| - void clear() => _map.clear(); |
| - void forEach(void f(key, value)) => |
| - _map.forEach((k, v) => f(_unwrapKey(k), v)); |
| - Iterable get keys => _map.keys.map(_unwrapKey); |
| - Iterable get values => _map.values; |
| - int get length => _map.length; |
| - bool get isEmpty => _map.isEmpty; |
| - bool get isNotEmpty => _map.isNotEmpty; |
| - String toString() => _map.toString(); |
| - |
| - int get hashCode => hashCodeFor(_map); |
| + int get hashCode => hashCodeFor(this); |
| bool operator ==(other) { |
| if (other is! YamlMap) return false; |
| return deepEquals(this, other); |
| } |
| - |
| - /// Wraps an object for use as a key in the map. |
| - _wrapKey(obj) { |
| - if (obj != null && obj is! bool && obj is! List && |
| - (obj is! double || !obj.isNan) && |
| - (obj is! Map || obj is YamlMap)) { |
| - return obj; |
| - } else if (obj is Map) { |
| - return new YamlMap._wrap(obj); |
| - } |
| - return new _WrappedHashKey(obj); |
| - } |
| - |
| - /// Unwraps an object that was used as a key in the map. |
| - _unwrapKey(obj) => obj is _WrappedHashKey ? obj.value : obj; |
| -} |
| - |
| -/// A class for wrapping normally-unhashable objects that are being used as keys |
| -/// in a YamlMap. |
| -class _WrappedHashKey { |
| - final value; |
| - |
| - _WrappedHashKey(this.value); |
| - |
| - int get hashCode => hashCodeFor(value); |
| - |
| - String toString() => value.toString(); |
| - |
| - /// This is defined as both values being structurally equal. |
| - bool operator ==(other) { |
| - if (other is! _WrappedHashKey) return false; |
| - return deepEquals(this.value, other.value); |
| - } |
| } |