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

Side by Side Diff: runtime/lib/byte_array.dart

Issue 9195031: Add ByteArray interface and provide internal and external implementations. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fewer templates Created 8 years, 11 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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 interface ByteArray extends List default InternalByteArray {
6 ByteArray(int length);
7
8 int get length();
9
10 int getInt8(int byteOffset);
11
12 void setInt8(int byteOffset, int value);
13
14 int getUint8(int byteOffset);
15
16 void setUint8(int byteOffset, int value);
17
18 int getInt16(int byteOffset);
19
20 void setInt16(int byteOffset, int value);
21
22 int getUint16(int byteOffset);
23
24 void setUint16(int byteOffset, int value);
25
26 int getInt32(int byteOffset);
27
28 void setInt32(int byteOffset, int value);
29
30 int getUint32(int byteOffset);
31
32 void setUint32(int byteOffset, int value);
33
34 int getInt64(int byteOffset);
35
36 void setInt64(int byteOffset, int value);
37
38 int getUint64(int byteOffset);
39
40 void setUint64(int byteOffset, int value);
41
42 double getFloat32(int byteOffset);
43
44 void setFloat32(int byteOffset, double value);
45
46 double getFloat64(int byteOffset);
47
48 void setFloat64(int byteOffset, double value);
49 }
50
51
52 class ByteArrayBase {
Ivan Posva 2012/01/25 23:49:57 Should ByteArrayBase a private class? How about al
cshapiro 2012/01/26 02:25:42 Done.
53
54 // Iterable interface
55
56 Iterator iterator() {
57 return new ByteArrayIterator(this);
58 }
59
60 // Collection interface
61
62 int get length() {
63 return _length();
64 }
65
66 bool every(bool f(int element)) {
67 return Collections.every(this, f);
68 }
69
70 Collection map(f(int element)) {
71 return Collections.map(this, new GrowableObjectArray.withCapacity(length), f );
Ivan Posva 2012/01/25 23:49:57 long line
cshapiro 2012/01/26 02:25:42 Fixed
72 }
73
74 Collection filter(bool f(int element)) {
75 return Collections.filter(this, new GrowableObjectArray(), f);
76 }
77
78 void forEach(f(int element)) {
79 Collections.forEach(this, f);
80 }
81
82 bool isEmpty() {
83 return this.length === 0;
84 }
85
86 bool some(bool f(int element)) {
87 return Collections.some(this, f);
88 }
89
90 // List interface
91
92 int operator[](int index) {
93 return getUint8(index);
94 }
95
96 void operator[]=(int index, int value) {
97 setUint8(index, value);
98 }
99
100 void set length(int newLength) {
101 throw const UnsupportedOperationException("Cannot add to a byte array");
102 }
103
104 void add(int element) {
105 throw const UnsupportedOperationException("Cannot add to a byte array");
106 }
107
108 void addLast(int element) {
109 add(element);
110 }
111
112 void addAll(Collection elements) {
113 throw const UnsupportedOperationException("Cannot add to a byte array");
114 }
115
116 void sort(int compare(int a, b)) {
117 DualPivotQuicksort.sort(this, compare);
118 }
119
120 int indexOf(int element, [int start = 0]) {
121 return Arrays.indexOf(this, element, start, this.length);
122 }
123
124 int lastIndexOf(int element, [int start = null]) {
125 if (start === null) start = length - 1;
126 return Arrays.lastIndexOf(this, element, start);
127 }
128
129 void clear() {
130 throw const UnsupportedOperationException("Cannot clear a byte array");
131 }
132
133 int removeLast() {
134 throw const UnsupportedOperationException(
135 "Cannot remove from a byte array");
136 }
137
138 int last() {
139 return this[length - 1];
140 }
141
142 // Implementation
143
144 int _length() native "ByteArray_getLength";
145 }
146
147
148 class ByteArrayIterator implements Iterator {
149 ByteArrayIterator(List byteArray)
150 : _byteArray = byteArray, _length = byteArray.length, _pos = 0 {
151 assert(byteArray is ByteArray);
152 }
153
154 bool hasNext() {
155 return _length > _pos;
156 }
157
158 int next() {
159 if (!hasNext()) {
160 throw const NoMoreElementsException();
161 }
162 return _byteArray[_pos++];
163 }
164
165 final List _byteArray;
166
167 final int _length;
168
169 int _pos;
170 }
171
172
173 class InternalByteArray extends ByteArrayBase implements ByteArray {
174 factory InternalByteArray(int length) {
175 return _allocate(length);
176 }
177
178 // ByteArray interface
179
180 int getInt8(int byteOffset) {
181 return _getInt8(byteOffset);
182 }
183
184 void setInt8(int byteOffset, int value) {
185 _setInt8(byteOffset, value);
186 }
187
188 int getUint8(int byteOffset) {
189 return _getUint8(byteOffset);
190 }
191
192 void setUint8(int byteOffset, int value) {
193 _setUint8(byteOffset, value);
194 }
195
196 int getInt16(int byteOffset) {
197 return _getInt16(byteOffset);
198 }
199
200 void setInt16(int byteOffset, int value) {
201 _setInt16(byteOffset, value);
202 }
203
204 int getUint16(int byteOffset) {
205 return _getInt16(byteOffset);
206 }
207
208 void setUint16(int byteOffset, int value) {
209 _setUint16(byteOffset, value);
210 }
211
212 int getInt32(int byteOffset) {
213 return _getInt32(byteOffset);
214 }
215
216 void setInt32(int byteOffset, int value) {
217 _setInt32(byteOffset, value);
218 }
219
220 int getUint32(int byteOffset) {
221 return _getUint32(byteOffset);
222 }
223
224 void setUint32(int byteOffset, int value) {
225 _setUint32(byteOffset, value);
226 }
227
228 int getInt64(int byteOffset) {
229 return _getInt64(byteOffset);
230 }
231
232 void setInt64(int byteOffset, int value) {
233 _setInt64(byteOffset, value);
234 }
235
236 int getUint64(int byteOffset) {
237 return _getUint64(byteOffset);
238 }
239
240 void setUint64(int byteOffset, int value) {
241 _setUint64(byteOffset, value);
242 }
243
244 double getFloat32(int byteOffset) {
245 return _getFloat32(byteOffset);
246 }
247
248 void setFloat32(int byteOffset, double value) {
249 _setFloat32(byteOffset, value);
250 }
251
252 double getFloat64(int byteOffset) {
253 return _getFloat64(byteOffset);
254 }
255
256 void setFloat64(int byteOffset, double value) {
257 _setFloat64(byteOffset, value);
258 }
259
260 // Implementation
261
262 static InternalByteArray _allocate(int length)
263 native "InternalByteArray_allocate";
264
265 int _getInt8(int byteOffset)
266 native "InternalByteArray_getInt8";
267
268 void _setInt8(int byteOffset, int value)
269 native "InternalByteArray_setInt8";
270
271 int _getUint8(int byteOffset)
272 native "InternalByteArray_getUint8";
273
274 void _setUint8(int byteOffset, int value)
275 native "InternalByteArray_setUint8";
276
277 int _getInt16(int byteOffset)
278 native "InternalByteArray_getInt16";
279
280 void _setInt16(int byteOffset, int value)
281 native "InternalByteArray_setInt16";
282
283 int _getUint16(int byteOffset)
284 native "InternalByteArray_getUint16";
285
286 void _setUint16(int byteOffset, int value)
287 native "InternalByteArray_setUint16";
288
289 int _getInt32(int byteOffset)
290 native "InternalByteArray_getInt32";
291
292 void _setInt32(int byteOffset, int value)
293 native "InternalByteArray_setInt32";
294
295 int _getUint32(int byteOffset)
296 native "InternalByteArray_getUint32";
297
298 void _setUint32(int byteOffset, int value)
299 native "InternalByteArray_setUint32";
300
301 int _getInt64(int byteOffset)
302 native "InternalByteArray_getInt64";
303
304 void _setInt64(int byteOffset, int value)
305 native "InternalByteArray_setInt64";
306
307 int _getUint64(int byteOffset)
308 native "InternalByteArray_getUint64";
309
310 void _setUint64(int byteOffset, int value)
311 native "InternalByteArray_setUint64";
312
313 double _getFloat32(int byteOffset)
314 native "InternalByteArray_getFloat32";
315
316 void _setFloat32(int byteOffset, double value)
317 native "InternalByteArray_setFloat32";
318
319 double _getFloat64(int byteOffset)
320 native "InternalByteArray_getFloat64";
321
322 void _setFloat64(int byteOffset, double value)
323 native "InternalByteArray_setFloat64";
324 }
325
326
327 class ExternalByteArray extends ByteArrayBase implements ByteArray {
328 // Collection interface
329
330 int get length() {
331 return _length();
332 }
333
334 // List interface
335
336 int operator[](int index) {
337 return _getUint8(index);
338 }
339
340 void operator[]=(int index, int value) {
341 _setUint8(index, value);
342 }
343
344 // ByteArray interface
345
346 int getInt8(int byteOffset) {
347 return _getInt8(byteOffset);
348 }
349
350 void setInt8(int byteOffset, int value) {
351 _setInt8(byteOffset, value);
352 }
353
354 int getUint8(int byteOffset) {
355 return _getUint8(byteOffset);
356 }
357
358 void setUint8(int byteOffset, int value) {
359 _setUint8(byteOffset, value);
360 }
361
362 int getInt16(int byteOffset) {
363 return _getInt16(byteOffset);
364 }
365
366 void setInt16(int byteOffset, int value) {
367 _setInt16(byteOffset, value);
368 }
369
370 int getUint16(int byteOffset) {
371 return _getInt16(byteOffset);
372 }
373
374 void setUint16(int byteOffset, int value) {
375 _setUint16(byteOffset, value);
376 }
377
378 int getInt32(int byteOffset) {
379 return _getInt32(byteOffset);
380 }
381
382 void setInt32(int byteOffset, int value) {
383 _setInt32(byteOffset, value);
384 }
385
386 int getUint32(int byteOffset) {
387 return _getUint32(byteOffset);
388 }
389
390 void setUint32(int byteOffset, int value) {
391 _setUint32(byteOffset, value);
392 }
393
394 int getInt64(int byteOffset) {
395 return _getInt64(byteOffset);
396 }
397
398 void setInt64(int byteOffset, int value) {
399 _setInt64(byteOffset, value);
400 }
401
402 int getUint64(int byteOffset) {
403 return _getUint64(byteOffset);
404 }
405
406 void setUint64(int byteOffset, int value) {
407 _setUint64(byteOffset, value);
408 }
409
410 double getFloat32(int byteOffset) {
411 return _getFloat32(byteOffset);
412 }
413
414 void setFloat32(int byteOffset, double value) {
415 _setFloat32(byteOffset, value);
416 }
417
418 double getFloat64(int byteOffset) {
419 return _getFloat64(byteOffset);
420 }
421
422 void setFloat64(int byteOffset, double value) {
423 _setFloat64(byteOffset, value);
424 }
425
426 // Implementation
427
428 int _getInt8(int byteOffset)
429 native "ExternalByteArray_getInt8";
430
431 void _setInt8(int byteOffset, int value)
432 native "ExternalByteArray_setInt8";
433
434 int _getUint8(int byteOffset)
435 native "ExternalByteArray_getUint8";
436
437 void _setUint8(int byteOffset, int value)
438 native "ExternalByteArray_setUint8";
439
440 int _getInt16(int byteOffset)
441 native "ExternalByteArray_getInt16";
442
443 void _setInt16(int byteOffset, int value)
444 native "ExternalByteArray_setInt16";
445
446 int _getUint16(int byteOffset)
447 native "ExternalByteArray_getUint16";
448
449 void _setUint16(int byteOffset, int value)
450 native "ExternalByteArray_setUint16";
451
452 int _getInt32(int byteOffset)
453 native "ExternalByteArray_getInt32";
454
455 void _setInt32(int byteOffset, int value)
456 native "ExternalByteArray_setInt32";
457
458 int _getUint32(int byteOffset)
459 native "ExternalByteArray_getUint32";
460
461 void _setUint32(int byteOffset, int value)
462 native "ExternalByteArray_setUint32";
463
464 int _getInt64(int byteOffset)
465 native "ExternalByteArray_getInt64";
466
467 void _setInt64(int byteOffset, int value)
468 native "ExternalByteArray_setInt64";
469
470 int _getUint64(int byteOffset)
471 native "ExternalByteArray_getUint64";
472
473 void _setUint64(int byteOffset, int value)
474 native "ExternalByteArray_setUint64";
475
476 double _getFloat32(int byteOffset)
477 native "ExternalByteArray_getFloat32";
478
479 void _setFloat32(int byteOffset, double value)
480 native "ExternalByteArray_setFloat32";
481
482 double _getFloat64(int byteOffset)
483 native "ExternalByteArray_getFloat64";
484
485 void _setFloat64(int byteOffset, double value)
486 native "ExternalByteArray_setFloat64";
487 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698