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

Side by Side Diff: samples/ui_lib/observable/observable.dart

Issue 11238035: Make isEmpty a getter. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update status file with co19 issue number. Created 8 years, 1 month 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 | « samples/ui_lib/observable/ChangeEvent.dart ('k') | samples/ui_lib/touch/Momentum.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) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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('observable'); 5 #library('observable');
6 6
7 #import('dart:coreimpl'); 7 #import('dart:coreimpl');
8 8
9 #source('ChangeEvent.dart'); 9 #source('ChangeEvent.dart');
10 #source('EventBatch.dart'); 10 #source('EventBatch.dart');
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 260
261 // Iterable<T>: 261 // Iterable<T>:
262 Iterator<T> iterator() => _internal.iterator(); 262 Iterator<T> iterator() => _internal.iterator();
263 263
264 // Collection<T>: 264 // Collection<T>:
265 Collection<T> filter(bool f(T element)) => _internal.filter(f); 265 Collection<T> filter(bool f(T element)) => _internal.filter(f);
266 Collection map(f(T element)) => _internal.map(f); 266 Collection map(f(T element)) => _internal.map(f);
267 bool every(bool f(T element)) => _internal.every(f); 267 bool every(bool f(T element)) => _internal.every(f);
268 bool some(bool f(T element)) => _internal.some(f); 268 bool some(bool f(T element)) => _internal.some(f);
269 void forEach(void f(T element)) { _internal.forEach(f); } 269 void forEach(void f(T element)) { _internal.forEach(f); }
270 bool isEmpty() => length == 0; 270 bool get isEmpty => length == 0;
271 } 271 }
272 272
273 // TODO(jmesserly): is this too granular? Other similar systems make whole 273 // TODO(jmesserly): is this too granular? Other similar systems make whole
274 // classes observable instead of individual fields. The memory cost of having 274 // classes observable instead of individual fields. The memory cost of having
275 // every field effectively boxed, plus having a listeners list is likely too 275 // every field effectively boxed, plus having a listeners list is likely too
276 // much. Also, making a value observable necessitates adding ".value" to lots 276 // much. Also, making a value observable necessitates adding ".value" to lots
277 // of places, and constructing all fields with the verbose 277 // of places, and constructing all fields with the verbose
278 // "new ObservableValue<DataType>(myValue)". 278 // "new ObservableValue<DataType>(myValue)".
279 /** A wrapper around a single value whose change can be observed. */ 279 /** A wrapper around a single value whose change can be observed. */
280 class ObservableValue<T> extends AbstractObservable { 280 class ObservableValue<T> extends AbstractObservable {
281 ObservableValue(T value, [Observable parent = null]) 281 ObservableValue(T value, [Observable parent = null])
282 : super(parent), _value = value; 282 : super(parent), _value = value;
283 283
284 T get value => _value; 284 T get value => _value;
285 285
286 void set value(T newValue) { 286 void set value(T newValue) {
287 // Only fire on an actual change. 287 // Only fire on an actual change.
288 // TODO(terry): An object identity test === is needed. Each DataSource has 288 // TODO(terry): An object identity test === is needed. Each DataSource has
289 // its own operator == which does a value compare. Which 289 // its own operator == which does a value compare. Which
290 // equality check should be done? 290 // equality check should be done?
291 if (newValue !== _value) { 291 if (newValue !== _value) {
292 final oldValue = _value; 292 final oldValue = _value;
293 _value = newValue; 293 _value = newValue;
294 recordPropertyUpdate("value", newValue, oldValue); 294 recordPropertyUpdate("value", newValue, oldValue);
295 } 295 }
296 } 296 }
297 297
298 T _value; 298 T _value;
299 } 299 }
OLDNEW
« no previous file with comments | « samples/ui_lib/observable/ChangeEvent.dart ('k') | samples/ui_lib/touch/Momentum.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698