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

Side by Side Diff: compiler/lib/implementation/array.dart

Issue 8273004: Implement removeRange, and update some documentation on the list interface. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years, 2 months 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 | « no previous file | compiler/lib/implementation/array.js » ('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 class ArrayFactory { 5 class ArrayFactory {
6 factory Array<E>.from(Iterable<E> other) { 6 factory Array<E>.from(Iterable<E> other) {
7 Array<E> array = new Array<E>(); 7 Array<E> array = new Array<E>();
8 for (final e in other) { 8 for (final e in other) {
9 array.add(e); 9 array.add(e);
10 } 10 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 } else { 113 } else {
114 return new VariableSizeArrayIterator<T>(this); 114 return new VariableSizeArrayIterator<T>(this);
115 } 115 }
116 } 116 }
117 117
118 T _indexOperator(int index) native; 118 T _indexOperator(int index) native;
119 void _indexAssignOperator(int index, T value) native; 119 void _indexAssignOperator(int index, T value) native;
120 int get length() native; 120 int get length() native;
121 void _setLength(int length) native; 121 void _setLength(int length) native;
122 void _add(T value) native; 122 void _add(T value) native;
123 void _splice(int start, int length) native;
123 124
124 void forEach(void f(T element)) { 125 void forEach(void f(T element)) {
125 Collections.forEach(this, f); 126 Collections.forEach(this, f);
126 } 127 }
127 128
128 Collection<T> filter(bool f(T element)) { 129 Collection<T> filter(bool f(T element)) {
129 return Collections.filter(this, new Array<T>(), f); 130 return Collections.filter(this, new Array<T>(), f);
130 } 131 }
131 132
132 bool every(bool f(T element)) { 133 bool every(bool f(T element)) {
(...skipping 10 matching lines...) Expand all
143 144
144 void sort(int compare(T a, T b)) { 145 void sort(int compare(T a, T b)) {
145 DualPivotQuicksort.sort(this, compare); 146 DualPivotQuicksort.sort(this, compare);
146 } 147 }
147 148
148 void copyFrom(Array<Object> src, int srcStart, int dstStart, int count) { 149 void copyFrom(Array<Object> src, int srcStart, int dstStart, int count) {
149 Arrays.copy(src, srcStart, this, dstStart, count); 150 Arrays.copy(src, srcStart, this, dstStart, count);
150 } 151 }
151 152
152 void setRange(int start, int length, List<T> from, [int startFrom = 0]) { 153 void setRange(int start, int length, List<T> from, [int startFrom = 0]) {
154 if (_isFixed) {
Anton Muhin 2011/10/18 07:44:20 may we have this in Arrays? Ditto for removeRange
ngeoffray 2011/10/18 07:46:09 There is a 'rangeCheck' method in Arrays.
Anton Muhin 2011/10/18 08:54:46 Sorry, I meant the whole logic of methods. Even f
ngeoffray 2011/10/18 08:58:01 The _splice is really tight to the implementation,
Anton Muhin 2011/10/18 14:33:49 I believe yes, but didn't double check. Anyway, l
155 throw const UnsupportedOperationException(
156 "Cannot remove range of a non-extendable array");
157 }
158 if (length == 0) {
159 return;
160 }
161 if (length < 0) {
162 throw const IllegalArgumentException();
163 }
153 Arrays.copy(from, startFrom, this, start, length); 164 Arrays.copy(from, startFrom, this, start, length);
154 } 165 }
155 166
156 void removeRange(int start, int length) { 167 void removeRange(int start, int length) {
157 throw const NotImplementedException(); 168 if (_isFixed) {
169 throw const UnsupportedOperationException(
170 "Cannot remove range of a non-extendable array");
171 }
172 if (length == 0) {
173 return;
174 }
175 if (length < 0) {
176 throw const IllegalArgumentException();
177 }
178 if (start < 0 || start >= this.length) {
179 throw new IndexOutOfRangeException(start);
180 }
181 if (start + length > this.length) {
182 throw new IndexOutOfRangeException(start + length);
183 }
184 _splice(start, length);
158 } 185 }
159 186
160 void insertRange(int start, int length, [T initialValue = null]) { 187 void insertRange(int start, int length, [T initialValue = null]) {
161 throw const NotImplementedException(); 188 throw const NotImplementedException();
162 } 189 }
163 190
164 List<T> getRange(int start, int length) { 191 List<T> getRange(int start, int length) {
165 throw const NotImplementedException(); 192 throw const NotImplementedException();
166 } 193 }
167 194
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 } 303 }
277 304
278 static Array _newArray(int len) native { 305 static Array _newArray(int len) native {
279 return new Array(len); 306 return new Array(len);
280 } 307 }
281 308
282 static void _throwIndexOutOfRangeException(int index) native { 309 static void _throwIndexOutOfRangeException(int index) native {
283 throw new IndexOutOfRangeException(index); 310 throw new IndexOutOfRangeException(index);
284 } 311 }
285 } 312 }
OLDNEW
« no previous file with comments | « no previous file | compiler/lib/implementation/array.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698