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.list_diff; | 5 library observe.src.list_diff; |
6 | 6 |
7 import 'dart:math' as math; | 7 import 'dart:math' as math; |
8 import 'dart:collection' show UnmodifiableListView; | 8 import 'dart:collection' show UnmodifiableListView; |
9 | 9 |
10 /** | 10 /** |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 * model.insertAll(0, ['c', 'd', 'e']); | 374 * model.insertAll(0, ['c', 'd', 'e']); |
375 * model.removeRange(1, 3); | 375 * model.removeRange(1, 3); |
376 * model.insert(1, 'f'); | 376 * model.insert(1, 'f'); |
377 * | 377 * |
378 * Here, we inserted some records and then removed some of them. | 378 * Here, we inserted some records and then removed some of them. |
379 * If someone processed these records naively, they would "play back" the | 379 * If someone processed these records naively, they would "play back" the |
380 * insert incorrectly, because those items will be shifted. | 380 * insert incorrectly, because those items will be shifted. |
381 */ | 381 */ |
382 List<ListChangeRecord> projectListSplices(List list, | 382 List<ListChangeRecord> projectListSplices(List list, |
383 List<ListChangeRecord> records) { | 383 List<ListChangeRecord> records) { |
384 if (records.length == 1) return records; | 384 if (records.length <= 1) return records; |
385 | 385 |
386 var splices = []; | 386 var splices = []; |
387 for (var splice in _createInitialSplices(list, records)) { | 387 for (var splice in _createInitialSplices(list, records)) { |
388 if (splice.addedCount == 1 && splice.removed.length == 1) { | 388 if (splice.addedCount == 1 && splice.removed.length == 1) { |
389 if (splice.removed[0] != list[splice.index]) splices.add(splice); | 389 if (splice.removed[0] != list[splice.index]) splices.add(splice); |
390 continue; | 390 continue; |
391 } | 391 } |
392 | 392 |
393 splices.addAll(calcSplices(list, splice.index, | 393 splices.addAll(calcSplices(list, splice.index, |
394 splice.index + splice.addedCount, splice._removed, 0, | 394 splice.index + splice.addedCount, splice._removed, 0, |
395 splice.removed.length)); | 395 splice.removed.length)); |
396 } | 396 } |
397 | 397 |
398 return splices; | 398 return splices; |
399 } | 399 } |
OLD | NEW |