/* * 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.server; import com.google.gwt.typedarrays.shared.ArrayBuffer; import com.google.gwt.typedarrays.shared.Int8Array; /** * Pure Java implementation of {@link Int8Array}. */ public final class Int8ArrayImpl extends ArrayBufferViewImpl implements Int8Array { /** * @param buffer * @param byteOffset * @param byteLength */ public Int8ArrayImpl(ArrayBuffer buffer, int byteOffset, int byteLength) { super(buffer, byteOffset, byteLength); } @Override public byte get(int index) { return arrayBuf.getInt8(checkRange(index, BYTES_PER_ELEMENT)); } @Override public int length() { return byteLength() / BYTES_PER_ELEMENT; } @Override public void set(byte[] array) { set(array, 0); } @Override public void set(byte[] array, int offset) { int len = array.length; if (offset + len > length()) { throw new IndexOutOfBoundsException(); } for (int i = 0; i < len; ++i) { set(offset++, array[i]); } } @Override public void set(int index, int value) { arrayBuf.setInt8(checkRange(index, BYTES_PER_ELEMENT), (byte) (value & 0xFF)); } @Override public void set(int[] array) { set(array, 0); } @Override public void set(int[] array, int offset) { int len = array.length; if (offset + len > length()) { throw new IndexOutOfBoundsException(); } for (int i = 0; i < len; ++i) { set(offset++, array[i]); } } @Override public void set(Int8Array array) { set(array, 0); } @Override public void set(Int8Array array, int offset) { int len = array.length(); if (offset + len > length()) { throw new IndexOutOfBoundsException(); } for (int i = 0; i < len; ++i) { set(offset++, array.get(i)); } } @Override public Int8Array subarray(int begin) { int count = (byteLength() - byteOffset()) / BYTES_PER_ELEMENT; return subarray(begin, count); } @Override public Int8Array subarray(int begin, int end) { int count = (byteLength() - byteOffset()) / BYTES_PER_ELEMENT; if (begin < 0) { begin += count; if (begin < 0) { begin = 0; } } else if (begin > count) { begin = count; } if (end < 0) { end += count; if (end < 0) { end = 0; } } else if (end > count) { end = count; } if (end < begin) { end = begin; } return new Int8ArrayImpl(arrayBuf, begin * BYTES_PER_ELEMENT, end * BYTES_PER_ELEMENT); } }