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