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 observe.src.observable_list; | 5 library observe.src.observable_list; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection' show ListBase, UnmodifiableListView; | 8 import 'dart:collection' show ListBase, UnmodifiableListView; |
9 import 'package:observe/observe.dart'; | 9 import 'package:observe/observe.dart'; |
10 import 'list_diff.dart' show projectListSplices, calcSplices; | 10 import 'list_diff.dart' show projectListSplices, calcSplices; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 } | 84 } |
85 } | 85 } |
86 | 86 |
87 _list.length = value; | 87 _list.length = value; |
88 } | 88 } |
89 | 89 |
90 @reflectable E operator [](int index) => _list[index]; | 90 @reflectable E operator [](int index) => _list[index]; |
91 | 91 |
92 @reflectable void operator []=(int index, E value) { | 92 @reflectable void operator []=(int index, E value) { |
93 var oldValue = _list[index]; | 93 var oldValue = _list[index]; |
94 if (hasListObservers) { | 94 if (hasListObservers && oldValue != value) { |
95 _recordChange(new ListChangeRecord(this, index, addedCount: 1, | 95 _recordChange(new ListChangeRecord(this, index, addedCount: 1, |
96 removed: [oldValue])); | 96 removed: [oldValue])); |
97 } | 97 } |
98 _list[index] = value; | 98 _list[index] = value; |
99 } | 99 } |
100 | 100 |
101 // Forwarders so we can reflect on the properties. | 101 // Forwarders so we can reflect on the properties. |
102 @reflectable bool get isEmpty => super.isEmpty; | 102 @reflectable bool get isEmpty => super.isEmpty; |
103 @reflectable bool get isNotEmpty => super.isNotEmpty; | 103 @reflectable bool get isNotEmpty => super.isNotEmpty; |
104 | 104 |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 | 295 |
296 for (var change in changeRecords) { | 296 for (var change in changeRecords) { |
297 int addEnd = change.index + change.addedCount; | 297 int addEnd = change.index + change.addedCount; |
298 int removeEnd = change.index + change.removed.length; | 298 int removeEnd = change.index + change.removed.length; |
299 | 299 |
300 var addedItems = current.getRange(change.index, addEnd); | 300 var addedItems = current.getRange(change.index, addEnd); |
301 previous.replaceRange(change.index, removeEnd, addedItems); | 301 previous.replaceRange(change.index, removeEnd, addedItems); |
302 } | 302 } |
303 } | 303 } |
304 } | 304 } |
OLD | NEW |