Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 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); | |
|
siva
2012/01/20 22:51:04
byteOffset is confusing? It is really byteOffset o
Søren Gjesse
2012/01/23 10:38:51
I think that the index/offset should be sepcified
Søren Gjesse
2012/01/23 10:38:51
Should it be possible to write in both little and
cshapiro
2012/01/24 02:14:23
It is possible although there is no support from t
cshapiro
2012/01/24 02:14:23
It is a byte offset, not a scaled index. The orig
cshapiro
2012/01/24 02:14:23
For the record, we decided to provide an interface
siva
2012/01/25 17:22:47
Ok got it.
On 2012/01/24 02:14:23, cshapiro wrot
| |
| 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 { | |
|
Søren Gjesse
2012/01/23 10:38:51
Shouldn't there be an "implements Iteratable, List
cshapiro
2012/01/24 02:14:23
Effectively, yes. The version of this file that w
| |
| 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)) { | |
|
Søren Gjesse
2012/01/23 10:38:51
Long line.
cshapiro
2012/01/24 02:14:23
Fixed.
| |
| 71 return Collections.map(this, new GrowableObjectArray.withCapacity(length), f ); | |
| 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); | |
|
siva
2012/01/20 22:51:04
why not throw here instead of calling 'add'.
cshapiro
2012/01/24 02:14:23
Good point. I like the idea of throwing rather th
| |
| 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) { | |
|
siva
2012/01/20 22:51:04
why do we need these dart wrappers here, why not j
cshapiro
2012/01/24 02:14:23
This was Ivan's suggestion. I may have misunderst
siva
2012/01/25 17:22:47
I agree with Ivan's premise that native methods sh
| |
| 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 } | |
| OLD | NEW |