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

Side by Side Diff: sdk/lib/collection/maps.dart

Issue 253023004: Add MapMixin to dart:collection. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tests/corelib/map_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.collection; 5 part of dart.collection;
6 6
7 /** 7 /**
8 * Base class for implementing a [Map]. 8 * Base class for implementing a [Map].
9 * 9 *
10 * This class has a basic implementation of all but five of the members of 10 * This class has a basic implementation of all but five of the members of
11 * [Map]. 11 * [Map].
12 * A basic `Map` class can be implemented by extending this class and 12 * A basic `Map` class can be implemented by extending this class and
kevmoo 2014/04/29 13:41:11 While you're at it, add a blank line here, too.
Lasse Reichstein Nielsen 2014/04/29 13:52:27 I wanted this to be part of the same paragraph as
13 * implementing `keys`, `operator[]`, `operator[]=`, `remove` and `clear`. 13 * implementing `keys`, `operator[]`, `operator[]=`, `remove` and `clear`.
14 * The remaining operations are implemented in terms of these five. 14 * The remaining operations are implemented in terms of these five.
15 * 15 *
16 * The `keys` iterable should have efficient [length] and [contains] 16 * The `keys` iterable should have efficient [length] and [contains]
17 * operations, and it should catch concurrent modifications of the keys 17 * operations, and it should catch concurrent modifications of the keys
18 * while iterating. 18 * while iterating.
19 * 19 *
20 * A more efficient implementation is usually possible by overriding 20 * A more efficient implementation is usually possible by overriding
21 * some of the other members as well. 21 * some of the other members as well.
22 */ 22 */
23 abstract class MapBase<K, V> implements Map<K, V> { 23 abstract class MapBase<K, V> = Object with MapMixin<K, V>;
24 MapBase(); // Prevents use as mixin.
25 24
25
26 /**
27 * Mixin implementing a [Map].
28 *
29 * This mixin has a basic implementation of all but five of the members of
30 * [Map].
31 * A basic `Map` class can be implemented by mixin in this class and
kevmoo 2014/04/29 13:41:11 include a blank line after the first sentence.
32 * implementing `keys`, `operator[]`, `operator[]=`, `remove` and `clear`.
33 * The remaining operations are implemented in terms of these five.
34 *
35 * The `keys` iterable should have efficient [length] and [contains]
36 * operations, and it should catch concurrent modifications of the keys
37 * while iterating.
38 *
39 * A more efficient implementation is usually possible by overriding
40 * some of the other members as well.
41 */
42 abstract class MapMixin<K, V> implements Map<K, V> {
26 Iterable<K> get keys; 43 Iterable<K> get keys;
27 V operator[](Object key); 44 V operator[](Object key);
28 operator []=(K key, V value); 45 operator []=(K key, V value);
29 V remove(Object key); 46 V remove(Object key);
30 // The `clear` operation should not be based on `remove`. 47 // The `clear` operation should not be based on `remove`.
31 // It should clear the map even if some keys are not equal to themselves. 48 // It should clear the map even if some keys are not equal to themselves.
32 void clear(); 49 void clear();
33 50
34 void forEach(void action(K key, V value)) { 51 void forEach(void action(K key, V value)) {
35 for (K key in keys) { 52 for (K key in keys) {
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 map[keyIterator.current] = valueIterator.current; 348 map[keyIterator.current] = valueIterator.current;
332 hasNextKey = keyIterator.moveNext(); 349 hasNextKey = keyIterator.moveNext();
333 hasNextValue = valueIterator.moveNext(); 350 hasNextValue = valueIterator.moveNext();
334 } 351 }
335 352
336 if (hasNextKey || hasNextValue) { 353 if (hasNextKey || hasNextValue) {
337 throw new ArgumentError("Iterables do not have same length."); 354 throw new ArgumentError("Iterables do not have same length.");
338 } 355 }
339 } 356 }
340 } 357 }
OLDNEW
« no previous file with comments | « no previous file | tests/corelib/map_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698