OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 library web_ui.observe.set; | 5 library web_ui.observe.set; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'observable.dart'; | 8 import 'observable.dart'; |
9 import 'map.dart' show MapFactory; | 9 import 'map.dart' show MapFactory; |
10 import 'package:web_ui/src/utils_observe.dart' show IterableWorkaround; | |
11 | 10 |
12 /** | 11 /** |
13 * Represents an observable set of model values. If any items are added, | 12 * Represents an observable set of model values. If any items are added, |
14 * removed, or replaced, then observers that are registered with | 13 * removed, or replaced, then observers that are registered with |
15 * [observe] will be notified. | 14 * [observe] will be notified. |
16 */ | 15 */ |
17 // TODO(jmesserly): ideally this could be based ObservableMap, or Dart | 16 // TODO(jmesserly): ideally this could be based ObservableMap, or Dart |
18 // would have a built in Set<->Map adapter as suggested in | 17 // would have a built in Set<->Map adapter as suggested in |
19 // https://code.google.com/p/dart/issues/detail?id=5603 | 18 // https://code.google.com/p/dart/issues/detail?id=5603 |
20 class ObservableSet<E> extends IterableWorkaround with Observable | 19 class ObservableSet<E> extends IterableBase<E> with Observable { |
21 implements Set<E> { | |
22 | 20 |
23 final Map<E, Object> _map; | 21 final Map<E, Object> _map; |
24 | 22 |
25 final MapFactory<E, Object> _createMap; | 23 final MapFactory<E, Object> _createMap; |
26 | 24 |
27 /** | 25 /** |
28 * Creates an observable set, optionally using the provided [createMap] | 26 * Creates an observable set, optionally using the provided [createMap] |
29 * factory to construct a custom map type. | 27 * factory to construct a custom map type. |
30 */ | 28 */ |
31 ObservableSet({MapFactory<E, Object> createMap}) | 29 ObservableSet({MapFactory<E, Object> createMap}) |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 _set.length; | 182 _set.length; |
185 return _hasNext = _iterator.moveNext(); | 183 return _hasNext = _iterator.moveNext(); |
186 } | 184 } |
187 | 185 |
188 E get current { | 186 E get current { |
189 var result = _iterator.current; | 187 var result = _iterator.current; |
190 if (observeReads && _hasNext) notifyRead(_set, ChangeRecord.INDEX, result); | 188 if (observeReads && _hasNext) notifyRead(_set, ChangeRecord.INDEX, result); |
191 return result; | 189 return result; |
192 } | 190 } |
193 } | 191 } |
OLD | NEW |