blob: 0d8a2852d6f4a68b3291fb080df0c8553e7a6ba0 [file] [log] [blame]
/*
* Copyright 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.typedarrays.shared;
/**
* Factory class for various typed arrays. Behavior of all other methods is
* undefined if {@link #isSupported()} returns false.
* <p>
* In client code, the various types are implemented by JavaScriptObjects,
* so you cannot reliable use instanceof checks on any of the returned
* implementations.
*/
public class TypedArrays {
/**
* Base class of implementations for creating various typed array structures.
* <p>
* <b>*** NOT A PUBLIC API ***</b>
*/
public abstract static class Impl {
/**
* Get the number of elements in a number of bytes, throwing an exception
* if it isn't an integral number.
*
* @param byteLength
* @param elemLength length of each element in bytes
* @return count of elements
* @throws IllegalArgumentException if {@code byteLength} isn't an integral
* multiple of {@code elemLength}
*/
protected static int getElementCount(int byteLength, int elemLength) {
int count = byteLength / elemLength;
if (count * elemLength != byteLength) {
throw new IllegalArgumentException();
}
return count;
}
public abstract ArrayBuffer createArrayBuffer(int length);
public DataView createDataView(ArrayBuffer buffer) {
return createDataView(buffer, 0, buffer.byteLength());
}
public DataView createDataView(ArrayBuffer buffer, int offset) {
return createDataView(buffer, offset, buffer.byteLength() - offset);
}
public abstract DataView createDataView(ArrayBuffer buffer, int byteOffset, int byteLength);
public Float32Array createFloat32Array(ArrayBuffer buffer) {
return createFloat32Array(buffer, 0, getElementCount(buffer.byteLength(),
Float32Array.BYTES_PER_ELEMENT));
}
public Float32Array createFloat32Array(ArrayBuffer buffer, int byteOffset) {
return createFloat32Array(buffer, byteOffset, getElementCount(
buffer.byteLength() - byteOffset, Float32Array.BYTES_PER_ELEMENT));
}
public abstract Float32Array createFloat32Array(ArrayBuffer buffer, int byteOffset, int length);
public Float32Array createFloat32Array(float[] array) {
Float32Array result = createFloat32Array(array.length);
result.set(array);
return result;
}
public Float32Array createFloat32Array(int length) {
return createFloat32Array(createArrayBuffer(length * Float32Array.BYTES_PER_ELEMENT));
}
public Float64Array createFloat64Array(ArrayBuffer buffer) {
return createFloat64Array(buffer, 0, getElementCount(buffer.byteLength(),
Float64Array.BYTES_PER_ELEMENT));
}
public Float64Array createFloat64Array(ArrayBuffer buffer, int byteOffset) {
return createFloat64Array(buffer, byteOffset, getElementCount(
buffer.byteLength() - byteOffset, Float64Array.BYTES_PER_ELEMENT));
}
public abstract Float64Array createFloat64Array(ArrayBuffer buffer, int byteOffset, int length);
public Float64Array createFloat64Array(double[] array) {
Float64Array result = createFloat64Array(array.length);
result.set(array);
return result;
}
public Float64Array createFloat64Array(int length) {
return createFloat64Array(createArrayBuffer(length * Float64Array.BYTES_PER_ELEMENT));
}
public Int16Array createInt16Array(ArrayBuffer buffer) {
return createInt16Array(buffer, 0, getElementCount(buffer.byteLength(),
Int16Array.BYTES_PER_ELEMENT));
}
public Int16Array createInt16Array(ArrayBuffer buffer, int byteOffset) {
return createInt16Array(buffer, byteOffset, getElementCount(
buffer.byteLength() - byteOffset, Int16Array.BYTES_PER_ELEMENT));
}
public abstract Int16Array createInt16Array(ArrayBuffer buffer, int byteOffset, int length);
public Int16Array createInt16Array(int length) {
return createInt16Array(createArrayBuffer(length * Int16Array.BYTES_PER_ELEMENT));
}
public Int16Array createInt16Array(short[] array) {
Int16Array result = createInt16Array(array.length);
result.set(array);
return result;
}
public Int32Array createInt32Array(ArrayBuffer buffer) {
return createInt32Array(buffer, 0, getElementCount(buffer.byteLength(),
Int32Array.BYTES_PER_ELEMENT));
}
public Int32Array createInt32Array(ArrayBuffer buffer, int byteOffset) {
return createInt32Array(buffer, byteOffset, getElementCount(
buffer.byteLength() - byteOffset, Int32Array.BYTES_PER_ELEMENT));
}
public abstract Int32Array createInt32Array(ArrayBuffer buffer, int byteOffset, int length);
public Int32Array createInt32Array(int length) {
return createInt32Array(createArrayBuffer(length * Int32Array.BYTES_PER_ELEMENT));
}
public Int32Array createInt32Array(int[] array) {
Int32Array result = createInt32Array(array.length);
result.set(array);
return result;
}
public Int8Array createInt8Array(ArrayBuffer buffer) {
return createInt8Array(buffer, 0, buffer.byteLength());
}
public Int8Array createInt8Array(ArrayBuffer buffer, int byteOffset) {
return createInt8Array(buffer, byteOffset, buffer.byteLength() - byteOffset);
}
public abstract Int8Array createInt8Array(ArrayBuffer buffer, int byteOffset, int length);
public Int8Array createInt8Array(byte[] array) {
Int8Array result = createInt8Array(array.length);
result.set(array);
return result;
}
public Int8Array createInt8Array(int length) {
return createInt8Array(createArrayBuffer(length));
}
public Uint16Array createUint16Array(ArrayBuffer buffer) {
return createUint16Array(buffer, 0, getElementCount(buffer.byteLength(),
Uint16Array.BYTES_PER_ELEMENT));
}
public Uint16Array createUint16Array(ArrayBuffer buffer, int byteOffset) {
return createUint16Array(buffer, byteOffset, getElementCount(
buffer.byteLength() - byteOffset, Uint16Array.BYTES_PER_ELEMENT));
}
public abstract Uint16Array createUint16Array(ArrayBuffer buffer, int byteOffset, int length);
public Uint16Array createUint16Array(int length) {
return createUint16Array(createArrayBuffer(length * Uint16Array.BYTES_PER_ELEMENT));
}
public Uint16Array createUint16Array(int[] array) {
Uint16Array result = createUint16Array(array.length);
result.set(array);
return result;
}
public Uint32Array createUint32Array(ArrayBuffer buffer) {
return createUint32Array(buffer, 0, getElementCount(buffer.byteLength(),
Uint32Array.BYTES_PER_ELEMENT));
}
public Uint32Array createUint32Array(ArrayBuffer buffer, int byteOffset) {
return createUint32Array(buffer, byteOffset, getElementCount(
buffer.byteLength() - byteOffset, Uint32Array.BYTES_PER_ELEMENT));
}
public abstract Uint32Array createUint32Array(ArrayBuffer buffer, int byteOffset, int length);
public Uint32Array createUint32Array(double[] array) {
Uint32Array result = createUint32Array(array.length);
result.set(array);
return result;
}
public Uint32Array createUint32Array(int length) {
return createUint32Array(createArrayBuffer(length * Uint32Array.BYTES_PER_ELEMENT));
}
public Uint32Array createUint32Array(long[] array) {
Uint32Array result = createUint32Array(array.length);
result.set(array);
return result;
}
public Uint8Array createUint8Array(ArrayBuffer buffer) {
return createUint8Array(buffer, 0, buffer.byteLength());
}
public Uint8Array createUint8Array(ArrayBuffer buffer, int byteOffset) {
return createUint8Array(buffer, byteOffset, buffer.byteLength() - byteOffset);
}
public abstract Uint8Array createUint8Array(ArrayBuffer buffer, int byteOffset, int length);
public Uint8Array createUint8Array(int length) {
return createUint8Array(createArrayBuffer(length));
}
public Uint8Array createUint8Array(short[] array) {
Uint8Array result = createUint8Array(array.length);
result.set(array);
return result;
}
public Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer) {
return createUint8ClampedArray(buffer, 0, buffer.byteLength());
}
public Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer, int byteOffset) {
return createUint8ClampedArray(buffer, byteOffset, buffer.byteLength() - byteOffset);
}
public abstract Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer, int byteOffset,
int length);
public Uint8ClampedArray createUint8ClampedArray(int length) {
return createUint8ClampedArray(createArrayBuffer(length));
}
public Uint8ClampedArray createUint8ClampedArray(short[] array) {
Uint8ClampedArray result = createUint8ClampedArray(array.length);
result.set(array);
return result;
}
/**
* Check if the current environment might possibly support typed arrays.
* <p>
* The default implementation always returns true, and this is intended to
* be a static check based on deffered-bound parameters.
*
* @return true if the current environment might possibly
* support typed arrays
*/
protected boolean mightBeSupported() {
return true;
}
/**
* Check if the current environment actually does support typed arrays
* (including emulation). There is no partial support, so if true is
* returned, there must be acceptable implementations for all of the
* {@code createXXX} methods.
*
* @return true if the current environment actually does support typed
* arrays
*/
protected boolean runtimeSupportCheck() {
return false;
}
}
/**
* This class exists to keep clinit calls from littering callsites when compiled
* to JS.
*/
private static class Instance {
protected static final Impl impl = TypedArraysFactory.createImpl();
}
/**
* Create a new {@link ArrayBuffer} of {@code length} bytes.
*
* @param length length of buffer in bytes
* @return an {@link ArrayBuffer} instance
*/
public static ArrayBuffer createArrayBuffer(int length) {
return Instance.impl.createArrayBuffer(length);
}
/**
* Create a new {@link DataView} instance on an {@link ArrayBuffer}.
*
* @param buffer {@link ArrayBuffer}
* @return {@link DataView} instance
*/
public static DataView createDataView(ArrayBuffer buffer) {
return Instance.impl.createDataView(buffer);
}
/**
* Create a new {@link DataView} instance on an {@link ArrayBuffer}, starting
* at an offset of {@code byteOffset}.
*
* @param buffer {@link ArrayBuffer}
* @param byteOffset offset into buffer
* @return {@link DataView} instance
*/
public static DataView createDataView(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createDataView(buffer, byteOffset);
}
/**
* Create a new {@link DataView} instance on an {@link ArrayBuffer}, starting
* at an offset of {@code byteOffset} and continuing for {@code length}
* bytes.
*
* @param buffer {@link ArrayBuffer}
* @param byteOffset offset into buffer
* @param byteLength length of view in bytes
* @return {@link DataView} instance
*/
public static DataView createDataView(ArrayBuffer buffer, int byteOffset, int byteLength) {
return Instance.impl.createDataView(buffer, byteOffset, byteLength);
}
/**
* Create a {@link Float32Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Float32Array} instance
*/
public static Float32Array createFloat32Array(ArrayBuffer buffer) {
return Instance.impl.createFloat32Array(buffer);
}
/**
* Create a {@link Float32Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Float32Array} instance
*/
public static Float32Array createFloat32Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createFloat32Array(buffer, byteOffset);
}
/**
* Create a {@link Float32Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Float32Array} instance
*/
public static Float32Array createFloat32Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createFloat32Array(buffer, byteOffset, length);
}
/**
* Create a {@link Float32Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Float32Array} instance
*/
public static Float32Array createFloat32Array(int length) {
return Instance.impl.createFloat32Array(length);
}
/**
* Create a {@link Float64Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
* <p>
* <b>Note that Safari does not currently support Float64 Arrays!</b>
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Float64Array} instance
*/
public static Float64Array createFloat64Array(ArrayBuffer buffer) {
return Instance.impl.createFloat64Array(buffer);
}
/**
* Create a {@link Float64Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
* <p>
* <b>Note that Safari does not currently support Float64 Arrays!</b>
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Float64Array} instance
*/
public static Float64Array createFloat64Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createFloat64Array(buffer, byteOffset);
}
/**
* Create a {@link Float64Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
* <p>
* <b>Note that Safari does not currently support Float64 Arrays!</b>
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Float64Array} instance
*/
public static Float64Array createFloat64Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createFloat64Array(buffer, byteOffset, length);
}
/**
* Create a {@link Float64Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
* <p>
* <b>Note that Safari does not currently support Float64 Arrays!</b>
*
* @param length size of array
* @return a {@link Float64Array} instance
*/
public static Float64Array createFloat64Array(int length) {
return Instance.impl.createFloat64Array(length);
}
/**
* Create a {@link Int16Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Int16Array} instance
*/
public static Int16Array createInt16Array(ArrayBuffer buffer) {
return Instance.impl.createInt16Array(buffer);
}
/**
* Create a {@link Int16Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Int16Array} instance
*/
public static Int16Array createInt16Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createInt16Array(buffer, byteOffset);
}
/**
* Create a {@link Int16Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Int16Array} instance
*/
public static Int16Array createInt16Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createInt16Array(buffer, byteOffset, length);
}
/**
* Create a {@link Int16Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Int16Array} instance
*/
public static Int16Array createInt16Array(int length) {
return Instance.impl.createInt16Array(length);
}
/**
* Create a {@link Int32Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Int32Array} instance
*/
public static Int32Array createInt32Array(ArrayBuffer buffer) {
return Instance.impl.createInt32Array(buffer);
}
/**
* Create a {@link Int32Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Int32Array} instance
*/
public static Int32Array createInt32Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createInt32Array(buffer, byteOffset);
}
/**
* Create a {@link Int32Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Int32Array} instance
*/
public static Int32Array createInt32Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createInt32Array(buffer, byteOffset, length);
}
/**
* Create a {@link Int32Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Int32Array} instance
*/
public static Int32Array createInt32Array(int length) {
return Instance.impl.createInt32Array(length);
}
/**
* Create a {@link Int8Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end.
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Int8Array} instance
*/
public static Int8Array createInt8Array(ArrayBuffer buffer) {
return Instance.impl.createInt8Array(buffer);
}
/**
* Create a {@link Int8Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Int8Array} instance
*/
public static Int8Array createInt8Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createInt8Array(buffer, byteOffset);
}
/**
* Create a {@link Int8Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Int8Array} instance
*/
public static Int8Array createInt8Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createInt8Array(buffer, byteOffset, length);
}
/**
* Create a {@link Int8Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Int8Array} instance
*/
public static Int8Array createInt8Array(int length) {
return Instance.impl.createInt8Array(length);
}
/**
* Create a {@link Uint16Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Uint16Array} instance
*/
public static Uint16Array createUint16Array(ArrayBuffer buffer) {
return Instance.impl.createUint16Array(buffer);
}
/**
* Create a {@link Uint16Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Uint16Array} instance
*/
public static Uint16Array createUint16Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createUint16Array(buffer, byteOffset);
}
/**
* Create a {@link Uint16Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Uint16Array} instance
*/
public static Uint16Array createUint16Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createUint16Array(buffer, byteOffset, length);
}
/**
* Create a {@link Uint16Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Uint16Array} instance
*/
public static Uint16Array createUint16Array(int length) {
return Instance.impl.createUint16Array(length);
}
/**
* Create a {@link Uint32Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Uint32Array} instance
*/
public static Uint32Array createUint32Array(ArrayBuffer buffer) {
return Instance.impl.createUint32Array(buffer);
}
/**
* Create a {@link Uint32Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer
* (which must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Uint32Array} instance
*/
public static Uint32Array createUint32Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createUint32Array(buffer, byteOffset);
}
/**
* Create a {@link Uint32Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Uint32Array} instance
*/
public static Uint32Array createUint32Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createUint32Array(buffer, byteOffset, length);
}
/**
* Create a {@link Uint32Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Uint32Array} instance
*/
public static Uint32Array createUint32Array(int length) {
return Instance.impl.createUint32Array(length);
}
/**
* Create a {@link Uint8Array} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end (which
* must be an integral number of elements).
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Uint8Array} instance
*/
public static Uint8Array createUint8Array(ArrayBuffer buffer) {
return Instance.impl.createUint8Array(buffer);
}
/**
* Create a {@link Uint8Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Uint8Array} instance
*/
public static Uint8Array createUint8Array(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createUint8Array(buffer, byteOffset);
}
/**
* Create a {@link Uint8Array} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Uint8Array} instance
*/
public static Uint8Array createUint8Array(ArrayBuffer buffer, int byteOffset, int length) {
return Instance.impl.createUint8Array(buffer, byteOffset, length);
}
/**
* Create a {@link Uint8Array} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Uint8Array} instance
*/
public static Uint8Array createUint8Array(int length) {
return Instance.impl.createUint8Array(length);
}
/**
* Create a {@link Uint8ClampedArray} instance on {@code buffer}, starting at
* starting at the beginning of the buffer and continuing to the end.
*
* @param buffer underlying {@link ArrayBuffer}
* @return an {@link Uint8ClampedArray} instance
*/
public static Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer) {
return Instance.impl.createUint8ClampedArray(buffer, 0, buffer.byteLength());
}
/**
* Create a {@link Uint8ClampedArray} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing to the end of the buffer.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @return an {@link Uint8ClampedArray} instance
*/
public static Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer, int byteOffset) {
return Instance.impl.createUint8ClampedArray(buffer, byteOffset);
}
/**
* Create a {@link Uint8ClampedArray} instance on {@code buffer}, starting at
* {@code byteOffset} into the buffer, continuing for {@code length}
* elements.
*
* @param buffer underlying {@link ArrayBuffer}
* @param byteOffset byte offset from the start of {@code buffer}
* @param length number of elements in the resulting array
* @return an {@link Uint8ClampedArray} instance
*/
public static Uint8ClampedArray createUint8ClampedArray(ArrayBuffer buffer,
int byteOffset, int length) {
return Instance.impl.createUint8ClampedArray(buffer, byteOffset, length);
}
/**
* Create a {@link Uint8ClampedArray} instance of {@code length} elements, backed
* by a new {@link ArrayBuffer}.
*
* @param length size of array
* @return a {@link Uint8ClampedArray} instance
*/
public static Uint8ClampedArray createUint8ClampedArray(int length) {
return Instance.impl.createUint8ClampedArray(length);
}
/**
* Check if the current environment supports typed arrays. Behavior of the
* various {@code createXXX} methods is undefined if this method returns
* {@code false}, but will typically throw some exception.
*
* @return true if typed arrays are support.
*/
public static boolean isSupported() {
return Instance.impl.mightBeSupported() && Instance.impl.runtimeSupportCheck();
}
}