Chromium Code Reviews| Index: sdk/lib/collection/linked_hash_map.dart |
| diff --git a/sdk/lib/collection/linked_hash_map.dart b/sdk/lib/collection/linked_hash_map.dart |
| index 3082ce0881a8b99736968e9a37839bb375c80bbb..12695d43073b8c89ff8a80eeafa573d4c20d7b60 100644 |
| --- a/sdk/lib/collection/linked_hash_map.dart |
| +++ b/sdk/lib/collection/linked_hash_map.dart |
| @@ -21,10 +21,49 @@ part of dart.collection; |
| class LinkedHashMap<K, V> implements Map<K, V> { |
| external LinkedHashMap(); |
| + static _id(x) => x; |
| + |
| factory LinkedHashMap.from(Map<K, V> other) { |
| return new LinkedHashMap<K, V>()..addAll(other); |
| } |
| + factory LinkedHashMap.fromIterable(Iterable iterable, |
| + {K key(element), V value(element)}) { |
| + |
| + LinkedHashMap<K, V> map = new LinkedHashMap<K, V>(); |
|
floitsch
2013/06/27 15:21:38
We start to have too much code-duplication.
Let's
zarah
2013/06/27 15:58:52
Agree! Done.
|
| + |
| + if (key == null) key = _id; |
| + if (value == null) value = _id; |
| + |
| + for (var element in iterable) { |
| + map[key(element)] = value(element); |
| + } |
| + |
| + return map; |
| + } |
| + |
| + factory LinkedHashMap.fromIterables(Iterable<K> keys, Iterable<V> values) { |
| + LinkedHashMap<K, V> map = new LinkedHashMap<K, V>(); |
| + |
| + Iterator<K> keyIterator = keys.iterator; |
| + Iterator<V> valueIterator = values.iterator; |
| + |
| + bool hasNextKey = keyIterator.moveNext(); |
| + bool hasNextValue = valueIterator.moveNext(); |
| + |
| + while (hasNextKey && hasNextValue) { |
| + map[keyIterator.current] = valueIterator.current; |
| + hasNextKey = keyIterator.moveNext(); |
| + hasNextValue = valueIterator.moveNext(); |
| + } |
| + |
| + if (hasNextKey || hasNextValue) { |
| + throw new ArgumentError("Iterables do not have same length."); |
| + } |
| + |
| + return map; |
| + } |
| + |
| external bool containsKey(Object key); |
| external bool containsValue(Object value); |