diff options
Diffstat (limited to 'libjava/gnu')
-rw-r--r-- | libjava/gnu/java/nio/ByteBufferImpl.java | 214 | ||||
-rw-r--r-- | libjava/gnu/java/nio/CharBufferImpl.java | 223 | ||||
-rw-r--r-- | libjava/gnu/java/nio/DatagramChannelImpl.java | 110 | ||||
-rw-r--r-- | libjava/gnu/java/nio/DoubleBufferImpl.java | 212 | ||||
-rw-r--r-- | libjava/gnu/java/nio/FileChannelImpl.java | 234 | ||||
-rw-r--r-- | libjava/gnu/java/nio/FloatBufferImpl.java | 218 | ||||
-rw-r--r-- | libjava/gnu/java/nio/IntBufferImpl.java | 206 | ||||
-rw-r--r-- | libjava/gnu/java/nio/LongBufferImpl.java | 212 | ||||
-rw-r--r-- | libjava/gnu/java/nio/PipeImpl.java | 57 | ||||
-rw-r--r-- | libjava/gnu/java/nio/SelectionKeyImpl.java | 83 | ||||
-rw-r--r-- | libjava/gnu/java/nio/SelectorImpl.java | 204 | ||||
-rw-r--r-- | libjava/gnu/java/nio/SelectorProviderImpl.java | 77 | ||||
-rw-r--r-- | libjava/gnu/java/nio/ServerSocketChannelImpl.java | 118 | ||||
-rw-r--r-- | libjava/gnu/java/nio/ShortBufferImpl.java | 212 | ||||
-rw-r--r-- | libjava/gnu/java/nio/SocketChannelImpl.java | 234 |
15 files changed, 2614 insertions, 0 deletions
diff --git a/libjava/gnu/java/nio/ByteBufferImpl.java b/libjava/gnu/java/nio/ByteBufferImpl.java new file mode 100644 index 0000000..e27207e --- /dev/null +++ b/libjava/gnu/java/nio/ByteBufferImpl.java @@ -0,0 +1,214 @@ +/* ByteBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +public final class ByteBufferImpl extends ByteBuffer +{ + private byte[] backing_buffer; + private int array_offset; + private boolean ro; + + public ByteBufferImpl (int cap, int off, int lim) + { + this.cap = cap; + position (off); + limit (lim); + this.backing_buffer = new byte[cap]; + } + + public ByteBufferImpl (byte[] array, int off, int lim) + { + this.cap = array.length; + position (off); + limit (lim); + this.backing_buffer = array; + } + + public ByteBufferImpl (ByteBufferImpl copy) + { + this.cap = copy.capacity (); + position (copy.position ()); + limit (copy.limit ()); + ro = copy.ro; + backing_buffer = copy.backing_buffer; + } + + void inc_pos (int toAdd) + { + position (position () + toAdd); + } + +// private static native byte[] nio_cast(byte[]copy); +// private static native byte[] nio_cast(char[]copy); +// private static native byte[] nio_cast(short[]copy); +// private static native byte[] nio_cast(long[]copy); +// private static native byte[] nio_cast(int[]copy); +// private static native byte[] nio_cast(float[]copy); +// private static native byte[] nio_cast(double[]copy); + + private static byte[] nio_cast(byte[]copy) { return null; }; + private static byte[] nio_cast(char[]copy) { return null; }; + private static byte[] nio_cast(short[]copy) { return null; }; + private static byte[] nio_cast(long[]copy) { return null; }; + private static byte[] nio_cast(int[]copy) { return null; }; + private static byte[] nio_cast(float[]copy) { return null; }; + private static byte[] nio_cast(double[]copy) { return null; }; + + ByteBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native byte nio_get_Byte(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Byte(ByteBufferImpl b, int index, int limit, byte value); + private static byte nio_get_Byte(ByteBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Byte(ByteBufferImpl b, int index, int limit, byte value) { }; + public ByteBuffer asByteBuffer() { ByteBufferImpl res = new ByteBufferImpl(backing_buffer); res.limit((limit()*1)/1); return res; } + + ByteBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Char(ByteBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(ByteBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(ByteBufferImpl b, int index, int limit, char value) { }; + public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/1); return res; } + + ByteBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Short(ByteBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(ByteBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Short(ByteBufferImpl b, int index, int limit, short value) { }; + public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/1); return res; } + + ByteBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Int(ByteBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(ByteBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Int(ByteBufferImpl b, int index, int limit, int value) { }; + public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/1); return res; } + + ByteBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Long(ByteBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(ByteBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(ByteBufferImpl b, int index, int limit, long value) { }; + public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/1); return res; } + + ByteBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Float(ByteBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(ByteBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(ByteBufferImpl b, int index, int limit, float value) { }; + public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/1); return res; } + + ByteBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(ByteBufferImpl b, int index, int limit); +// private static native void nio_put_Double(ByteBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(ByteBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(ByteBufferImpl b, int index, int limit, double value) { }; + public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/1); return res; } + + public boolean isReadOnly() + { + return ro; + } + + public ByteBuffer slice() + { + ByteBufferImpl A = new ByteBufferImpl(this); + A.array_offset = position(); + return A; + } + + public ByteBuffer duplicate() + { + return new ByteBufferImpl(this); + } + + public ByteBuffer asReadOnlyBuffer() + { + ByteBufferImpl a = new ByteBufferImpl(this); + a.ro = true; + return a; + } + + public ByteBuffer compact() + { + return this; + } + + public boolean isDirect() + { + return backing_buffer != null; + } + + final public byte get() + { + byte e = backing_buffer[position()]; + position(position()+1); + return e; + } + + final public ByteBuffer put(byte b) + { + backing_buffer[position()] = b; + position(position()+1); + return this; + } + + final public byte get(int index) + { + return backing_buffer[index]; + } + + final public ByteBuffer put(int index, byte b) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public ByteBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public ByteBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; + final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public ByteBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public ByteBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; + final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public ByteBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public ByteBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; + final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public ByteBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public ByteBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; + final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public ByteBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public ByteBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; + final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public ByteBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public ByteBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; +} diff --git a/libjava/gnu/java/nio/CharBufferImpl.java b/libjava/gnu/java/nio/CharBufferImpl.java new file mode 100644 index 0000000..5253646 --- /dev/null +++ b/libjava/gnu/java/nio/CharBufferImpl.java @@ -0,0 +1,223 @@ +/* CharBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +public final class CharBufferImpl extends CharBuffer +{ + private int array_offset; + private boolean ro; + + public CharBufferImpl(int cap, int off, int lim) + { + this.backing_buffer = new char[cap]; + this.cap = cap; + this.position(off); + this.limit(lim); + } + + public CharBufferImpl(char[] array, int off, int lim) + { + this.backing_buffer = array; + this.cap = array.length; + this.position(off); + this.limit(lim); + } + + public CharBufferImpl (CharBufferImpl copy) + { + backing_buffer = copy.backing_buffer; + ro = copy.ro; + position (copy.position ()); + limit (copy.limit()); + } + + void inc_pos (int a) + { + position (position () + a); + } + +// private static native char[] nio_cast(byte[]copy); +// private static native char[] nio_cast(char[]copy); +// private static native char[] nio_cast(short[]copy); +// private static native char[] nio_cast(long[]copy); +// private static native char[] nio_cast(int[]copy); +// private static native char[] nio_cast(float[]copy); +// private static native char[] nio_cast(double[]copy); + + private static char[] nio_cast(byte[]copy) { return null; }; + private static char[] nio_cast(char[]copy) { return null; }; + private static char[] nio_cast(short[]copy) { return null; }; + private static char[] nio_cast(long[]copy) { return null; }; + private static char[] nio_cast(int[]copy) { return null; }; + private static char[] nio_cast(float[]copy) { return null; }; + private static char[] nio_cast(double[]copy) { return null; }; + + CharBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native byte nio_get_Byte(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Byte(CharBufferImpl b, int index, int limit, byte value); + private static byte nio_get_Byte(CharBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Byte(CharBufferImpl b, int index, int limit, byte value) { }; + public java.nio. ByteBuffer asByteBuffer() { gnu.java.nio. ByteBufferImpl res = new gnu.java.nio. ByteBufferImpl(backing_buffer); res.limit((limit()*1)/2); return res; } + + CharBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Char(CharBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(CharBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(CharBufferImpl b, int index, int limit, char value) { }; + public java.nio. CharBuffer asCharBuffer() { gnu.java.nio. CharBufferImpl res = new gnu.java.nio. CharBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } + + CharBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Short(CharBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(CharBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Short(CharBufferImpl b, int index, int limit, short value) { }; + public java.nio. ShortBuffer asShortBuffer() { gnu.java.nio. ShortBufferImpl res = new gnu.java.nio. ShortBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } + + CharBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Int(CharBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(CharBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Int(CharBufferImpl b, int index, int limit, int value) { }; + public java.nio. IntBuffer asIntBuffer() { gnu.java.nio. IntBufferImpl res = new gnu.java.nio. IntBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } + + CharBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Long(CharBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(CharBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(CharBufferImpl b, int index, int limit, long value) { }; + public java.nio. LongBuffer asLongBuffer() { gnu.java.nio. LongBufferImpl res = new gnu.java.nio. LongBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } + + CharBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Float(CharBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(CharBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(CharBufferImpl b, int index, int limit, float value) { }; + public java.nio. FloatBuffer asFloatBuffer() { gnu.java.nio. FloatBufferImpl res = new gnu.java.nio. FloatBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } + + CharBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(CharBufferImpl b, int index, int limit); +// private static native void nio_put_Double(CharBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(CharBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(CharBufferImpl b, int index, int limit, double value) { }; + public java.nio. DoubleBuffer asDoubleBuffer() { gnu.java.nio. DoubleBufferImpl res = new gnu.java.nio. DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } + + public boolean isReadOnly() + { + return ro; + } + public CharBuffer slice() + { + CharBufferImpl A = new CharBufferImpl(this); + A.array_offset = position(); + return A; + } + public CharBuffer duplicate() + { + return new CharBufferImpl(this); + } + public CharBuffer asReadOnlyBuffer() + { + CharBufferImpl a = new CharBufferImpl(this); + a.ro = true; + return a; + } + public CharBuffer compact() + { + return this; + } + public boolean isDirect() + { + return backing_buffer != null; + } + final public char get() + { + char e = backing_buffer[position()]; + position(position()+1); + return e; + } + final public CharBuffer put(char b) + { + backing_buffer[position()] = b; + position(position()+1); + return this; + } + final public char get(int index) + { + return backing_buffer[index]; + } + final public java.nio. CharBuffer put(int index, char b) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { return get(); } final public java.nio. CharBuffer putChar(char value) { return put(value); } final public char getChar(int index) { return get(index); } final public java.nio. CharBuffer putChar(int index, char value) { return put(index, value); }; + final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public java.nio. CharBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public java.nio. CharBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; + final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public java.nio. CharBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public java.nio. CharBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; + final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public java.nio. CharBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public java.nio. CharBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; + final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public java.nio. CharBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public java.nio. CharBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; + final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public java.nio. CharBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public java.nio. CharBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; + + public String toString() + { + if (backing_buffer != null) + { + return new String(backing_buffer, position(), limit()); + } + return super.toString(); + } + + public final ByteOrder order() + { + return endian; + } + + public CharSequence subSequence(int a, int b) + { + return null; + } +} diff --git a/libjava/gnu/java/nio/DatagramChannelImpl.java b/libjava/gnu/java/nio/DatagramChannelImpl.java new file mode 100644 index 0000000..b192ef2 --- /dev/null +++ b/libjava/gnu/java/nio/DatagramChannelImpl.java @@ -0,0 +1,110 @@ +/* DatagramChannelImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.net.DatagramSocket; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; +import java.nio.channels.spi.SelectorProvider; + +public class DatagramChannelImpl extends DatagramChannel +{ + protected DatagramChannelImpl (SelectorProvider provider) + { + super (provider); + } + + protected void implCloseSelectableChannel () + { + } + + protected void implConfigureBlocking (boolean block) + { + } + + public int write (ByteBuffer src) + { + return 0; + } + + public long write (ByteBuffer[] srcs, int offset, int length) + { + return 0; + } + + public int read (ByteBuffer dst) + { + return 0; + } + + public DatagramChannel connect (SocketAddress remote) + { + return null; + } + + public DatagramChannel disconnect () + { + return null; + } + + public boolean isConnected () + { + return false; + } + + public long read (ByteBuffer[] dsts, int offset, int length) + { + return 0; + } + + public SocketAddress receive (ByteBuffer dst) + { + return null; + } + + public int send (ByteBuffer src, SocketAddress target) + { + return 0; + } + + public DatagramSocket socket () + { + return null; + } +} diff --git a/libjava/gnu/java/nio/DoubleBufferImpl.java b/libjava/gnu/java/nio/DoubleBufferImpl.java new file mode 100644 index 0000000..40628679 --- /dev/null +++ b/libjava/gnu/java/nio/DoubleBufferImpl.java @@ -0,0 +1,212 @@ +/* DoubleBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +public final class DoubleBufferImpl extends DoubleBuffer +{ + private int array_offset; + private boolean ro; + + public DoubleBufferImpl(int cap, int off, int lim) + { + this.backing_buffer = new double[cap]; + this.cap = cap; + this.position(off); + this.limit(lim); + } + + public DoubleBufferImpl(double[] array, int off, int lim) + { + this.backing_buffer = array; + this.cap = array.length; + this.position(off); + this.limit(lim); + } + + public DoubleBufferImpl(DoubleBufferImpl copy) + { + backing_buffer = copy.backing_buffer; + ro = copy.ro; + position(copy.position()); + limit(copy.limit()); + } + + void inc_pos(int a) + { + position(position() + a); + } + +// private static native double[] nio_cast(byte[]copy); +// private static native double[] nio_cast(char[]copy); +// private static native double[] nio_cast(short[]copy); +// private static native double[] nio_cast(long[]copy); +// private static native double[] nio_cast(int[]copy); +// private static native double[] nio_cast(float[]copy); +// private static native double[] nio_cast(double[]copy); + + private static double[] nio_cast(byte[]copy) { return null; }; + private static double[] nio_cast(char[]copy) { return null; }; + private static double[] nio_cast(short[]copy) { return null; }; + private static double[] nio_cast(long[]copy) { return null; }; + private static double[] nio_cast(int[]copy) { return null; }; + private static double[] nio_cast(float[]copy) { return null; }; + private static double[] nio_cast(double[]copy) { return null; }; + + DoubleBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// 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); + private static byte nio_get_Byte(DoubleBufferImpl b, int index, int limit) { return 0; }; + private static 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; } + + DoubleBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(DoubleBufferImpl b, int index, int limit); +// private static native void nio_put_Char(DoubleBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(DoubleBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(DoubleBufferImpl b, int index, int limit, char value) { }; + public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } + + DoubleBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(DoubleBufferImpl b, int index, int limit); +// private static native void nio_put_Short(DoubleBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(DoubleBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Short(DoubleBufferImpl b, int index, int limit, short value) { }; + public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } + + DoubleBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(DoubleBufferImpl b, int index, int limit); +// private static native void nio_put_Int(DoubleBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(DoubleBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Int(DoubleBufferImpl b, int index, int limit, int value) { }; + public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } + + DoubleBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(DoubleBufferImpl b, int index, int limit); +// private static native void nio_put_Long(DoubleBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(DoubleBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(DoubleBufferImpl b, int index, int limit, long value) { }; + public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } + + DoubleBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(DoubleBufferImpl b, int index, int limit); +// private static native void nio_put_Float(DoubleBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(DoubleBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(DoubleBufferImpl b, int index, int limit, float value) { }; + public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } + + DoubleBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(DoubleBufferImpl b, int index, int limit); +// private static native void nio_put_Double(DoubleBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(DoubleBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(DoubleBufferImpl b, int index, int limit, double value) { }; + public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } + + public boolean isReadOnly() + { + return ro; + } + + public DoubleBuffer slice() + { + DoubleBufferImpl A = new DoubleBufferImpl(this); + A.array_offset = position(); + return A; + } + + public DoubleBuffer duplicate() + { + return new DoubleBufferImpl(this); + } + + public DoubleBuffer asReadOnlyBuffer() + { + DoubleBufferImpl a = new DoubleBufferImpl(this); + a.ro = true; + return a; + } + + public DoubleBuffer compact() + { + return this; + } + + public boolean isDirect() + { + return backing_buffer != null; + } + + final public double get() + { + double e = backing_buffer[position()]; + position(position()+1); + return e; + } + + final public DoubleBuffer put(double b) + { + 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) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public DoubleBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public DoubleBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; + final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public DoubleBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public DoubleBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; + final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public DoubleBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public DoubleBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; + final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public DoubleBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public DoubleBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; + final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public DoubleBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public DoubleBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; + final public double getDouble() { return get(); } final public DoubleBuffer putDouble(double value) { return put(value); } final public double getDouble(int index) { return get(index); } final public DoubleBuffer putDouble(int index, double value) { return put(index, value); }; +} diff --git a/libjava/gnu/java/nio/FileChannelImpl.java b/libjava/gnu/java/nio/FileChannelImpl.java new file mode 100644 index 0000000..26b48e5 --- /dev/null +++ b/libjava/gnu/java/nio/FileChannelImpl.java @@ -0,0 +1,234 @@ +/* FileChannelImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.io.EOFException; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.ByteBuffer; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; + +/** + * This file is not user visible ! + * But alas, Java does not have a concept of friendly packages + * so this class is public. + * Instances of this class are created by invoking getChannel + * Upon a Input/Output/RandomAccessFile object. + */ + +public class FileChannelImpl extends FileChannel +{ + public long address; + public int length; + public int fd; + public MappedByteBuffer buf; + public Object file_obj; // just to keep it live... + + /** + * This method came from java.io.RandomAccessFile + * It is private there so we will repeat it here. + */ +// private native long lengthInternal (int native_fd) throws IOException; + private long lengthInternal (int native_fd) throws IOException + { + return 0; + }; + + public FileChannelImpl (int fd, Object obj) + { + this.fd = fd; + this.file_obj = obj; + } + + public long size () throws IOException + { + return lengthInternal (fd); + } + + protected void implCloseChannel() throws IOException + { + if (address != 0) + { + nio_unmmap_file (fd, address, (int) length); + } + + // FIXME + fd = 0; + + if (file_obj instanceof RandomAccessFile) + { + RandomAccessFile o = (RandomAccessFile) file_obj; + o.close(); + } + else if (file_obj instanceof FileInputStream) + { + FileInputStream o = (FileInputStream) file_obj; + o.close(); + } + else if (file_obj instanceof FileOutputStream) + { + FileOutputStream o = (FileOutputStream) file_obj; + o.close(); + } + } + + public int read (ByteBuffer dst) throws IOException + { + int w = 0; + int s = (int)size(); + + if (buf == null) + { + throw new EOFException("file not mapped"); + } + + for (int i=0; i<s; i++) + { + dst.put( buf.get() ); + } + + return s; + } + + public long read (ByteBuffer[] dsts) throws IOException + { + return read (dsts, 0, dsts.length); + } + + public long read (ByteBuffer[] dsts, int offset, int length) + throws IOException + { + long result = 0; + + for (int i = offset; i < offset + length; i++) + { + result += write (dsts[i]); + } + + return result; + } + + public int write (ByteBuffer src) throws IOException + { + int w = 0; + + if (buf == null) + { + throw new EOFException ("file not mapped"); + } + + while (src.hasRemaining ()) + { + buf.put (src.get ()); + w++; + } + + return w; + } + + public long write(ByteBuffer[] srcs, int offset, int length) + throws IOException + { + long res = 0; + + for (int i = offset;i < offset + length;i++) + { + res += write (srcs[i]); + } + return res; + } + + public MappedByteBuffer map (FileChannel.MapMode mode, long position, + long size) + throws IOException + { +// int cmode = mode.m; +// address = nio_mmap_file (fd, position, size, cmode); +// length = size; +// buf = new MappedByteFileBuffer (this); +// return buf; + return null; + } + + static MappedByteBuffer create_direct_mapped_buffer (long address, + long length) + { +// FileChannelImpl ch = new FileChannelImpl (-1, null); +// ch.address = address; +// ch.length = (int) length; +// ch.buf = new MappedByteFileBuffer (ch); +// return ch.buf; + return null; + } + + public long write (ByteBuffer[] srcs) + throws IOException + { + return write (srcs, 0, srcs.length); + } + + /** + * msync with the disk + */ + public void force (boolean metaData) + { + nio_msync (fd, address, length); + } + +// static native long nio_mmap_file (int fd, long pos, int size, int mode); + +// static native void nio_unmmap_file (int fd, long address, int size); + +// static native void nio_msync (int fd, long address, int length); + + static long nio_mmap_file (int fd, long pos, int size, int mode) + { + return 0; + } + + static void nio_unmmap_file (int fd, long address, int size) + { + }; + + static void nio_msync (int fd, long address, int length) + { + }; +} diff --git a/libjava/gnu/java/nio/FloatBufferImpl.java b/libjava/gnu/java/nio/FloatBufferImpl.java new file mode 100644 index 0000000..0df0f72 --- /dev/null +++ b/libjava/gnu/java/nio/FloatBufferImpl.java @@ -0,0 +1,218 @@ +/* FloatBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +public final class FloatBufferImpl extends FloatBuffer +{ + private int array_offset; + private boolean ro; + + public FloatBufferImpl(int cap, int off, int lim) + { + this.backing_buffer = new float[cap]; + this.cap = cap; + this.position(off); + this.limit(lim); + } + + public FloatBufferImpl(float[] array, int off, int lim) + { + this.backing_buffer = array; + this.cap = array.length; + this.position(off); + this.limit(lim); + } + + public FloatBufferImpl(FloatBufferImpl copy) + { + backing_buffer = copy.backing_buffer; + ro = copy.ro; + position(copy.position()); + limit(copy.limit()); + } + + void inc_pos(int a) + { + position(position() + a); + } + +// private static native float[] nio_cast(byte[]copy); +// private static native float[] nio_cast(char[]copy); +// private static native float[] nio_cast(short[]copy); +// private static native float[] nio_cast(long[]copy); +// private static native float[] nio_cast(int[]copy); +// private static native float[] nio_cast(float[]copy); +// private static native float[] nio_cast(double[]copy); + + private static float[] nio_cast(byte[]copy) { return null; }; + private static float[] nio_cast(char[]copy) { return null; }; + private static float[] nio_cast(short[]copy) { return null; }; + private static float[] nio_cast(long[]copy) { return null; }; + private static float[] nio_cast(int[]copy) { return null; }; + private static float[] nio_cast(float[]copy) { return null; }; + private static float[] nio_cast(double[]copy) { return null; }; + + FloatBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast (copy) : null; } +// private static native byte nio_get_Byte (FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Byte (FloatBufferImpl b, int index, int limit, byte value); + private static byte nio_get_Byte (FloatBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Byte (FloatBufferImpl b, int index, int limit, byte value) { }; + + public ByteBuffer asByteBuffer() + { + ByteBufferImpl res = new ByteBufferImpl (backing_buffer); + res.limit ((limit () * 1) / 4); + return res; + } + + FloatBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Char(FloatBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(FloatBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(FloatBufferImpl b, int index, int limit, char value) { }; + public CharBuffer asCharBuffer() { CharBufferImpl res = new CharBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } + + FloatBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Short(FloatBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(FloatBufferImpl b, int index, int limit) { return 0;}; + private static void nio_put_Short(FloatBufferImpl b, int index, int limit, short value) { }; + public ShortBuffer asShortBuffer() { ShortBufferImpl res = new ShortBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } + + FloatBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Int(FloatBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(FloatBufferImpl b, int index, int limit) { return 0;}; + private static void nio_put_Int(FloatBufferImpl b, int index, int limit, int value) { }; + public IntBuffer asIntBuffer() { IntBufferImpl res = new IntBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } + + FloatBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Long(FloatBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(FloatBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(FloatBufferImpl b, int index, int limit, long value) { }; + public LongBuffer asLongBuffer() { LongBufferImpl res = new LongBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } + + FloatBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Float(FloatBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(FloatBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(FloatBufferImpl b, int index, int limit, float value) { }; + public FloatBuffer asFloatBuffer() { FloatBufferImpl res = new FloatBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } + + FloatBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(FloatBufferImpl b, int index, int limit); +// private static native void nio_put_Double(FloatBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(FloatBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(FloatBufferImpl b, int index, int limit, double value) { }; + public DoubleBuffer asDoubleBuffer() { DoubleBufferImpl res = new DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } + + public boolean isReadOnly() + { + return ro; + } + + public java.nio. FloatBuffer slice() + { + FloatBufferImpl A = new FloatBufferImpl(this); + A.array_offset = position(); + return A; + } + + public java.nio. FloatBuffer duplicate() + { + return new FloatBufferImpl(this); + } + + public java.nio. FloatBuffer asReadOnlyBuffer() + { + FloatBufferImpl a = new FloatBufferImpl(this); + a.ro = true; + return a; + } + + public java.nio. FloatBuffer compact() + { + return this; + } + + public boolean isDirect() + { + return backing_buffer != null; + } + + final public float get() + { + float e = backing_buffer[position()]; + position(position()+1); + return e; + } + + final public java.nio. FloatBuffer put(float b) + { + backing_buffer[position()] = b; + position(position()+1); + return this; + } + + final public float get(int index) + { + return backing_buffer[index]; + } + + final public java.nio. FloatBuffer put(int index, float b) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public java.nio. FloatBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public java.nio. FloatBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; + final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public java.nio. FloatBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public java.nio. FloatBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; + final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public java.nio. FloatBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public java.nio. FloatBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; + final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public java.nio. FloatBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public java.nio. FloatBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; + final public float getFloat() { return get(); } final public java.nio. FloatBuffer putFloat(float value) { return put(value); } final public float getFloat(int index) { return get(index); } final public java.nio. FloatBuffer putFloat(int index, float value) { return put(index, value); }; + final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public java.nio. FloatBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public java.nio. FloatBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; +} diff --git a/libjava/gnu/java/nio/IntBufferImpl.java b/libjava/gnu/java/nio/IntBufferImpl.java new file mode 100644 index 0000000..db1754d --- /dev/null +++ b/libjava/gnu/java/nio/IntBufferImpl.java @@ -0,0 +1,206 @@ +/* IntBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.IntBuffer; + +public final class IntBufferImpl extends IntBuffer +{ + private int array_offset; + private boolean ro; + + public IntBufferImpl(int cap, int off, int lim) + { + this.backing_buffer = new int[cap]; + this.cap = cap; + this.position(off); + this.limit(lim); + } + + public IntBufferImpl(int[] array, int off, int lim) + { + this.backing_buffer = array; + this.cap = array.length; + this.position(off); + this.limit(lim); + } + + public IntBufferImpl(IntBufferImpl copy) + { + backing_buffer = copy.backing_buffer; + ro = copy.ro; + position(copy.position()); + limit(copy.limit()); + } + + void inc_pos(int a) + { + position(position() + a); + } + +// private static native int[] nio_cast(byte[]copy); +// private static native int[] nio_cast(char[]copy); +// private static native int[] nio_cast(short[]copy); +// private static native int[] nio_cast(long[]copy); +// private static native int[] nio_cast(int[]copy); +// private static native int[] nio_cast(float[]copy); +// private static native int[] nio_cast(double[]copy); + + private static int[] nio_cast(byte[]copy) { return null; }; + private static int[] nio_cast(char[]copy) { return null; }; + private static int[] nio_cast(short[]copy) { return null; }; + private static int[] nio_cast(long[]copy) { return null; }; + private static int[] nio_cast(int[]copy) { return null; }; + private static int[] nio_cast(float[]copy) { return null; }; + private static int[] nio_cast(double[]copy) { return null; }; + + IntBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// 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); + private static byte nio_get_Byte(IntBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Byte(IntBufferImpl b, int index, int limit, byte value) { }; + public java.nio. ByteBuffer asByteBuffer() { gnu.java.nio. ByteBufferImpl res = new gnu.java.nio. ByteBufferImpl(backing_buffer); res.limit((limit()*1)/4); return res; } + + IntBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(IntBufferImpl b, int index, int limit); +// private static native void nio_put_Char(IntBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(IntBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(IntBufferImpl b, int index, int limit, char value) { }; + public java.nio. CharBuffer asCharBuffer() { gnu.java.nio. CharBufferImpl res = new gnu.java.nio. CharBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } + + IntBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(IntBufferImpl b, int index, int limit); +// private static native void nio_put_Short(IntBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(IntBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Short(IntBufferImpl b, int index, int limit, short value) { }; + public java.nio. ShortBuffer asShortBuffer() { gnu.java.nio. ShortBufferImpl res = new gnu.java.nio. ShortBufferImpl(backing_buffer); res.limit((limit()*2)/4); return res; } + + IntBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(IntBufferImpl b, int index, int limit); +// private static native void nio_put_Int(IntBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(IntBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Int(IntBufferImpl b, int index, int limit, int value) { }; + public java.nio. IntBuffer asIntBuffer() { gnu.java.nio. IntBufferImpl res = new gnu.java.nio. IntBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } + + IntBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(IntBufferImpl b, int index, int limit); +// private static native void nio_put_Long(IntBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(IntBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(IntBufferImpl b, int index, int limit, long value) { }; + public java.nio. LongBuffer asLongBuffer() { gnu.java.nio. LongBufferImpl res = new gnu.java.nio. LongBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } + + IntBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(IntBufferImpl b, int index, int limit); +// private static native void nio_put_Float(IntBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(IntBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(IntBufferImpl b, int index, int limit, float value) { }; + public java.nio. FloatBuffer asFloatBuffer() { gnu.java.nio. FloatBufferImpl res = new gnu.java.nio. FloatBufferImpl(backing_buffer); res.limit((limit()*4)/4); return res; } + + IntBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(IntBufferImpl b, int index, int limit); +// private static native void nio_put_Double(IntBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(IntBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(IntBufferImpl b, int index, int limit, double value) { }; + public java.nio. DoubleBuffer asDoubleBuffer() { gnu.java.nio. DoubleBufferImpl res = new gnu.java.nio. DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/4); return res; } + + public boolean isReadOnly() + { + return ro; + } + + public java.nio. IntBuffer slice() + { + IntBufferImpl A = new IntBufferImpl(this); + A.array_offset = position(); + return A; + } + + public java.nio. IntBuffer duplicate() + { + return new IntBufferImpl(this); + } + + public java.nio. IntBuffer asReadOnlyBuffer() + { + IntBufferImpl a = new IntBufferImpl(this); + a.ro = true; + return a; + } + + public java.nio. IntBuffer compact() + { + return this; + } + + public boolean isDirect() + { + return backing_buffer != null; + } + + final public int get() + { + int e = backing_buffer[position()]; + position(position()+1); + return e; + } + + final public java.nio. IntBuffer put(int b) + { + backing_buffer[position()] = b; + position(position()+1); + return this; + } + + final public int get(int index) + { + return backing_buffer[index]; + } + + final public java.nio. IntBuffer put(int index, int b) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public java.nio. IntBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public java.nio. IntBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; + final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public java.nio. IntBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public java.nio. IntBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; + final public int getInt() { return get(); } final public java.nio. IntBuffer putInt(int value) { return put(value); } final public int getInt(int index) { return get(index); } final public java.nio. IntBuffer putInt(int index, int value) { return put(index, value); }; + final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public java.nio. IntBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public java.nio. IntBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; + final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public java.nio. IntBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public java.nio. IntBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; + final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public java.nio. IntBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public java.nio. IntBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; +} diff --git a/libjava/gnu/java/nio/LongBufferImpl.java b/libjava/gnu/java/nio/LongBufferImpl.java new file mode 100644 index 0000000..096481f --- /dev/null +++ b/libjava/gnu/java/nio/LongBufferImpl.java @@ -0,0 +1,212 @@ +/* LongBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +public final class LongBufferImpl extends LongBuffer +{ + private int array_offset; + private boolean ro; + + public LongBufferImpl(int cap, int off, int lim) + { + this.backing_buffer = new long[cap]; + this.cap = cap ; + this.position(off); + this.limit(lim); + } + + public LongBufferImpl(long[] array, int off, int lim) + { + this.backing_buffer = array; + this.cap = array.length; + this.position(off); + this.limit(lim); + } + + public LongBufferImpl(LongBufferImpl copy) + { + backing_buffer = copy.backing_buffer; + ro = copy.ro; + position(copy.position()); + limit(copy.limit()); + } + + void inc_pos(int a) + { + position(position() + a); + } + +// private static native long[] nio_cast(byte[]copy); +// private static native long[] nio_cast(char[]copy); +// private static native long[] nio_cast(short[]copy); +// private static native long[] nio_cast(long[]copy); +// private static native long[] nio_cast(int[]copy); +// private static native long[] nio_cast(float[]copy); +// private static native long[] nio_cast(double[]copy); + + private static long[] nio_cast(byte[]copy) { return null; }; + private static long[] nio_cast(char[]copy) { return null; }; + private static long[] nio_cast(short[]copy) { return null; }; + private static long[] nio_cast(long[]copy) { return null; }; + private static long[] nio_cast(int[]copy) { return null; }; + private static long[] nio_cast(float[]copy) { return null; }; + private static long[] nio_cast(double[]copy) { return null; }; + + LongBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// 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); + private static byte nio_get_Byte(LongBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Byte(LongBufferImpl b, int index, int limit, byte value) { }; + public java.nio. ByteBuffer asByteBuffer() { gnu.java.nio. ByteBufferImpl res = new gnu.java.nio. ByteBufferImpl(backing_buffer); res.limit((limit()*1)/8); return res; } + + LongBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(LongBufferImpl b, int index, int limit); +// private static native void nio_put_Char(LongBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(LongBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(LongBufferImpl b, int index, int limit, char value) { }; + public java.nio. CharBuffer asCharBuffer() { gnu.java.nio. CharBufferImpl res = new gnu.java.nio. CharBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } + + LongBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(LongBufferImpl b, int index, int limit); +// private static native void nio_put_Short(LongBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(LongBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Short(LongBufferImpl b, int index, int limit, short value) { }; + public java.nio. ShortBuffer asShortBuffer() { gnu.java.nio. ShortBufferImpl res = new gnu.java.nio. ShortBufferImpl(backing_buffer); res.limit((limit()*2)/8); return res; } + + LongBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(LongBufferImpl b, int index, int limit); +// private static native void nio_put_Int(LongBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(LongBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Int(LongBufferImpl b, int index, int limit, int value) { }; + public java.nio. IntBuffer asIntBuffer() { gnu.java.nio. IntBufferImpl res = new gnu.java.nio. IntBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } + + LongBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(LongBufferImpl b, int index, int limit); +// private static native void nio_put_Long(LongBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(LongBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(LongBufferImpl b, int index, int limit, long value) { }; + public java.nio. LongBuffer asLongBuffer() { gnu.java.nio. LongBufferImpl res = new gnu.java.nio. LongBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } + + LongBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(LongBufferImpl b, int index, int limit); +// private static native void nio_put_Float(LongBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(LongBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(LongBufferImpl b, int index, int limit, float value) { }; + public java.nio. FloatBuffer asFloatBuffer() { gnu.java.nio. FloatBufferImpl res = new gnu.java.nio. FloatBufferImpl(backing_buffer); res.limit((limit()*4)/8); return res; } + + LongBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(LongBufferImpl b, int index, int limit); +// private static native void nio_put_Double(LongBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(LongBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(LongBufferImpl b, int index, int limit, double value) { }; + public java.nio. DoubleBuffer asDoubleBuffer() { gnu.java.nio. DoubleBufferImpl res = new gnu.java.nio. DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/8); return res; } + + public boolean isReadOnly() + { + return ro; + } + + public java.nio. LongBuffer slice() + { + LongBufferImpl A = new LongBufferImpl(this); + A.array_offset = position(); + return A; + } + + public java.nio. LongBuffer duplicate() + { + return new LongBufferImpl(this); + } + + public java.nio. LongBuffer asReadOnlyBuffer() + { + LongBufferImpl a = new LongBufferImpl(this); + a.ro = true; + return a; + } + + public java.nio. LongBuffer compact() + { + return this; + } + + public boolean isDirect() + { + return backing_buffer != null; + } + + final public long get() + { + long e = backing_buffer[position()]; + position(position()+1); + return e; + } + + final public java.nio. LongBuffer put(long b) + { + backing_buffer[position()] = b; + position(position()+1); + return this; + } + + final public long get(int index) + { + return backing_buffer[index]; + } + + final public java.nio. LongBuffer put(int index, long b) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public java.nio. LongBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public java.nio. LongBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; + final public short getShort() { short a = nio_get_Short(this, position(), limit()); inc_pos(2); return a; } final public java.nio. LongBuffer putShort(short value) { nio_put_Short(this, position(), limit(), value); inc_pos(2); return this; } final public short getShort(int index) { short a = nio_get_Short(this, index, limit()); return a; } final public java.nio. LongBuffer putShort(int index, short value) { nio_put_Short(this, index, limit(), value); return this; }; + final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public java.nio. LongBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public java.nio. LongBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; + final public long getLong() { return get(); } final public java.nio. LongBuffer putLong(long value) { return put(value); } final public long getLong(int index) { return get(index); } final public java.nio. LongBuffer putLong(int index, long value) { return put(index, value); }; + final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public java.nio. LongBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public java.nio. LongBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; + final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public java.nio. LongBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public java.nio. LongBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; +} diff --git a/libjava/gnu/java/nio/PipeImpl.java b/libjava/gnu/java/nio/PipeImpl.java new file mode 100644 index 0000000..77341e7 --- /dev/null +++ b/libjava/gnu/java/nio/PipeImpl.java @@ -0,0 +1,57 @@ +/* PipeImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.channels.Pipe; + +class PipeImpl extends Pipe +{ + public PipeImpl() + { + } + + public Pipe.SinkChannel sink() + { + return null; + } + + public Pipe.SourceChannel source() + { + return null; + } +} diff --git a/libjava/gnu/java/nio/SelectionKeyImpl.java b/libjava/gnu/java/nio/SelectionKeyImpl.java new file mode 100644 index 0000000..8ef6f7f --- /dev/null +++ b/libjava/gnu/java/nio/SelectionKeyImpl.java @@ -0,0 +1,83 @@ +/* SelectionKeyImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.channels.SelectableChannel; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.spi.AbstractSelectionKey; + +public class SelectionKeyImpl extends AbstractSelectionKey +{ + int fd, ops; + SelectorImpl impl; + SelectableChannel ch; + + public SelectionKeyImpl(SelectableChannel ch, SelectorImpl impl, int fd) + { + this.ch = ch; + this.impl = impl; + this.fd = fd; + } + + public SelectableChannel channel () + { + return ch; + } + + public int readyOps () + { + return 0; + } + + public int interestOps () + { + return ops; + } + + public SelectionKey interestOps (int ops) + { + this.ops = ops; + return this; + } + + public Selector selector () + { + return impl; + } +} diff --git a/libjava/gnu/java/nio/SelectorImpl.java b/libjava/gnu/java/nio/SelectorImpl.java new file mode 100644 index 0000000..7d3d88c --- /dev/null +++ b/libjava/gnu/java/nio/SelectorImpl.java @@ -0,0 +1,204 @@ +/* SelectorImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.channels.ClosedSelectorException; +import java.nio.channels.SelectableChannel; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.spi.AbstractSelectableChannel; +import java.nio.channels.spi.AbstractSelector; +import java.nio.channels.spi.SelectorProvider; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +public class SelectorImpl extends AbstractSelector +{ + boolean closed = false; + Set keys, selected, canceled; + + public SelectorImpl (SelectorProvider provider) + { + super (provider); + } + + public Set keys () + { + return keys; + } + + public int selectNow () + { + return select (1); + } + + public int select () + { + return select (Long.MAX_VALUE); + } + +// private static native int java_do_select(int[] read, int[] write, +// int[] except, long timeout); + + private static int java_do_select(int[] read, int[] write, + int[] except, long timeout) + { + return 0; + } + + public int select (long timeout) + { + if (closed) + { + throw new ClosedSelectorException (); + } + + if (keys == null) + { + return 0; + } + + int[] read = new int[keys.size ()]; + int[] write = new int[keys.size ()]; + int[] except = new int[keys.size ()]; + int i = 0; + Iterator it = keys.iterator (); + + while (it.hasNext ()) + { + SelectionKeyImpl k = (SelectionKeyImpl) it.next (); + read[i] = k.fd; + write[i] = k.fd; + except[i] = k.fd; + i++; + } + + int ret = java_do_select (read, write, except, timeout); + + i = 0; + it = keys.iterator (); + + while (it.hasNext ()) + { + SelectionKeyImpl k = (SelectionKeyImpl) it.next (); + + if (read[i] != -1 || + write[i] != -1 || + except[i] != -1) + { + add_selected (k); + } + + i++; + } + + return ret; + } + + public Set selectedKeys () + { + return selected; + } + + public Selector wakeup () + { + return null; + } + + public void add (SelectionKeyImpl k) + { + if (keys == null) + keys = new HashSet (); + + keys.add (k); + } + + void add_selected (SelectionKeyImpl k) + { + if (selected == null) + selected = new HashSet (); + + selected.add(k); + } + + protected void implCloseSelector () + { + closed = true; + } + + protected SelectionKey register (SelectableChannel ch, int ops, Object att) + { + return register ((AbstractSelectableChannel) ch, ops, att); + } + + protected SelectionKey register (AbstractSelectableChannel ch, int ops, + Object att) + { +// // filechannel is not selectable ? +// if (ch instanceof FileChannelImpl) +// { +// FileChannelImpl fc = (FileChannelImpl) ch; +// SelectionKeyImpl impl = new SelectionKeyImpl (ch, this, fc.fd); +// keys.add (impl); +// return impl; +// } +// else + + if (ch instanceof SocketChannelImpl) + { + SocketChannelImpl sc = (SocketChannelImpl) ch; + SelectionKeyImpl impl = new SelectionKeyImpl (ch, this, sc.fd); + add (impl); + return impl; + } + else if (ch instanceof ServerSocketChannelImpl) + { + ServerSocketChannelImpl ssc = (ServerSocketChannelImpl) ch; + SelectionKeyImpl impl = new SelectionKeyImpl (ch, this, ssc.fd); + add (impl); + return impl; + } + else + { + System.err.println ("INTERNAL ERROR, no known channel type"); + } + + return null; + } +} diff --git a/libjava/gnu/java/nio/SelectorProviderImpl.java b/libjava/gnu/java/nio/SelectorProviderImpl.java new file mode 100644 index 0000000..3fedfc73 --- /dev/null +++ b/libjava/gnu/java/nio/SelectorProviderImpl.java @@ -0,0 +1,77 @@ +/* SelectorProviderImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.channels.DatagramChannel; +import java.nio.channels.Pipe; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.spi.SelectorProvider; +import java.nio.channels.spi.AbstractSelector; + +public class SelectorProviderImpl extends SelectorProvider +{ + public SelectorProviderImpl () + { + } + + public DatagramChannel openDatagramChannel () + { + return new DatagramChannelImpl (this); + } + + public Pipe openPipe () + { + return new PipeImpl (); + } + + public AbstractSelector openSelector () + { + return new SelectorImpl (this); + } + + public ServerSocketChannel openServerSocketChannel () + { + return new ServerSocketChannelImpl (this); + } + + public SocketChannel openSocketChannel () + { + return new SocketChannelImpl (this); + } +} diff --git a/libjava/gnu/java/nio/ServerSocketChannelImpl.java b/libjava/gnu/java/nio/ServerSocketChannelImpl.java new file mode 100644 index 0000000..e75c68d --- /dev/null +++ b/libjava/gnu/java/nio/ServerSocketChannelImpl.java @@ -0,0 +1,118 @@ +/* ServerSocketChannelImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.ServerSocket; +import java.net.SocketAddress; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.spi.SelectorProvider; + +class ServerSocketChannelImpl extends ServerSocketChannel +{ + ServerSocket sock_object; + int fd; +// int local_port; + boolean blocking = true; + boolean connected = false; +// InetSocketAddress sa; + +// private static native int NioSocketAccept (ServerSocketChannelImpl server, +// SocketChannelImpl s); + + private static int NioSocketAccept (ServerSocketChannelImpl server, + SocketChannelImpl s) + { + return 0; + } + + protected ServerSocketChannelImpl (SelectorProvider provider) + { + super (provider); + fd = SocketChannelImpl.SocketCreate (); + + try + { + sock_object = new ServerSocket (); + } + catch (IOException e) + { + System.err.println ("ServerSocket could not be created."); + } + } + + public void finalizer() + { + if (connected) + { + try + { + close(); + } + catch (Exception e) + { + } + } + } + + protected void implCloseSelectableChannel () + { + connected = false; + SocketChannelImpl.SocketClose (fd); + fd = SocketChannelImpl.SocketCreate (); + } + + protected void implConfigureBlocking (boolean block) + { + } + + public SocketChannel accept () + { + SocketChannelImpl result = new SocketChannelImpl (provider ()); + result.sa = new InetSocketAddress (0); + int res = NioSocketAccept (this, result); + return result; + } + + public ServerSocket socket () + { + return sock_object; + } +} diff --git a/libjava/gnu/java/nio/ShortBufferImpl.java b/libjava/gnu/java/nio/ShortBufferImpl.java new file mode 100644 index 0000000..15a0cd6 --- /dev/null +++ b/libjava/gnu/java/nio/ShortBufferImpl.java @@ -0,0 +1,212 @@ +/* ShortBufferImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +public final class ShortBufferImpl extends ShortBuffer +{ + private int array_offset; + private boolean ro; + + public ShortBufferImpl(int cap, int off, int lim) + { + this.backing_buffer = new short[cap]; + this.cap = cap ; + this.position(off); + this.limit(lim); + } + + public ShortBufferImpl(short[] array, int off, int lim) + { + this.backing_buffer = array; + this.cap = array.length; + this.position(off); + this.limit(lim); + } + + public ShortBufferImpl(ShortBufferImpl copy) + { + backing_buffer = copy.backing_buffer; + ro = copy.ro; + position(copy.position()); + limit(copy.limit()); + } + + void inc_pos(int a) + { + position(position() + a); + } + +// private static native short[] nio_cast(byte[]copy); +// private static native short[] nio_cast(char[]copy); +// private static native short[] nio_cast(short[]copy); +// private static native short[] nio_cast(long[]copy); +// private static native short[] nio_cast(int[]copy); +// private static native short[] nio_cast(float[]copy); +// private static native short[] nio_cast(double[]copy); + + private static short[] nio_cast(byte[]copy) { return null; }; + private static short[] nio_cast(char[]copy) { return null; }; + private static short[] nio_cast(short[]copy) { return null; }; + private static short[] nio_cast(long[]copy) { return null; }; + private static short[] nio_cast(int[]copy) { return null; }; + private static short[] nio_cast(float[]copy) { return null; }; + private static short[] nio_cast(double[]copy) { return null; }; + + ShortBufferImpl(byte[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// 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); + private static byte nio_get_Byte(ShortBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Byte(ShortBufferImpl b, int index, int limit, byte value) { }; + public java.nio. ByteBuffer asByteBuffer() { gnu.java.nio. ByteBufferImpl res = new gnu.java.nio. ByteBufferImpl(backing_buffer); res.limit((limit()*1)/2); return res; } + + ShortBufferImpl(char[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native char nio_get_Char(ShortBufferImpl b, int index, int limit); +// private static native void nio_put_Char(ShortBufferImpl b, int index, int limit, char value); + private static char nio_get_Char(ShortBufferImpl b, int index, int limit) { return ' '; }; + private static void nio_put_Char(ShortBufferImpl b, int index, int limit, char value) { }; + public java.nio. CharBuffer asCharBuffer() { gnu.java.nio. CharBufferImpl res = new gnu.java.nio. CharBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } + + ShortBufferImpl(short[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native short nio_get_Short(ShortBufferImpl b, int index, int limit); +// private static native void nio_put_Short(ShortBufferImpl b, int index, int limit, short value); + private static short nio_get_Short(ShortBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Short(ShortBufferImpl b, int index, int limit, short value) { }; + public java.nio. ShortBuffer asShortBuffer() { gnu.java.nio. ShortBufferImpl res = new gnu.java.nio. ShortBufferImpl(backing_buffer); res.limit((limit()*2)/2); return res; } + + ShortBufferImpl(int[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native int nio_get_Int(ShortBufferImpl b, int index, int limit); +// private static native void nio_put_Int(ShortBufferImpl b, int index, int limit, int value); + private static int nio_get_Int(ShortBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Int(ShortBufferImpl b, int index, int limit, int value) { }; + public java.nio. IntBuffer asIntBuffer() { gnu.java.nio. IntBufferImpl res = new gnu.java.nio. IntBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } + + ShortBufferImpl(long[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native long nio_get_Long(ShortBufferImpl b, int index, int limit); +// private static native void nio_put_Long(ShortBufferImpl b, int index, int limit, long value); + private static long nio_get_Long(ShortBufferImpl b, int index, int limit) { return 0; }; + private static void nio_put_Long(ShortBufferImpl b, int index, int limit, long value) { }; + public java.nio. LongBuffer asLongBuffer() { gnu.java.nio. LongBufferImpl res = new gnu.java.nio. LongBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } + + ShortBufferImpl(float[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native float nio_get_Float(ShortBufferImpl b, int index, int limit); +// private static native void nio_put_Float(ShortBufferImpl b, int index, int limit, float value); + private static float nio_get_Float(ShortBufferImpl b, int index, int limit) { return 0.0f; }; + private static void nio_put_Float(ShortBufferImpl b, int index, int limit, float value) { }; + public java.nio. FloatBuffer asFloatBuffer() { gnu.java.nio. FloatBufferImpl res = new gnu.java.nio. FloatBufferImpl(backing_buffer); res.limit((limit()*4)/2); return res; } + + ShortBufferImpl(double[] copy) { this.backing_buffer = copy != null ? nio_cast(copy) : null; } +// private static native double nio_get_Double(ShortBufferImpl b, int index, int limit); +// private static native void nio_put_Double(ShortBufferImpl b, int index, int limit, double value); + private static double nio_get_Double(ShortBufferImpl b, int index, int limit) { return 0.0d; }; + private static void nio_put_Double(ShortBufferImpl b, int index, int limit, double value) { }; + public java.nio. DoubleBuffer asDoubleBuffer() { gnu.java.nio. DoubleBufferImpl res = new gnu.java.nio. DoubleBufferImpl(backing_buffer); res.limit((limit()*8)/2); return res; } + + public boolean isReadOnly() + { + return ro; + } + + public ShortBuffer slice() + { + ShortBufferImpl a = new ShortBufferImpl(this); + a.array_offset = position(); + return a; + } + + public ShortBuffer duplicate() + { + return new ShortBufferImpl(this); + } + + public ShortBuffer asReadOnlyBuffer() + { + ShortBufferImpl a = new ShortBufferImpl(this); + a.ro = true; + return a; + } + + public ShortBuffer compact() + { + return this; + } + + public boolean isDirect() + { + return backing_buffer != null; + } + + final public short get() + { + short e = backing_buffer[position()]; + position(position()+1); + return e; + } + + final public ShortBuffer put(short b) + { + 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) + { + backing_buffer[index] = b; + return this; + } + + final public char getChar() { char a = nio_get_Char(this, position(), limit()); inc_pos(2); return a; } final public java.nio. ShortBuffer putChar(char value) { nio_put_Char(this, position(), limit(), value); inc_pos(2); return this; } final public char getChar(int index) { char a = nio_get_Char(this, index, limit()); return a; } final public java.nio. ShortBuffer putChar(int index, char value) { nio_put_Char(this, index, limit(), value); return this; }; + final public short getShort() { return get(); } final public java.nio. ShortBuffer putShort(short value) { return put(value); } final public short getShort(int index) { return get(index); } final public java.nio. ShortBuffer putShort(int index, short value) { return put(index, value); }; + final public int getInt() { int a = nio_get_Int(this, position(), limit()); inc_pos(4); return a; } final public java.nio. ShortBuffer putInt(int value) { nio_put_Int(this, position(), limit(), value); inc_pos(4); return this; } final public int getInt(int index) { int a = nio_get_Int(this, index, limit()); return a; } final public java.nio. ShortBuffer putInt(int index, int value) { nio_put_Int(this, index, limit(), value); return this; }; + final public long getLong() { long a = nio_get_Long(this, position(), limit()); inc_pos(8); return a; } final public java.nio. ShortBuffer putLong(long value) { nio_put_Long(this, position(), limit(), value); inc_pos(8); return this; } final public long getLong(int index) { long a = nio_get_Long(this, index, limit()); return a; } final public java.nio. ShortBuffer putLong(int index, long value) { nio_put_Long(this, index, limit(), value); return this; }; + final public float getFloat() { float a = nio_get_Float(this, position(), limit()); inc_pos(4); return a; } final public java.nio. ShortBuffer putFloat(float value) { nio_put_Float(this, position(), limit(), value); inc_pos(4); return this; } final public float getFloat(int index) { float a = nio_get_Float(this, index, limit()); return a; } final public java.nio. ShortBuffer putFloat(int index, float value) { nio_put_Float(this, index, limit(), value); return this; }; + final public double getDouble() { double a = nio_get_Double(this, position(), limit()); inc_pos(8); return a; } final public java.nio. ShortBuffer putDouble(double value) { nio_put_Double(this, position(), limit(), value); inc_pos(8); return this; } final public double getDouble(int index) { double a = nio_get_Double(this, index, limit()); return a; } final public java.nio. ShortBuffer putDouble(int index, double value) { nio_put_Double(this, index, limit(), value); return this; }; +} diff --git a/libjava/gnu/java/nio/SocketChannelImpl.java b/libjava/gnu/java/nio/SocketChannelImpl.java new file mode 100644 index 0000000..b43108b --- /dev/null +++ b/libjava/gnu/java/nio/SocketChannelImpl.java @@ -0,0 +1,234 @@ +/* SocketChannelImpl.java -- + Copyright (C) 2002 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 gnu.java.nio; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AlreadyConnectedException; +import java.nio.channels.SocketChannel; +import java.nio.channels.spi.SelectorProvider; +import gnu.classpath.Configuration; + +public class SocketChannelImpl extends SocketChannel +{ + Socket sock_object; + int fd; + int local_port; + boolean blocking = true; + boolean connected = false; + InetSocketAddress sa; + +/* + static native int SocketCreate(); + static native int SocketConnect(int fd, InetAddress a, int port); + static native int SocketBind(int fd, InetAddress host, int port); + static native int SocketListen(int fd, int backlog); + static native int SocketAvailable(int fd); + static native int SocketClose(int fd); + static native int SocketRead(int fd, byte b[], int off, int len); + static native int SocketWrite(int fd, byte b[], int off, int len); +*/ + + static int SocketCreate() { return 0; }; + static int SocketConnect(int fd, InetAddress a, int port) { return 0; }; + static int SocketBind(int fd, InetAddress host, int port) { return 0; }; + static int SocketListen(int fd, int backlog) { return 0; }; + static int SocketAvailable(int fd) { return 0; }; + static int SocketClose(int fd) { return 0; }; + static int SocketRead(int fd, byte b[], int off, int len) { return 0; }; + static int SocketWrite(int fd, byte b[], int off, int len) { return 0; }; + + public SocketChannelImpl(SelectorProvider provider) + { + super(provider); + fd = SocketCreate(); + + if (fd == -1) + { + System.err.println("failed to create socket:"+fd); + } + } + + public void finalizer() + { + if (connected) + { + try + { + close(); + } + catch (Exception e) + { + } + } + } + + protected void implCloseSelectableChannel() + { + connected = false; + SocketClose(fd); + fd = SocketCreate(); + } + + protected void implConfigureBlocking(boolean block) + { + if (blocking == block) + return; + } + + public boolean connect(SocketAddress remote) + throws IOException + { + if (connected) + { + throw new AlreadyConnectedException(); + } + + // ok, lets connect ! + + sa = (InetSocketAddress) remote; + + InetAddress addr = sa.getAddress(); + int port = sa.getPort(); + int err = SocketConnect(fd, addr, port); + + if (err < 0) + { + throw new IOException("Connection refused:"+err + ", connect="+err); + } + + local_port = err; + connected = true; + return blocking; + } + + public boolean finishConnect() + { + return false; + } + + public boolean isConnected() + { + return connected; + } + + public boolean isConnectionPending() + { + if (blocking) + return true; + + return false; + } + + public Socket socket() + { + if (sock_object != null) + { + //sock_object.ch = this; + } + + return sock_object; + } + + public int read(ByteBuffer dst) + { + int bytes = 0; + int len = 1024; + byte[]b = new byte[len]; + + bytes = SocketRead(fd, b, 0, len); + dst.put(b, 0, bytes); + + if (bytes == 0) + { + // we've hit eof ? + return -1; + } + + return bytes; + } + + public long read(ByteBuffer[] dsts, int offset, int length) + { + long bytes = 0; + + for (int i=offset; i<length; i++) + { + bytes += read(dsts[i]); + } + + return bytes; + } + + public int write(ByteBuffer src) + { + int bytes = 0; + int len = src.position(); + + if (src instanceof ByteBufferImpl) + { + ByteBufferImpl bi = (ByteBufferImpl) src; + byte[]b = bi.array(); + bytes = SocketWrite(fd, b, 0, len); + } + else + { + byte[]b = new byte[len]; + src.get(b, 0, len); + bytes = SocketWrite(fd, b, 0, len); + } + + return bytes; + } + + public long write (ByteBuffer[] srcs, int offset, int length) + { + long bytes = 0; + + for (int i=offset; i<length; i++) + { + bytes += write(srcs[i]); + } + + return bytes; + } +} |