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