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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 void retainWhere(bool test(E element)) { | 58 void retainWhere(bool test(E element)) { |
59 throw new UnsupportedError( | 59 throw new UnsupportedError( |
60 "Cannot remove element of a non-extendable array"); | 60 "Cannot remove element of a non-extendable array"); |
61 } | 61 } |
62 | 62 |
63 Iterable<E> getRange(int start, [int end]) { | 63 Iterable<E> getRange(int start, [int end]) { |
64 return IterableMixinWorkaround.getRangeList(this, start, end); | 64 return IterableMixinWorkaround.getRangeList(this, start, end); |
65 } | 65 } |
66 | 66 |
67 // List interface. | 67 // List interface. |
68 void setRange(int start, int length, List<E> from, [int startFrom = 0]) { | 68 void setRange(int start, int end, List<E> from, [int startFrom = 0]) { |
69 if (length < 0) { | 69 if (start < 0 || start > this.length) { |
70 throw new ArgumentError("negative length $length"); | 70 throw new RangeError.range(start, 0, this.length); |
71 } | 71 } |
| 72 if (end < 0 || end > this.length) { |
| 73 throw new RangeError.range(end, start, this.length); |
| 74 } |
| 75 int length = end - start; |
72 if (from is _ObjectArray) { | 76 if (from is _ObjectArray) { |
73 _copyFromObjectArray(from, startFrom, start, length); | 77 _copyFromObjectArray(from, startFrom, start, length); |
74 } else { | 78 } else { |
75 Arrays.copy(from, startFrom, this, start, length); | 79 Arrays.copy(from, startFrom, this, start, length); |
76 } | 80 } |
77 } | 81 } |
78 | 82 |
79 void removeRange(int start, int length) { | 83 void removeRange(int start, int length) { |
80 throw new UnsupportedError( | 84 throw new UnsupportedError( |
81 "Cannot remove range of a non-extendable array"); | 85 "Cannot remove range of a non-extendable array"); |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 void retainWhere(bool test(E element)) { | 314 void retainWhere(bool test(E element)) { |
311 throw new UnsupportedError( | 315 throw new UnsupportedError( |
312 "Cannot modify an immutable array"); | 316 "Cannot modify an immutable array"); |
313 } | 317 } |
314 | 318 |
315 void copyFrom(List src, int srcStart, int dstStart, int count) { | 319 void copyFrom(List src, int srcStart, int dstStart, int count) { |
316 throw new UnsupportedError( | 320 throw new UnsupportedError( |
317 "Cannot modify an immutable array"); | 321 "Cannot modify an immutable array"); |
318 } | 322 } |
319 | 323 |
320 void setRange(int start, int length, List<E> from, [int startFrom = 0]) { | 324 void setRange(int start, int end, List<E> from, [int startFrom = 0]) { |
321 throw new UnsupportedError( | 325 throw new UnsupportedError( |
322 "Cannot modify an immutable array"); | 326 "Cannot modify an immutable array"); |
323 } | 327 } |
324 | 328 |
325 void removeRange(int start, int length) { | 329 void removeRange(int start, int length) { |
326 throw new UnsupportedError( | 330 throw new UnsupportedError( |
327 "Cannot remove range of an immutable array"); | 331 "Cannot remove range of an immutable array"); |
328 } | 332 } |
329 | 333 |
330 void insertRange(int start, int length, [E initialValue = null]) { | 334 void insertRange(int start, int length, [E initialValue = null]) { |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 } | 533 } |
530 _position = _length; | 534 _position = _length; |
531 _current = null; | 535 _current = null; |
532 return false; | 536 return false; |
533 } | 537 } |
534 | 538 |
535 E get current { | 539 E get current { |
536 return _current; | 540 return _current; |
537 } | 541 } |
538 } | 542 } |
OLD | NEW |