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

Unified Diff: quiver/lib/src/collection/bimap.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « quiver/lib/src/cache/map_cache.dart ('k') | quiver/lib/src/collection/delegates/iterable.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: quiver/lib/src/collection/bimap.dart
diff --git a/quiver/lib/src/collection/bimap.dart b/quiver/lib/src/collection/bimap.dart
deleted file mode 100644
index 0757aa5a7b4fa6c352cfaa3e73ee413e8bd31e10..0000000000000000000000000000000000000000
--- a/quiver/lib/src/collection/bimap.dart
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-part of quiver.collection;
-
-/**
- * A bi-directional map whose key-value pairs form a one-to-one correspondence.
- * BiMaps support an `inverse` property which gives access to an inverted view
- * of the map, such that there is a mapping (v, k) for each pair (k, v) in the
- * original map. Since a one-to-one key-value invariant applies, it is an error
- * to insert duplicate values into this map. It is also an error to insert null
- * keys or values into this map.
- */
-abstract class BiMap<K, V> implements Map<K, V> {
- /**
- * Creates a BiMap instance with the default implementation.
- */
- factory BiMap() => new HashBiMap();
-
- /**
- * Adds an association between key and value.
- *
- * Throws [ArgumentError] if an association involving [value] exists in the
- * map; otherwise, the association is inserted, overwriting any existing
- * association for the key.
- */
- void operator []=(K key, V value);
-
- /**
- * Replaces any existing associations(s) involving key and value.
- *
- * If an association involving [key] or [value] exists in the map, it is
- * removed.
- */
- void replace(K key, V value);
-
- /**
- * Returns the inverse of this map, with key-value pairs (v, k) for each
- * pair (k, v) in this map.
- */
- BiMap<V, K> get inverse;
-}
-
-/**
- * A hash-table based implementation of BiMap.
- */
-class HashBiMap<K, V> implements BiMap<K, V> {
- final Map<K, V> _map;
- final Map<V, K> _inverse;
- BiMap<V, K> _cached;
-
- HashBiMap() : this._from(new HashMap(), new HashMap());
- HashBiMap._from(this._map, this._inverse);
-
- V operator [](Object key) => _map[key];
- void operator []=(K key, V value) {
- _add(key, value, false);
- }
- void replace(K key, V value) {
- _add(key, value, true);
- }
- void addAll(Map<K, V> other) => other.forEach((k, v) => _add(k, v, false));
- bool containsKey(Object key) => _map.containsKey(key);
- bool containsValue(Object value) => _inverse.containsKey(value);
- void forEach(void f(K key, V value)) => _map.forEach(f);
- bool get isEmpty => _map.isEmpty;
- bool get isNotEmpty => _map.isNotEmpty;
- Iterable<K> get keys => _map.keys;
- int get length => _map.length;
- Iterable<V> get values => _inverse.keys;
-
- BiMap<V, K> get inverse {
- if (_cached == null) {
- _cached = new HashBiMap._from(_inverse, _map);
- }
- return _cached;
- }
-
- V putIfAbsent(K key, V ifAbsent()) {
- var value = _map[key];
- if (value != null) return value;
- if (!_map.containsKey(key)) return _add(key, ifAbsent(), false);
- return null;
- }
-
- V remove(Object key) {
- _inverse.remove(_map[key]);
- return _map.remove(key);
- }
-
- void clear() {
- _map.clear();
- _inverse.clear();
- }
-
- V _add(K key, V value, bool replace) {
- if (key == null) throw new ArgumentError("null key");
- if (value == null) throw new ArgumentError("null value");
- var oldValue = _map[key];
- if (oldValue == value) return value;
- if (_inverse.containsKey(value)) {
- if (!replace) throw new ArgumentError("Mapping for $value exists");
- _map.remove(_inverse[value]);
- }
- _inverse.remove(oldValue);
- _map[key] = value;
- _inverse[value] = key;
- return value;
- }
-}
« no previous file with comments | « quiver/lib/src/cache/map_cache.dart ('k') | quiver/lib/src/collection/delegates/iterable.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698