/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript.typedarrays;
import org.mozilla.javascript.IdScriptableObject;
import org.mozilla.javascript.ScriptRuntime;
import org.mozilla.javascript.Undefined;
/**
* This class is the abstract parent for all views of the array. It shows a view of the underlying
* NativeArrayBuffer. Many views may simultaneously share the same buffer, and changes to one will affect all.
*/
public abstract class NativeArrayBufferView
extends IdScriptableObject
{
private static final long serialVersionUID = 6884475582973958419L;
/** Many view objects can share the same backing array */
protected final NativeArrayBuffer arrayBuffer;
/** The offset, in bytes, from the start of the backing array */
protected final int offset;
/** The length, in bytes, of the portion of the backing array that we use */
protected final int byteLength;
public NativeArrayBufferView()
{
arrayBuffer = NativeArrayBuffer.EMPTY_BUFFER;
offset = 0;
byteLength = 0;
}
protected NativeArrayBufferView(NativeArrayBuffer ab, int offset, int byteLength)
{
this.offset = offset;
this.byteLength = byteLength;
this.arrayBuffer = ab;
}
/**
* Return the buffer that backs this view.
*/
public NativeArrayBuffer getBuffer() {
return arrayBuffer;
}
/**
* Return the offset in bytes from the start of the buffer that this view represents.
*/
public int getByteOffset() {
return offset;
}
/**
* Return the length, in bytes, of the part of the buffer that this view represents.
*/
public int getByteLength() {
return byteLength;
}
protected static boolean isArg(Object[] args, int i)
{
return ((args.length > i) && !Undefined.instance.equals(args[i]));
}
// Property dispatcher
@Override
protected int getMaxInstanceId()
{
return MAX_INSTANCE_ID;
}
@Override
protected String getInstanceIdName(int id)
{
switch (id) {
case Id_buffer: return "buffer";
case Id_byteOffset: return "byteOffset";
case Id_byteLength: return "byteLength";
default: return super.getInstanceIdName(id);
}
}
@Override
protected Object getInstanceIdValue(int id)
{
switch (id) {
case Id_buffer:
return arrayBuffer;
case Id_byteOffset:
return ScriptRuntime.wrapInt(offset);
case Id_byteLength:
return ScriptRuntime.wrapInt(byteLength);
default:
return super.getInstanceIdValue(id);
}
}
// #string_id_map#
@Override
protected int findInstanceIdInfo(String s)
{
int id;
// #generated# Last update: 2014-12-08 17:32:09 PST
L0: { id = 0; String X = null; int c;
int s_length = s.length();
if (s_length==6) { X="buffer";id=Id_buffer; }
else if (s_length==10) {
c=s.charAt(4);
if (c=='L') { X="byteLength";id=Id_byteLength; }
else if (c=='O') { X="byteOffset";id=Id_byteOffset; }
}
if (X!=null && X!=s && !X.equals(s)) id = 0;
break L0;
}
// #/generated#
if (id == 0) {
return super.findInstanceIdInfo(s);
}
return instanceIdInfo(READONLY | PERMANENT, id);
}
private static final int
Id_buffer = 1,
Id_byteOffset = 2,
Id_byteLength = 3,
MAX_INSTANCE_ID = Id_byteLength;
// #/string_id_map#
}