IntBufferImpl.java [plain text]
package gnu.java.nio;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import java.nio.ReadOnlyBufferException;
public final class IntBufferImpl extends IntBuffer
{
private boolean readOnly;
public IntBufferImpl(int cap, int off, int lim)
{
super (cap, lim, off, 0);
this.backing_buffer = new int[cap];
readOnly = false;
}
public IntBufferImpl(int[] array, int offset, int length)
{
super (array.length, length, offset, 0);
this.backing_buffer = array;
readOnly = false;
}
public IntBufferImpl(IntBufferImpl copy)
{
super (copy.capacity (), copy.limit (), copy.position (), 0);
backing_buffer = copy.backing_buffer;
readOnly = copy.isReadOnly ();
}
private static native int[] nio_cast (byte[] copy);
IntBufferImpl (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 (IntBufferImpl b, int index, int limit);
private static native void nio_put_Byte (IntBufferImpl b, int index, int limit, byte value);
public ByteBuffer asByteBuffer ()
{
ByteBufferImpl res = new ByteBufferImpl (backing_buffer);
res.limit ((limit () * 1) / 4);
return res;
}
public boolean isReadOnly()
{
return readOnly;
}
public IntBuffer slice()
{
return new IntBufferImpl (this);
}
public IntBuffer duplicate()
{
return new IntBufferImpl(this);
}
public IntBuffer asReadOnlyBuffer()
{
IntBufferImpl result = new IntBufferImpl (this);
result.readOnly = true;
return result;
}
public IntBuffer compact()
{
return this;
}
public boolean isDirect()
{
return false;
}
final public int get()
{
int e = backing_buffer[position()];
position(position()+1);
return e;
}
final public IntBuffer put(int b)
{
if (readOnly)
throw new ReadOnlyBufferException ();
backing_buffer[position()] = b;
position(position()+1);
return this;
}
final public int get(int index)
{
return backing_buffer[index];
}
final public IntBuffer put(int index, int b)
{
if (readOnly)
throw new ReadOnlyBufferException ();
backing_buffer[index] = b;
return this;
}
final public ByteOrder order ()
{
return ByteOrder.BIG_ENDIAN;
}
}