ShortBufferImpl.java [plain text]
package gnu.java.nio;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
import java.nio.ReadOnlyBufferException;
public final class ShortBufferImpl extends ShortBuffer
{
private boolean readOnly;
public ShortBufferImpl(int cap, int off, int lim)
{
super (cap, lim, off, 0);
this.backing_buffer = new short [cap];
readOnly = false;
}
public ShortBufferImpl(short[] array, int offset, int length)
{
super (array.length, length, offset, 0);
this.backing_buffer = array;
readOnly = false;
}
public ShortBufferImpl(ShortBufferImpl copy)
{
super (copy.capacity (), copy.limit (), copy.position (), 0);
backing_buffer = copy.backing_buffer;
readOnly = copy.isReadOnly ();
}
private static native short[] nio_cast (byte[] copy);
ShortBufferImpl (byte[] copy)
{
super (copy.length, copy.length, 0, 0);
this.backing_buffer = copy != null ? nio_cast (copy) : null;
readOnly = false;
}
private static native byte nio_get_Byte (ShortBufferImpl b, int index, int limit);
private static native void nio_put_Byte (ShortBufferImpl b, int index, int limit, byte value);
public ByteBuffer asByteBuffer ()
{
ByteBufferImpl res = new ByteBufferImpl (backing_buffer);
res.limit ((limit () * 1) / 2);
return res;
}
public boolean isReadOnly()
{
return readOnly;
}
public ShortBuffer slice()
{
return new ShortBufferImpl (this);
}
public ShortBuffer duplicate()
{
return new ShortBufferImpl(this);
}
public ShortBuffer asReadOnlyBuffer()
{
ShortBufferImpl result = new ShortBufferImpl (this);
result.readOnly = true;
return result;
}
public ShortBuffer compact()
{
return this;
}
public boolean isDirect()
{
return false;
}
final public short get()
{
short e = backing_buffer[position()];
position(position()+1);
return e;
}
final public ShortBuffer put(short b)
{
if (readOnly)
throw new ReadOnlyBufferException ();
backing_buffer[position()] = b;
position(position()+1);
return this;
}
final public short get(int index)
{
return backing_buffer[index];
}
final public ShortBuffer put(int index, short b)
{
if (readOnly)
throw new ReadOnlyBufferException ();
backing_buffer[index] = b;
return this;
}
final public ByteOrder order ()
{
return ByteOrder.BIG_ENDIAN;
}
}