OLD | NEW |
---|---|
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 | 5 |
6 // TODO(srdjan): Use shared array implementation. | 6 // TODO(srdjan): Use shared array implementation. |
7 class _ObjectArray<E> implements List<E> { | 7 class _ObjectArray<E> implements List<E> { |
8 | 8 |
9 factory _ObjectArray(length) native "ObjectArray_allocate"; | 9 factory _ObjectArray(length) native "ObjectArray_allocate"; |
10 | 10 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
70 void removeRange(int start, int length) { | 70 void removeRange(int start, int length) { |
71 throw new UnsupportedError( | 71 throw new UnsupportedError( |
72 "Cannot remove range of a non-extendable array"); | 72 "Cannot remove range of a non-extendable array"); |
73 } | 73 } |
74 | 74 |
75 void insertRange(int start, int length, [E initialValue = null]) { | 75 void insertRange(int start, int length, [E initialValue = null]) { |
76 throw new UnsupportedError( | 76 throw new UnsupportedError( |
77 "Cannot insert range in a non-extendable array"); | 77 "Cannot insert range in a non-extendable array"); |
78 } | 78 } |
79 | 79 |
80 List<E> getRange(int start, int length) { | 80 |
81 if (length == 0) return []; | 81 List<E> sublist(int start, [int end]) { |
82 Arrays.rangeCheck(this, start, length); | 82 Arrays.indicesCheck(this, start, end); |
floitsch
2013/03/14 15:46:06
I would make this an IterableMixinWorkaround metho
Lasse Reichstein Nielsen
2013/03/15 09:13:09
It would not be a method on a mixin when we get mi
| |
83 if (end == null) end = this.length; | |
84 int length = end - start; | |
85 if (start == end) return []; | |
83 List list = new _GrowableObjectArray<E>.withCapacity(length); | 86 List list = new _GrowableObjectArray<E>.withCapacity(length); |
84 list.length = length; | 87 list.length = length; |
85 Arrays.copy(this, start, list, 0, length); | 88 Arrays.copy(this, start, list, 0, length); |
86 return list; | 89 return list; |
87 } | 90 } |
88 | 91 |
92 List<E> getRange(int start, int length) => sublist(start, start + length); | |
93 | |
89 // Iterable interface. | 94 // Iterable interface. |
90 | 95 |
91 bool contains(E element) { | 96 bool contains(E element) { |
92 return IterableMixinWorkaround.contains(this, element); | 97 return IterableMixinWorkaround.contains(this, element); |
93 } | 98 } |
94 | 99 |
95 void forEach(f(E element)) { | 100 void forEach(f(E element)) { |
96 IterableMixinWorkaround.forEach(this, f); | 101 IterableMixinWorkaround.forEach(this, f); |
97 } | 102 } |
98 | 103 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
308 void removeRange(int start, int length) { | 313 void removeRange(int start, int length) { |
309 throw new UnsupportedError( | 314 throw new UnsupportedError( |
310 "Cannot remove range of an immutable array"); | 315 "Cannot remove range of an immutable array"); |
311 } | 316 } |
312 | 317 |
313 void insertRange(int start, int length, [E initialValue = null]) { | 318 void insertRange(int start, int length, [E initialValue = null]) { |
314 throw new UnsupportedError( | 319 throw new UnsupportedError( |
315 "Cannot insert range in an immutable array"); | 320 "Cannot insert range in an immutable array"); |
316 } | 321 } |
317 | 322 |
318 List<E> getRange(int start, int length) { | 323 List<E> sublist(int start, [int end]) { |
319 if (length == 0) return []; | 324 Arrays.indicesCheck(this, start, end); |
320 Arrays.rangeCheck(this, start, length); | 325 if (end == null) end = this.length; |
326 int length = end - start; | |
327 if (start == end) return []; | |
321 List list = new List<E>(); | 328 List list = new List<E>(); |
322 list.length = length; | 329 list.length = length; |
323 Arrays.copy(this, start, list, 0, length); | 330 Arrays.copy(this, start, list, 0, length); |
324 return list; | 331 return list; |
325 } | 332 } |
326 | 333 |
334 List<E> getRange(int start, int length) => sublist(start, start + length); | |
335 | |
327 // Collection interface. | 336 // Collection interface. |
328 | 337 |
329 bool contains(E element) { | 338 bool contains(E element) { |
330 return IterableMixinWorkaround.contains(this, element); | 339 return IterableMixinWorkaround.contains(this, element); |
331 } | 340 } |
332 | 341 |
333 void forEach(f(E element)) { | 342 void forEach(f(E element)) { |
334 IterableMixinWorkaround.forEach(this, f); | 343 IterableMixinWorkaround.forEach(this, f); |
335 } | 344 } |
336 | 345 |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
506 } | 515 } |
507 _position = _length; | 516 _position = _length; |
508 _current = null; | 517 _current = null; |
509 return false; | 518 return false; |
510 } | 519 } |
511 | 520 |
512 E get current { | 521 E get current { |
513 return _current; | 522 return _current; |
514 } | 523 } |
515 } | 524 } |
OLD | NEW |