ByteBufferHelper.java: New file.

2003-09-25  Michael Koch  <konqueror@gmx.de>

	* java/nio/ByteBufferHelper.java:
	New file.
	* java/nio/ByteBufferImpl.java,
	java/nio/DirectByteBufferImpl.java,
	java/nio/MappedByteBufferImpl.java
	(getType,putType): Use new helper class ByteBufferHelper.
	* Makefile.am (ordinary_java_source_files):
	Added java/nio/ByteBufferHelper.java.
	* Makefile.in: Regenerated.

From-SVN: r71757
This commit is contained in:
Michael Koch 2003-09-25 06:43:52 +00:00 committed by Michael Koch
parent e302977341
commit 5e2ba18bc1
5 changed files with 739 additions and 423 deletions

View file

@ -1,3 +1,15 @@
2003-09-25 Michael Koch <konqueror@gmx.de>
* java/nio/ByteBufferHelper.java:
New file.
* java/nio/ByteBufferImpl.java,
java/nio/DirectByteBufferImpl.java,
java/nio/MappedByteBufferImpl.java
(getType,putType): Use new helper class ByteBufferHelper.
* Makefile.am (ordinary_java_source_files):
Added java/nio/ByteBufferHelper.java.
* Makefile.in: Regenerated.
2003-09-25 Bryce McKinlay <bryce@mckinlay.net.nz> 2003-09-25 Bryce McKinlay <bryce@mckinlay.net.nz>
* gnu/java/net/natPlainSocketImplWin32.cc: Add missing #includes. * gnu/java/net/natPlainSocketImplWin32.cc: Add missing #includes.

View file

@ -0,0 +1,589 @@
/* ByteBufferImpl.java --
Copyright (C) 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package java.nio;
/**
* @author Michael Koch <konqueror@gmx.de>
*/
final class ByteBufferHelper
{
private static final void checkRemainingForRead (ByteBuffer buffer, int bytes)
{
if (buffer.remaining() < bytes)
throw new BufferUnderflowException();
}
private static final void checkRemainingForWrite (ByteBuffer buffer, int bytes)
{
if (buffer.remaining() < bytes)
throw new BufferOverflowException();
}
private static final void checkAvailableForRead (ByteBuffer buffer,
int index, int bytes)
{
if (buffer.limit() < (index + bytes))
throw new BufferUnderflowException();
}
private static final void checkAvailableForWrite (ByteBuffer buffer,
int index, int bytes)
{
if (buffer.limit() < (index + bytes))
throw new BufferOverflowException();
}
public static final char getChar (ByteBuffer buffer)
{
checkRemainingForRead (buffer, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (char) ((buffer.get() & 0xff)
+ ((buffer.get() & 0xff) << 8));
}
return (char) (((buffer.get() & 0xff) << 8)
+ (buffer.get() & 0xff));
}
public static final ByteBuffer putChar (ByteBuffer buffer, char value)
{
checkRemainingForWrite (buffer, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put ((byte) (((int) value) & 0x00ff));
buffer.put ((byte) ((((int) value) & 0xff00) >> 8));
}
else
{
buffer.put ((byte) ((((int) value) & 0xff00) >> 8));
buffer.put ((byte) (((int) value) & 0x00ff));
}
return buffer;
}
public static final char getChar (ByteBuffer buffer, int index)
{
checkAvailableForRead (buffer, index, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (char) (((buffer.get (index + 1) & 0xff) << 8)
+ (buffer.get (index) & 0xff));
}
return (char) (((buffer.get (index) & 0xff) << 8)
+ (buffer.get (index + 1) & 0xff));
}
public static final ByteBuffer putChar (ByteBuffer buffer, int index,
char value)
{
checkAvailableForWrite (buffer, index, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put (index + 1, (byte) ((((int) value) & 0x00ff) >> 8));
buffer.put (index, (byte) (((int) value) & 0xff00));
}
else
{
buffer.put (index, (byte) ((((int) value) & 0xff00) >> 8));
buffer.put (index + 1, (byte) (((int) value) & 0x00ff));
}
return buffer;
}
public static final short getShort (ByteBuffer buffer)
{
checkRemainingForRead (buffer, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (short) ((buffer.get() & 0xff)
+ ((buffer.get() & 0xff) << 8));
}
return (short) (((buffer.get() & 0xff) << 8)
+ (buffer.get() & 0xff));
}
public static final ByteBuffer putShort (ByteBuffer buffer, short value)
{
checkRemainingForWrite (buffer, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put ((byte) (((int) value) & 0x00ff));
buffer.put ((byte) ((((int) value) & 0xff00) >> 8));
}
else
{
buffer.put ((byte) ((((int) value) & 0xff00) >> 8));
buffer.put ((byte) (((int) value) & 0x00ff));
}
return buffer;
}
public static final short getShort (ByteBuffer buffer, int index)
{
checkAvailableForRead (buffer, index, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (short) ((buffer.get (index) & 0xff)
+ ((buffer.get (index + 1) & 0xff) << 8));
}
return (short) (((buffer.get (index) & 0xff) << 8)
+ (buffer.get (index + 1) & 0xff));
}
public static final ByteBuffer putShort (ByteBuffer buffer, int index,
short value)
{
checkAvailableForWrite (buffer, index, 2);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put (index + 1, (byte) ((((int) value) & 0xff00) >> 8));
buffer.put (index, (byte) (((int) value) & 0x00ff));
}
else
{
buffer.put (index, (byte) ((((int) value) & 0xff00) >> 8));
buffer.put (index + 1, (byte) (((int) value) & 0x00ff));
}
return buffer;
}
public static final int getInt (ByteBuffer buffer)
{
checkRemainingForRead (buffer, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (int) ((buffer.get() & 0xff)
+ ((buffer.get() & 0xff) << 8)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 24));
}
return (int) (((buffer.get() & 0xff) << 24)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 8)
+ (buffer.get() & 0xff));
}
public static final ByteBuffer putInt (ByteBuffer buffer, int value)
{
checkRemainingForWrite (buffer, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put ((byte) (value & 0x000000ff));
buffer.put ((byte) ((value & 0x0000ff00) >> 8));
buffer.put ((byte) ((value & 0x00ff0000) >> 16));
buffer.put ((byte) ((value & 0xff000000) >> 24));
}
else
{
buffer.put ((byte) ((value & 0xff000000) >> 24));
buffer.put ((byte) ((value & 0x00ff0000) >> 16));
buffer.put ((byte) ((value & 0x0000ff00) >> 8));
buffer.put ((byte) (value & 0x000000ff));
}
return buffer;
}
public static final int getInt (ByteBuffer buffer, int index)
{
checkAvailableForRead (buffer, index, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (int) ((buffer.get (index) & 0xff))
+ ((buffer.get (index + 1) & 0xff) << 8)
+ ((buffer.get (index + 2) & 0xff) << 16)
+ ((buffer.get (index + 3) & 0xff) << 24);
}
return (int) (((buffer.get (index) & 0xff) << 24)
+ ((buffer.get (index + 1) & 0xff) << 16)
+ ((buffer.get (index + 2) & 0xff) << 8)
+ (buffer.get (index + 3) & 0xff));
}
public static final ByteBuffer putInt (ByteBuffer buffer, int index,
int value)
{
checkAvailableForWrite (buffer, index, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put (index + 3, (byte) ((value & 0xff000000) >> 24));
buffer.put (index + 2, (byte) ((value & 0x00ff0000) >> 16));
buffer.put (index + 1, (byte) ((value & 0x0000ff00) >> 8));
buffer.put (index, (byte) (value & 0x000000ff));
}
else
{
buffer.put (index, (byte) ((value & 0xff000000) >> 24));
buffer.put (index + 1, (byte) ((value & 0x00ff0000) >> 16));
buffer.put (index + 2, (byte) ((value & 0x0000ff00) >> 8));
buffer.put (index + 3, (byte) (value & 0x000000ff));
}
return buffer;
}
public static final long getLong (ByteBuffer buffer)
{
checkRemainingForRead (buffer, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (long) (((buffer.get() & 0xff))
+ ((buffer.get() & 0xff) << 8)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 24)
+ ((buffer.get() & 0xff) << 32)
+ ((buffer.get() & 0xff) << 40)
+ ((buffer.get() & 0xff) << 48)
+ ((buffer.get() & 0xff) << 56));
}
return (long) (((buffer.get() & 0xff) << 56)
+ ((buffer.get() & 0xff) << 48)
+ ((buffer.get() & 0xff) << 40)
+ ((buffer.get() & 0xff) << 32)
+ ((buffer.get() & 0xff) << 24)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 8)
+ (buffer.get() & 0xff));
}
public static final ByteBuffer putLong (ByteBuffer buffer, long value)
{
checkRemainingForWrite (buffer, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put ((byte) (value & 0xff00000000000000L));
buffer.put ((byte) ((value & 0x00ff000000000000L) >> 8));
buffer.put ((byte) ((value & 0x0000ff0000000000L) >> 16));
buffer.put ((byte) ((value & 0x000000ff00000000L) >> 24));
buffer.put ((byte) ((value & 0x00000000ff000000L) >> 32));
buffer.put ((byte) ((value & 0x0000000000ff0000L) >> 40));
buffer.put ((byte) ((value & 0x000000000000ff00L) >> 48));
buffer.put ((byte) ((value & 0x00000000000000ffL) >> 56));
}
else
{
buffer.put ((byte) ((value & 0xff00000000000000L) >> 56));
buffer.put ((byte) ((value & 0x00ff000000000000L) >> 48));
buffer.put ((byte) ((value & 0x0000ff0000000000L) >> 40));
buffer.put ((byte) ((value & 0x000000ff00000000L) >> 32));
buffer.put ((byte) ((value & 0x00000000ff000000L) >> 24));
buffer.put ((byte) ((value & 0x0000000000ff0000L) >> 16));
buffer.put ((byte) ((value & 0x000000000000ff00L) >> 8));
buffer.put ((byte) (value & 0x00000000000000ffL));
}
return buffer;
}
public static final long getLong (ByteBuffer buffer, int index)
{
checkAvailableForRead (buffer, index, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (long) ((buffer.get (index) & 0xff)
+ ((buffer.get (index + 1) & 0xff) << 8)
+ ((buffer.get (index + 2) & 0xff) << 16)
+ ((buffer.get (index + 3) & 0xff) << 24)
+ ((buffer.get (index + 4) & 0xff) << 32)
+ ((buffer.get (index + 5) & 0xff) << 40)
+ ((buffer.get (index + 6) & 0xff) << 48)
+ ((buffer.get (index + 7) & 0xff) << 56));
}
return (long) (((buffer.get (index) & 0xff) << 56)
+ ((buffer.get (index + 1) & 0xff) << 48)
+ ((buffer.get (index + 2) & 0xff) << 40)
+ ((buffer.get (index + 3) & 0xff) << 32)
+ ((buffer.get (index + 4) & 0xff) << 24)
+ ((buffer.get (index + 5) & 0xff) << 16)
+ ((buffer.get (index + 6) & 0xff) << 8)
+ (buffer.get (index + 7) & 0xff));
}
public static final ByteBuffer putLong (ByteBuffer buffer, int index,
long value)
{
checkAvailableForWrite (buffer, index, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put (index + 7, (byte) ((value & 0xff00000000000000L) >> 56));
buffer.put (index + 6, (byte) ((value & 0x00ff000000000000L) >> 48));
buffer.put (index + 5, (byte) ((value & 0x0000ff0000000000L) >> 40));
buffer.put (index + 4, (byte) ((value & 0x000000ff00000000L) >> 32));
buffer.put (index + 3, (byte) ((value & 0x00000000ff000000L) >> 24));
buffer.put (index + 2, (byte) ((value & 0x0000000000ff0000L) >> 16));
buffer.put (index + 1, (byte) ((value & 0x000000000000ff00L) >> 8));
buffer.put (index, (byte) (value & 0x00000000000000ffL));
}
else
{
buffer.put (index, (byte) ((value & 0xff00000000000000L) >> 56));
buffer.put (index + 1, (byte) ((value & 0x00ff000000000000L) >> 48));
buffer.put (index + 2, (byte) ((value & 0x0000ff0000000000L) >> 40));
buffer.put (index + 3, (byte) ((value & 0x000000ff00000000L) >> 32));
buffer.put (index + 4, (byte) ((value & 0x00000000ff000000L) >> 24));
buffer.put (index + 5, (byte) ((value & 0x0000000000ff0000L) >> 16));
buffer.put (index + 6, (byte) ((value & 0x000000000000ff00L) >> 8));
buffer.put (index + 7, (byte) (value & 0x00000000000000ffL));
}
return buffer;
}
public static final float getFloat (ByteBuffer buffer)
{
checkRemainingForRead (buffer, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (float) ((buffer.get() & 0xff)
+ ((buffer.get() & 0xff) << 8)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 24));
}
return (float) (((buffer.get() & 0xff) << 24)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 8)
+ (buffer.get() & 0xff));
}
public static final ByteBuffer putFloat (ByteBuffer buffer, float value)
{
checkRemainingForWrite (buffer, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put ((byte) (((int) value) & 0xff000000));
buffer.put ((byte) ((((int) value) & 0x00ff0000) >> 8));
buffer.put ((byte) ((((int) value) & 0x0000ff00) >> 16));
buffer.put ((byte) ((((int) value) & 0x000000ff) >> 24));
}
else
{
buffer.put ((byte) ((((int) value) & 0xff000000) >> 24));
buffer.put ((byte) ((((int) value) & 0x00ff0000) >> 16));
buffer.put ((byte) ((((int) value) & 0x0000ff00) >> 8));
buffer.put ((byte) (((int) value) & 0x000000ff));
}
return buffer;
}
public static final float getFloat (ByteBuffer buffer, int index)
{
checkAvailableForRead (buffer, index, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (float) ((buffer.get (index) & 0xff)
+ ((buffer.get (index + 1) & 0xff) << 8)
+ ((buffer.get (index + 2) & 0xff) << 16)
+ ((buffer.get (index + 3) & 0xff) << 24));
}
return (float) (((buffer.get (index) & 0xff) << 24)
+ ((buffer.get (index + 1) & 0xff) << 16)
+ ((buffer.get (index + 2) & 0xff) << 8)
+ (buffer.get (index + 3) & 0xff));
}
public static final ByteBuffer putFloat (ByteBuffer buffer, int index,
float value)
{
checkAvailableForWrite (buffer, index, 4);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put (index + 3, (byte) ((((int) value) & 0xff000000) >> 24));
buffer.put (index + 2, (byte) ((((int) value) & 0x00ff0000) >> 16));
buffer.put (index + 1, (byte) ((((int) value) & 0x0000ff00) >> 8));
buffer.put (index, (byte) (((int) value) & 0x000000ff));
}
else
{
buffer.put (index, (byte) ((((int) value) & 0xff000000) >> 24));
buffer.put (index + 1, (byte) ((((int) value) & 0x00ff0000) >> 16));
buffer.put (index + 2, (byte) ((((int) value) & 0x0000ff00) >> 8));
buffer.put (index + 3, (byte) (((int) value) & 0x000000ff));
}
return buffer;
}
public static final double getDouble (ByteBuffer buffer)
{
checkRemainingForRead (buffer, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (double) ((buffer.get() & 0xff)
+ ((buffer.get() & 0xff) << 8)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 24)
+ ((buffer.get() & 0xff) << 32)
+ ((buffer.get() & 0xff) << 40)
+ ((buffer.get() & 0xff) << 48)
+ ((buffer.get() & 0xff) << 56));
}
return (double) (((buffer.get() & 0xff) << 56)
+ ((buffer.get() & 0xff) << 48)
+ ((buffer.get() & 0xff) << 40)
+ ((buffer.get() & 0xff) << 32)
+ ((buffer.get() & 0xff) << 24)
+ ((buffer.get() & 0xff) << 16)
+ ((buffer.get() & 0xff) << 8)
+ (buffer.get() & 0xff));
}
public static final ByteBuffer putDouble (ByteBuffer buffer, double value)
{
checkRemainingForWrite (buffer, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put ((byte) (((long) value) & 0xff00000000000000L));
buffer.put ((byte) ((((long) value) & 0x00ff000000000000L) >> 8));
buffer.put ((byte) ((((long) value) & 0x0000ff0000000000L) >> 16));
buffer.put ((byte) ((((long) value) & 0x000000ff00000000L) >> 24));
buffer.put ((byte) ((((long) value) & 0x00000000ff000000L) >> 32));
buffer.put ((byte) ((((long) value) & 0x0000000000ff0000L) >> 40));
buffer.put ((byte) ((((long) value) & 0x000000000000ff00L) >> 48));
buffer.put ((byte) ((((long) value) & 0x00000000000000ffL) >> 56));
}
else
{
buffer.put ((byte) ((((long) value) & 0xff00000000000000L) >> 56));
buffer.put ((byte) ((((long) value) & 0x00ff000000000000L) >> 48));
buffer.put ((byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
buffer.put ((byte) ((((long) value) & 0x000000ff00000000L) >> 32));
buffer.put ((byte) ((((long) value) & 0x00000000ff000000L) >> 24));
buffer.put ((byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
buffer.put ((byte) ((((long) value) & 0x000000000000ff00L) >> 8));
buffer.put ((byte) (((long) value) & 0x00000000000000ffL));
}
return buffer;
}
public static final double getDouble (ByteBuffer buffer, int index)
{
checkAvailableForRead (buffer, index, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
return (double) ((buffer.get (index) & 0xff)
+ ((buffer.get (index + 1) & 0xff) << 8)
+ ((buffer.get (index + 2) & 0xff) << 16)
+ ((buffer.get (index + 3) & 0xff) << 24)
+ ((buffer.get (index + 4) & 0xff) << 32)
+ ((buffer.get (index + 5) & 0xff) << 40)
+ ((buffer.get (index + 6) & 0xff) << 48)
+ ((buffer.get (index + 7) & 0xff) << 56));
}
return (double) (((buffer.get (index) & 0xff) << 56)
+ ((buffer.get (index + 1) & 0xff) << 48)
+ ((buffer.get (index + 2) & 0xff) << 40)
+ ((buffer.get (index + 3) & 0xff) << 32)
+ ((buffer.get (index + 4) & 0xff) << 24)
+ ((buffer.get (index + 5) & 0xff) << 16)
+ ((buffer.get (index + 6) & 0xff) << 8)
+ (buffer.get (index + 7) & 0xff));
}
public static final ByteBuffer putDouble (ByteBuffer buffer, int index,
double value)
{
checkAvailableForWrite (buffer, index, 8);
if (buffer.order() == ByteOrder.LITTLE_ENDIAN)
{
buffer.put (index + 7, (byte) ((((long) value) & 0xff00000000000000L) >> 56));
buffer.put (index + 6, (byte) ((((long) value) & 0x00ff000000000000L) >> 48));
buffer.put (index + 5, (byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
buffer.put (index + 4, (byte) ((((long) value) & 0x000000ff00000000L) >> 32));
buffer.put (index + 3, (byte) ((((long) value) & 0x00000000ff000000L) >> 24));
buffer.put (index + 2, (byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
buffer.put (index + 1, (byte) ((((long) value) & 0x000000000000ff00L) >> 8));
buffer.put (index, (byte) (((long) value) & 0x00000000000000ffL));
}
else
{
buffer.put (index, (byte) ((((long) value) & 0xff00000000000000L) >> 56));
buffer.put (index + 1, (byte) ((((long) value) & 0x00ff000000000000L) >> 48));
buffer.put (index + 2, (byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
buffer.put (index + 3, (byte) ((((long) value) & 0x000000ff00000000L) >> 32));
buffer.put (index + 4, (byte) ((((long) value) & 0x00000000ff000000L) >> 24));
buffer.put (index + 5, (byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
buffer.put (index + 6, (byte) ((((long) value) & 0x000000000000ff00L) >> 8));
buffer.put (index + 7, (byte) (((long) value) & 0x00000000000000ffL));
}
return buffer;
}
} // ByteBufferHelper

View file

@ -182,313 +182,121 @@ final class ByteBufferImpl extends ByteBuffer
final public char getChar () final public char getChar ()
{ {
if (remaining() < 2) return ByteBufferHelper.getChar (this);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (char) (((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putChar (char value) final public ByteBuffer putChar (char value)
{ {
if (remaining() < 2) return ByteBufferHelper.putChar (this, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put ((byte) ((((int) value) & 0xff00) >> 8));
put ((byte) (((int) value) & 0x00ff));
return this;
} }
final public char getChar (int index) final public char getChar (int index)
{ {
if (remaining() < 2) return ByteBufferHelper.getChar (this, index);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (char) (((get (index) & 0xff) << 8) + (get (index + 1) & 0xff));
} }
final public ByteBuffer putChar (int index, char value) final public ByteBuffer putChar (int index, char value)
{ {
if (remaining() < 2) return ByteBufferHelper.putChar (this, index, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put (index, (byte) ((((int) value) & 0xff00) >> 8));
put (index + 1, (byte) (((int) value) & 0x00ff));
return this;
} }
final public short getShort () final public short getShort ()
{ {
if (remaining() < 2) return ByteBufferHelper.getShort (this);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (short) (((get () & 0xff) << 8) + (get () & 0xff));
} }
final public ByteBuffer putShort (short value) final public ByteBuffer putShort (short value)
{ {
if (remaining() < 2) return ByteBufferHelper.putShort (this, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put ((byte) ((((int) value) & 0xff00) >> 8));
put ((byte) (((int) value) & 0x00ff));
return this;
} }
final public short getShort (int index) final public short getShort (int index)
{ {
if (remaining() < 2) return ByteBufferHelper.getShort (this, index);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (short) (((get (index) & 0xff) << 8) + (get (index + 1) & 0xff));
} }
final public ByteBuffer putShort (int index, short value) final public ByteBuffer putShort (int index, short value)
{ {
if (remaining() < 2) return ByteBufferHelper.putShort (this, index, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put (index, (byte) ((((int) value) & 0xff00) >> 8));
put (index + 1, (byte) (((int) value) & 0x00ff));
return this;
} }
final public int getInt () final public int getInt ()
{ {
if (remaining() < 4) return ByteBufferHelper.getInt (this);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (int) (((get () & 0xff) << 24)
+ ((get () & 0xff) << 16)
+ ((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putInt (int value) final public ByteBuffer putInt (int value)
{ {
if (remaining() < 4) return ByteBufferHelper.putInt (this, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put ((byte) ((value & 0xff000000) >> 24));
put ((byte) ((value & 0x00ff0000) >> 16));
put ((byte) ((value & 0x0000ff00) >> 8));
put ((byte) (value & 0x000000ff));
return this;
} }
final public int getInt (int index) final public int getInt (int index)
{ {
if (remaining() < 4) return ByteBufferHelper.getInt (this, index);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (int) (((get (index) & 0xff) << 24)
+ ((get (index + 1) & 0xff) << 16)
+ ((get (index + 2) & 0xff) << 8)
+ (get (index + 3) & 0xff));
} }
final public ByteBuffer putInt (int index, int value) final public ByteBuffer putInt (int index, int value)
{ {
if (remaining() < 4) return ByteBufferHelper.putInt (this, index, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put (index, (byte) ((value & 0xff000000) >> 24));
put (index + 1, (byte) ((value & 0x00ff0000) >> 16));
put (index + 2, (byte) ((value & 0x0000ff00) >> 8));
put (index + 3, (byte) (value & 0x000000ff));
return this;
} }
final public long getLong () final public long getLong ()
{ {
if (remaining() < 8) return ByteBufferHelper.getLong (this);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (long) (((get () & 0xff) << 56)
+ ((get () & 0xff) << 48)
+ ((get () & 0xff) << 40)
+ ((get () & 0xff) << 32)
+ ((get () & 0xff) << 24)
+ ((get () & 0xff) << 16)
+ ((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putLong (long value) final public ByteBuffer putLong (long value)
{ {
if (remaining() < 8) return ByteBufferHelper.putLong (this, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put ((byte) ((value & 0xff00000000000000L) >> 56));
put ((byte) ((value & 0x00ff000000000000L) >> 48));
put ((byte) ((value & 0x0000ff0000000000L) >> 40));
put ((byte) ((value & 0x000000ff00000000L) >> 32));
put ((byte) ((value & 0x00000000ff000000L) >> 24));
put ((byte) ((value & 0x0000000000ff0000L) >> 16));
put ((byte) ((value & 0x000000000000ff00L) >> 8));
put ((byte) (value & 0x00000000000000ffL));
return this;
} }
final public long getLong (int index) final public long getLong (int index)
{ {
if (remaining() < 8) return ByteBufferHelper.getLong (this, index);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (long) (((get (index) & 0xff) << 56)
+ ((get (index + 1) & 0xff) << 48)
+ ((get (index + 2) & 0xff) << 40)
+ ((get (index + 3) & 0xff) << 32)
+ ((get (index + 4) & 0xff) << 24)
+ ((get (index + 5) & 0xff) << 16)
+ ((get (index + 6) & 0xff) << 8)
+ (get (index + 7) & 0xff));
} }
final public ByteBuffer putLong (int index, long value) final public ByteBuffer putLong (int index, long value)
{ {
if (remaining() < 8) return ByteBufferHelper.putLong (this, index, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put (index, (byte) ((value & 0xff00000000000000L) >> 56));
put (index + 1, (byte) ((value & 0x00ff000000000000L) >> 48));
put (index + 2, (byte) ((value & 0x0000ff0000000000L) >> 40));
put (index + 3, (byte) ((value & 0x000000ff00000000L) >> 32));
put (index + 4, (byte) ((value & 0x00000000ff000000L) >> 24));
put (index + 5, (byte) ((value & 0x0000000000ff0000L) >> 16));
put (index + 6, (byte) ((value & 0x000000000000ff00L) >> 8));
put (index + 7, (byte) (value & 0x00000000000000ffL));
return this;
} }
final public float getFloat () final public float getFloat ()
{ {
if (remaining() < 4) return ByteBufferHelper.getFloat (this);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (float) (((get () & 0xff) << 24)
+ ((get () & 0xff) << 16)
+ ((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putFloat (float value) final public ByteBuffer putFloat (float value)
{ {
if (remaining() < 4) return ByteBufferHelper.putFloat (this, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put ((byte) ((((int) value) & 0xff000000) >> 24));
put ((byte) ((((int) value) & 0x00ff0000) >> 16));
put ((byte) ((((int) value) & 0x0000ff00) >> 8));
put ((byte) (((int) value) & 0x000000ff));
return this;
} }
final public float getFloat (int index) final public float getFloat (int index)
{ {
if (remaining() < 4) return ByteBufferHelper.getFloat (this, index);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (float) (((get (index) & 0xff) << 24)
+ ((get (index + 1) & 0xff) << 16)
+ ((get (index + 2) & 0xff) << 8)
+ (get (index + 3) & 0xff));
} }
final public ByteBuffer putFloat (int index, float value) public final ByteBuffer putFloat (int index, float value)
{ {
if (remaining() < 4) return ByteBufferHelper.putFloat (this, index, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put (index, (byte) ((((int) value) & 0xff000000) >> 24));
put (index + 1, (byte) ((((int) value) & 0x00ff0000) >> 16));
put (index + 2, (byte) ((((int) value) & 0x0000ff00) >> 8));
put (index + 3, (byte) (((int) value) & 0x000000ff));
return this;
} }
final public double getDouble () final public double getDouble ()
{ {
if (remaining() < 8) return ByteBufferHelper.getDouble (this);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (double) (((get () & 0xff) << 56)
+ ((get () & 0xff) << 48)
+ ((get () & 0xff) << 40)
+ ((get () & 0xff) << 32)
+ ((get () & 0xff) << 24)
+ ((get () & 0xff) << 16)
+ ((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putDouble (double value) final public ByteBuffer putDouble (double value)
{ {
if (remaining() < 8) return ByteBufferHelper.putDouble (this, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put ((byte) ((((long) value) & 0xff00000000000000L) >> 56));
put ((byte) ((((long) value) & 0x00ff000000000000L) >> 48));
put ((byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
put ((byte) ((((long) value) & 0x000000ff00000000L) >> 32));
put ((byte) ((((long) value) & 0x00000000ff000000L) >> 24));
put ((byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
put ((byte) ((((long) value) & 0x000000000000ff00L) >> 8));
put ((byte) (((long) value) & 0x00000000000000ffL));
return this;
} }
final public double getDouble (int index) final public double getDouble (int index)
{ {
if (remaining() < 8) return ByteBufferHelper.getDouble (this, index);
throw new BufferUnderflowException();
// FIXME: this handles little endian only
return (double) (((get (index) & 0xff) << 56)
+ ((get (index + 1) & 0xff) << 48)
+ ((get (index + 2) & 0xff) << 40)
+ ((get (index + 3) & 0xff) << 32)
+ ((get (index + 4) & 0xff) << 24)
+ ((get (index + 5) & 0xff) << 16)
+ ((get (index + 6) & 0xff) << 8)
+ (get (index + 7) & 0xff));
} }
final public ByteBuffer putDouble (int index, double value) final public ByteBuffer putDouble (int index, double value)
{ {
if (remaining() < 8) return ByteBufferHelper.putDouble (this, index, value);
throw new BufferOverflowException();
// FIXME: this handles little endian only
put (index, (byte) ((((long) value) & 0xff00000000000000L) >> 56));
put (index + 1, (byte) ((((long) value) & 0x00ff000000000000L) >> 48));
put (index + 2, (byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
put (index + 3, (byte) ((((long) value) & 0x000000ff00000000L) >> 32));
put (index + 4, (byte) ((((long) value) & 0x00000000ff000000L) >> 24));
put (index + 5, (byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
put (index + 6, (byte) ((((long) value) & 0x000000000000ff00L) >> 8));
put (index + 7, (byte) (((long) value) & 0x00000000000000ffL));
return this;
} }
} }

View file

@ -292,134 +292,56 @@ class DirectByteBufferImpl extends ByteBuffer
final public ByteBuffer putLong (long value) final public ByteBuffer putLong (long value)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.putLong (this, value);
put ((byte) ((value & 0xff00000000000000L) >> 56));
put ((byte) ((value & 0x00ff000000000000L) >> 48));
put ((byte) ((value & 0x0000ff0000000000L) >> 40));
put ((byte) ((value & 0x000000ff00000000L) >> 32));
put ((byte) ((value & 0x00000000ff000000L) >> 24));
put ((byte) ((value & 0x0000000000ff0000L) >> 16));
put ((byte) ((value & 0x000000000000ff00L) >> 8));
put ((byte) (value & 0x00000000000000ffL));
return this;
} }
final public long getLong (int index) final public long getLong (int index)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.getLong (this, index);
return (long) (((get (index) & 0xff) << 56)
+ ((get (index + 1) & 0xff) << 48)
+ ((get (index + 2) & 0xff) << 40)
+ ((get (index + 3) & 0xff) << 32)
+ ((get (index + 4) & 0xff) << 24)
+ ((get (index + 5) & 0xff) << 16)
+ ((get (index + 6) & 0xff) << 8)
+ (get (index + 7) & 0xff));
} }
final public ByteBuffer putLong (int index, long value) final public ByteBuffer putLong (int index, long value)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.putLong (this, index, value);
put (index, (byte) ((value & 0xff00000000000000L) >> 56));
put (index + 1, (byte) ((value & 0x00ff000000000000L) >> 48));
put (index + 2, (byte) ((value & 0x0000ff0000000000L) >> 40));
put (index + 3, (byte) ((value & 0x000000ff00000000L) >> 32));
put (index + 4, (byte) ((value & 0x00000000ff000000L) >> 24));
put (index + 5, (byte) ((value & 0x0000000000ff0000L) >> 16));
put (index + 6, (byte) ((value & 0x000000000000ff00L) >> 8));
put (index + 7, (byte) (value & 0x00000000000000ffL));
return this;
} }
final public float getFloat () final public float getFloat ()
{ {
// FIXME: this handles little endian only return ByteBufferHelper.getFloat (this);
return (float) (((get () & 0xff) << 24)
+ ((get () & 0xff) << 16)
+ ((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putFloat (float value) final public ByteBuffer putFloat (float value)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.putFloat (this, value);
put ((byte) ((((int) value) & 0xff000000) >> 24));
put ((byte) ((((int) value) & 0x00ff0000) >> 16));
put ((byte) ((((int) value) & 0x0000ff00) >> 8));
put ((byte) (((int) value) & 0x000000ff));
return this;
} }
final public float getFloat (int index) public final float getFloat (int index)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.getFloat (this, index);
return (float) (((get (index) & 0xff) << 24)
+ ((get (index + 1) & 0xff) << 16)
+ ((get (index + 2) & 0xff) << 8)
+ (get (index + 3) & 0xff));
} }
final public ByteBuffer putFloat (int index, float value) final public ByteBuffer putFloat (int index, float value)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.putFloat (this, index, value);
put (index, (byte) ((((int) value) & 0xff000000) >> 24));
put (index + 1, (byte) ((((int) value) & 0x00ff0000) >> 16));
put (index + 2, (byte) ((((int) value) & 0x0000ff00) >> 8));
put (index + 3, (byte) (((int) value) & 0x000000ff));
return this;
} }
final public double getDouble () final public double getDouble ()
{ {
// FIXME: this handles little endian only return ByteBufferHelper.getDouble (this);
return (double) (((get () & 0xff) << 56)
+ ((get () & 0xff) << 48)
+ ((get () & 0xff) << 40)
+ ((get () & 0xff) << 32)
+ ((get () & 0xff) << 24)
+ ((get () & 0xff) << 16)
+ ((get () & 0xff) << 8)
+ (get () & 0xff));
} }
final public ByteBuffer putDouble (double value) final public ByteBuffer putDouble (double value)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.putDouble (this, value);
put ((byte) ((((long) value) & 0xff00000000000000L) >> 56));
put ((byte) ((((long) value) & 0x00ff000000000000L) >> 48));
put ((byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
put ((byte) ((((long) value) & 0x000000ff00000000L) >> 32));
put ((byte) ((((long) value) & 0x00000000ff000000L) >> 24));
put ((byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
put ((byte) ((((long) value) & 0x000000000000ff00L) >> 8));
put ((byte) (((long) value) & 0x00000000000000ffL));
return this;
} }
final public double getDouble (int index) final public double getDouble (int index)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.getDouble (this, index);
return (double) (((get (index) & 0xff) << 56)
+ ((get (index + 1) & 0xff) << 48)
+ ((get (index + 2) & 0xff) << 40)
+ ((get (index + 3) & 0xff) << 32)
+ ((get (index + 4) & 0xff) << 24)
+ ((get (index + 5) & 0xff) << 16)
+ ((get (index + 6) & 0xff) << 8)
+ (get (index + 7) & 0xff));
} }
final public ByteBuffer putDouble (int index, double value) final public ByteBuffer putDouble (int index, double value)
{ {
// FIXME: this handles little endian only return ByteBufferHelper.putDouble (this, index, value);
put (index, (byte) ((((long) value) & 0xff00000000000000L) >> 56));
put (index + 1, (byte) ((((long) value) & 0x00ff000000000000L) >> 48));
put (index + 2, (byte) ((((long) value) & 0x0000ff0000000000L) >> 40));
put (index + 3, (byte) ((((long) value) & 0x000000ff00000000L) >> 32));
put (index + 4, (byte) ((((long) value) & 0x00000000ff000000L) >> 24));
put (index + 5, (byte) ((((long) value) & 0x0000000000ff0000L) >> 16));
put (index + 6, (byte) ((((long) value) & 0x000000000000ff00L) >> 8));
put (index + 7, (byte) (((long) value) & 0x00000000000000ffL));
return this;
} }
} }

View file

@ -58,6 +58,15 @@ public class MappedByteBufferImpl extends MappedByteBuffer
limit ((int) si); limit ((int) si);
} }
public MappedByteBufferImpl (FileChannelImpl ch, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
{
super (capacity, limit, position, mark);
this.ch = ch;
this.array_offset = offset;
this.readOnly = readOnly;
}
public boolean isReadOnly () public boolean isReadOnly ()
{ {
return readOnly; return readOnly;
@ -164,147 +173,123 @@ public class MappedByteBufferImpl extends MappedByteBuffer
return new DoubleViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly ()); return new DoubleViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly ());
} }
public char getChar () public final char getChar()
{ {
char value = getChar (position()); return ByteBufferHelper.getChar (this);
position (position() + 2); }
return value;
public final ByteBuffer putChar (char value)
{
return ByteBufferHelper.putChar (this, value);
}
public final char getChar (int index)
{
return ByteBufferHelper.getChar (this, index);
}
public final ByteBuffer putChar (int index, char value)
{
return ByteBufferHelper.putChar (this, index, value);
} }
public char getChar (int index) public final short getShort()
{ {
throw new Error ("Not implemented"); return ByteBufferHelper.getShort (this);
}
public final ByteBuffer putShort (short value)
{
return ByteBufferHelper.putShort (this, value);
}
public final short getShort (int index)
{
return ByteBufferHelper.getShort (this, index);
}
public final ByteBuffer putShort (int index, short value)
{
return ByteBufferHelper.putShort (this, index, value);
} }
public ByteBuffer putChar (char value) public final int getInt()
{ {
putChar (position(), value); return ByteBufferHelper.getInt (this);
position (position() + 2); }
return this;
public final ByteBuffer putInt (int value)
{
return ByteBufferHelper.putInt (this, value);
}
public final int getInt (int index)
{
return ByteBufferHelper.getInt (this, index);
}
public final ByteBuffer putInt (int index, int value)
{
return ByteBufferHelper.putInt (this, index, value);
} }
public ByteBuffer putChar (int index, char value) public final long getLong()
{ {
throw new Error ("Not implemented"); return ByteBufferHelper.getLong (this);
}
public final ByteBuffer putLong (long value)
{
return ByteBufferHelper.putLong (this, value);
}
public final long getLong (int index)
{
return ByteBufferHelper.getLong (this, index);
}
public final ByteBuffer putLong (int index, long value)
{
return ByteBufferHelper.putLong (this, index, value);
} }
public double getDouble () public final float getFloat()
{ {
double value = getDouble (position()); return ByteBufferHelper.getFloat (this);
position (position() + 8); }
return value;
public final ByteBuffer putFloat (float value)
{
return ByteBufferHelper.putFloat (this, value);
}
public final float getFloat (int index)
{
return ByteBufferHelper.getFloat (this, index);
} }
public double getDouble (int index) public final ByteBuffer putFloat (int index, float value)
{ {
throw new Error ("Not implemented"); return ByteBufferHelper.putFloat (this, index, value);
} }
public ByteBuffer putDouble (double value) public final double getDouble()
{ {
putDouble (position(), value); return ByteBufferHelper.getDouble (this);
position (position() + 8);
return this;
} }
public ByteBuffer putDouble (int index, double value) public final ByteBuffer putDouble (double value)
{ {
throw new Error ("Not implemented"); return ByteBufferHelper.putDouble (this, value);
} }
public float getFloat () public final double getDouble (int index)
{ {
float value = getFloat (position ()); return ByteBufferHelper.getDouble (this, index);
position (position() + 4);
return value;
} }
public float getFloat (int index) public final ByteBuffer putDouble (int index, double value)
{ {
throw new Error ("Not implemented"); return ByteBufferHelper.putDouble (this, index, value);
}
public ByteBuffer putFloat (float value)
{
putFloat (position(), value);
position (position() + 4);
return this;
}
public ByteBuffer putFloat (int index, float value)
{
throw new Error ("Not implemented");
}
public int getInt ()
{
int value = getInt (position());
position (position() + 8);
return value;
}
public int getInt (int index)
{
throw new Error ("Not implemented");
}
public ByteBuffer putInt (int value)
{
putInt (position(), value);
position (position() + 4);
return this;
}
public ByteBuffer putInt (int index, int value)
{
throw new Error ("Not implemented");
}
public long getLong ()
{
long value = getLong (position());
position (position() + 8);
return value;
}
public long getLong (int index)
{
throw new Error ("Not implemented");
}
public ByteBuffer putLong (long value)
{
putLong (position(), value);
position (position() + 8);
return this;
}
public ByteBuffer putLong (int index, long value)
{
throw new Error ("Not implemented");
}
public short getShort ()
{
short value = getShort (position());
position (position() + 2);
return value;
}
public short getShort (int index)
{
throw new Error ("Not implemented");
}
public ByteBuffer putShort (short value)
{
putShort (position(), value);
position (position() + 2);
return this;
}
public ByteBuffer putShort (int index, short value)
{
throw new Error ("Not implemented");
} }
} }