Index: runtime/lib/byte_array.dart |
=================================================================== |
--- runtime/lib/byte_array.dart (revision 15794) |
+++ runtime/lib/byte_array.dart (working copy) |
@@ -34,6 +34,22 @@ |
} |
+patch class Uint8ClampedList { |
+ /* patch */ factory Uint8ClampedList(int length) { |
+ return new _Uint8ClampedArray(length); |
+ } |
+ |
+ /* patch */ factory Uint8ClampedList.transferable(int length) { |
+ return new _Uint8ClampedArray.transferable(length); |
+ } |
+ |
+ /* patch */ factory Uint8ClampedList.view(ByteArray array, |
+ [int start = 0, int length]) { |
+ return new _Uint8ClampedArrayView(array, start, length); |
+ } |
+} |
+ |
+ |
patch class Int16List { |
/* patch */ factory Int16List(int length) { |
return new _Int16Array(length); |
@@ -325,6 +341,11 @@ |
int _toUint8(int value) { |
return value & 0xFF; |
} |
+int _toClampedUint8(int value) { |
+ if (value < 0) return 0; |
+ if (value > 0xFF) return 0xFF; |
+ return value; |
+} |
int _toInt16(int value) { |
@@ -446,7 +467,6 @@ |
static _Int8Array _new(int length) native "Int8Array_new"; |
static _Int8Array _newTransferable(int length) |
native "Int8Array_newTransferable"; |
- |
int _getIndexed(int index) native "Int8Array_getIndexed"; |
int _setIndexed(int index, int value) native "Int8Array_setIndexed"; |
@@ -489,7 +509,8 @@ |
} |
void setRange(int start, int length, List<int> from, [int startFrom = 0]) { |
- if (from is _Uint8Array || from is _ExternalUint8Array) { |
+ if (from is _Uint8Array || from is _ExternalUint8Array || |
+ from is _Uint8ClampedArray || from is _ExternalUint8ClampedArray) { |
_setRange(start * _BYTES_PER_ELEMENT, |
length * _BYTES_PER_ELEMENT, |
from, |
@@ -514,14 +535,85 @@ |
static const int _BYTES_PER_ELEMENT = 1; |
static _Uint8Array _new(int length) native "Uint8Array_new"; |
- static _Uint8Array _newTransferable(int length) |
+ static _Uint8Array _newTransferable(int length) |
native "Uint8Array_newTransferable"; |
- |
+ |
int _getIndexed(int index) native "Uint8Array_getIndexed"; |
int _setIndexed(int index, int value) native "Uint8Array_setIndexed"; |
} |
+class _Uint8ClampedArray extends _ByteArrayBase implements Uint8ClampedList { |
+ factory _Uint8ClampedArray(int length) { |
+ return _new(length); |
+ } |
+ |
+ factory _Uint8ClampedArray.transferable(int length) { |
+ return _newTransferable(length); |
+ } |
+ |
+ factory _Uint8ClampedArray.view(ByteArray array, |
+ [int start = 0, int length]) { |
+ if (length == null) { |
+ length = array.lengthInBytes(); |
+ } |
+ return new _Uint8ClampedArrayView(array, start, length); |
+ } |
+ |
+ int operator[](int index) { |
+ return _getIndexed(index); |
+ } |
+ |
+ int operator[]=(int index, int value) { |
+ _setIndexed(index, _toClampedUint8(value)); |
+ } |
+ |
+ Iterator<int> iterator() { |
+ return new _ByteArrayIterator<int>(this); |
+ } |
+ |
+ List<int> getRange(int start, int length) { |
+ _rangeCheck(this.length, start, length); |
+ List<int> result = _new(length); |
+ result.setRange(0, length, this, start); |
+ return result; |
+ } |
+ |
+ void setRange(int start, int length, List<int> from, [int startFrom = 0]) { |
+ if (from is _Uint8Array || from is _ExternalUint8Array || |
+ from is _Uint8ClampedArray || from is _ExternalUint8ClampedArray) { |
+ _setRange(start * _BYTES_PER_ELEMENT, |
+ length * _BYTES_PER_ELEMENT, |
+ from, |
+ startFrom * _BYTES_PER_ELEMENT); |
+ } else { |
+ Arrays.copy(from, startFrom, this, start, length); |
+ } |
+ } |
+ |
+ String toString() { |
+ return Collections.collectionToString(this); |
+ } |
+ |
+ int bytesPerElement() { |
+ return _BYTES_PER_ELEMENT; |
+ } |
+ |
+ int lengthInBytes() { |
+ return _length() * _BYTES_PER_ELEMENT; |
+ } |
+ |
+ static const int _BYTES_PER_ELEMENT = 1; |
+ |
+ static _Uint8ClampedArray _new(int length) native "Uint8ClampedArray_new"; |
+ static _Uint8ClampedArray _newTransferable(int length) |
+ native "Uint8ClampedArray_newTransferable"; |
+ |
+ int _getIndexed(int index) native "Uint8Array_getIndexed"; |
+ int _setIndexed(int index, int value) native "Uint8Array_setIndexed"; |
+} |
+ |
+ |
class _Int16Array extends _ByteArrayBase implements Int16List { |
factory _Int16Array(int length) { |
return _new(length); |
@@ -723,8 +815,8 @@ |
static _Int32Array _new(int length) native "Int32Array_new"; |
static _Int32Array _newTransferable(int length) |
native "Int32Array_newTransferable"; |
- |
+ |
int _getIndexed(int index) native "Int32Array_getIndexed"; |
int _setIndexed(int index, int value) native "Int32Array_setIndexed"; |
} |