import java.nio.channels.NonWritableChannelException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
+import gnu.gcj.RawData;
/**
* This file is not user visible !
public class FileChannelImpl extends FileChannel
{
- public long address;
- public int length;
- public FileDescriptor fd;
- public MappedByteBuffer buf;
- public Object file_obj; // just to keep it live...
+ // GCJ LOCAL: This variable stores a pointer to the memory
+ // where the file is mapped.
+ RawData map_address;
+
+ int length;
+ FileDescriptor fd;
+ MappedByteBuffer buf;
+ Object file_obj; // just to keep it live...
public FileChannelImpl (FileDescriptor fd, boolean write, Object obj)
{
this.file_obj = obj;
}
+ public FileChannelImpl ()
+ {
+ this (new FileDescriptor (-1), true, null);
+ }
+
private native long implPosition ();
private native FileChannel implPosition (long newPosition);
private native FileChannel implTruncate (long size);
- private native long nio_mmap_file (long pos, long size, int mode);
- private native void nio_unmmap_file (long address, int size);
- private native void nio_msync (long address, int length);
+ private native RawData nio_mmap_file (long pos, long size, int mode);
+ private native void nio_unmmap_file (RawData map_address, int size);
+ private native void nio_msync (RawData map_address, int length);
public native long size () throws IOException;
protected void implCloseChannel() throws IOException
{
- // FIXME
-
- if (address != 0)
+ if (map_address != null)
{
- //nio_unmmap_file (fd, address, (int) length);
- address = 0;
+ nio_unmmap_file (map_address, (int) length);
+ map_address = null;
}
if (file_obj instanceof RandomAccessFile)
throw new EOFException("file not mapped");
}
- for (int i=0; i<s; i++)
+ for (int i = 0; i < s; i++)
{
- dst.put( buf.get() );
+ dst.put (buf.get());
}
return s;
long result = 0;
for (int i = offset; i < offset + length; i++)
- {
- result += write (dsts[i]);
- }
+ {
+ result += write (dsts [i]);
+ }
return result;
}
|| size > Integer.MAX_VALUE)
throw new IllegalArgumentException ();
-// int cmode = mode.m;
-// address = nio_mmap_file (fd, position, size, cmode);
-// length = size;
-// buf = new MappedByteFileBuffer (this);
-// return buf;
- return null;
+ int cmode = mode.m;
+ map_address = nio_mmap_file (position, size, cmode);
+ length = (int) size;
+ buf = new MappedByteFileBuffer (this);
+ return buf;
}
- static MappedByteBuffer create_direct_mapped_buffer (long address,
+ static MappedByteBuffer create_direct_mapped_buffer (RawData map_address,
long length)
+ throws IOException
{
-// FileChannelImpl ch = new FileChannelImpl (-1, null);
-// ch.address = address;
-// ch.length = (int) length;
-// ch.buf = new MappedByteFileBuffer (ch);
-// return ch.buf;
- return null;
+ FileChannelImpl ch = new FileChannelImpl ();
+ ch.map_address = map_address;
+ ch.length = (int) length;
+ ch.buf = new MappedByteFileBuffer (ch);
+ return ch.buf;
}
public long write (ByteBuffer[] srcs)
// FIXME: What to do with metaData ?
- nio_msync (address, length);
+ nio_msync (map_address, length);
}
public long transferTo (long position, long count, WritableByteChannel target)
import java.nio.ShortBuffer;
import java.nio.MappedByteBuffer;
import java.io.IOException;
+import gnu.gcj.RawData;
final public class MappedByteFileBuffer
extends MappedByteBuffer
{
- public long address;
+ RawData map_address;
boolean readOnly;
boolean direct;
public FileChannelImpl ch;
super ((int) ch.size (), (int) ch.size (), 0, -1);
this.ch = ch;
- address = ch.address;
- try {
- long si = ch.size() / 1;
- limit((int)si);
- } catch (IOException e) {
- System.err.println("failed to get size of file-channel's file");
- }
+ map_address = ch.map_address;
+
+ try
+ {
+ long si = ch.size () / 1;
+ limit ((int) si);
+ }
+ catch (IOException e)
+ {
+ System.err.println ("failed to get size of file-channel's file");
+ }
}
public MappedByteFileBuffer (MappedByteFileBuffer b)
this.readOnly = b.isReadOnly ();
this.ch = b.ch;
- address = b.address;
+ map_address = b.map_address;
limit (b.limit ());
}
public static native byte nio_read_Byte_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Byte_file_channel (FileChannelImpl ch,
int index, int limit,
byte value,
- long address);
+ RawData map_address);
public static native short nio_read_Short_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Short_file_channel (FileChannelImpl ch,
int index, int limit,
short value,
- long address);
+ RawData map_address);
public static native char nio_read_Char_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Char_file_channel (FileChannelImpl ch,
int index, int limit,
char value,
- long address);
+ RawData map_address);
public static native int nio_read_Int_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Int_file_channel (FileChannelImpl ch,
int index, int limit,
- int value, long address);
+ int value,
+ RawData map_address);
public static native long nio_read_Long_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Long_file_channel (FileChannelImpl ch,
int index, int limit,
long value,
- long address);
+ RawData map_address);
public static native float nio_read_Float_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Float_file_channel (FileChannelImpl ch,
int index, int limit,
float value,
- long address);
- public static native double nio_read_Double_file_channel (FileChannelImpl ch,
- int index, int limit,
- long address);
+ RawData map_address);
+ public static native double
+ nio_read_Double_file_channel (FileChannelImpl ch, int index, int limit,
+ RawData map_address);
public static native void nio_write_Double_file_channel (FileChannelImpl ch,
int index, int limit,
double value,
- long address);
+ RawData map_address);
final public byte get ()
{
byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, position (),
- limit (), address);
+ limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer put (byte b)
{
MappedByteFileBuffer.nio_write_Byte_file_channel (ch, position (), limit (),
- b, address);
+ b, map_address);
position (position () + 1);
return this;
}
{
byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, index,
limit (),
- address);
+ map_address);
return a;
}
final public ByteBuffer put (int index, byte b)
{
MappedByteFileBuffer.nio_write_Byte_file_channel (ch, index, limit (), b,
- address);
+ map_address);
return this;
}
final public byte getByte ()
{
- byte a = nio_read_Byte_file_channel (ch, position (), limit (), address);
+ byte a = nio_read_Byte_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putByte (byte value)
{
- nio_write_Byte_file_channel (ch, position (), limit (), value, address);
+ nio_write_Byte_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public byte getByte (int index)
{
- byte a = nio_read_Byte_file_channel (ch, index, limit(), address);
+ byte a = nio_read_Byte_file_channel (ch, index, limit(), map_address);
return a;
}
final public ByteBuffer putByte (int index, byte value)
{
- nio_write_Byte_file_channel (ch, index, limit (), value, address);
+ nio_write_Byte_file_channel (ch, index, limit (), value, map_address);
return this;
};
final public char getChar ()
{
- char a = nio_read_Char_file_channel (ch, position (), limit (), address);
+ char a = nio_read_Char_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putChar (char value)
{
- nio_write_Char_file_channel (ch, position (), limit (), value, address);
+ nio_write_Char_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public char getChar (int index)
{
- char a = nio_read_Char_file_channel (ch, index, limit (), address);
+ char a = nio_read_Char_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putChar (int index, char value)
{
- nio_write_Char_file_channel (ch, index, limit (), value, address);
+ nio_write_Char_file_channel (ch, index, limit (), value, map_address);
return this;
};
final public short getShort ()
{
- short a = nio_read_Short_file_channel (ch, position (), limit (), address);
+ short a = nio_read_Short_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putShort (short value)
{
- nio_write_Short_file_channel (ch, position (), limit (), value, address);
+ nio_write_Short_file_channel (ch, position (), limit (), value,
+ map_address);
position (position () + 1);
return this;
}
final public short getShort (int index)
{
- short a = nio_read_Short_file_channel (ch, index, limit (), address);
+ short a = nio_read_Short_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putShort (int index, short value)
{
- nio_write_Short_file_channel (ch, index, limit (), value, address);
+ nio_write_Short_file_channel (ch, index, limit (), value, map_address);
return this;
}
final public int getInt ()
{
- int a = nio_read_Int_file_channel (ch, position (), limit (), address);
+ int a = nio_read_Int_file_channel (ch, position (), limit (), map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putInt (int value)
{
- nio_write_Int_file_channel (ch, position (), limit (), value, address);
+ nio_write_Int_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public int getInt (int index)
{
- int a = nio_read_Int_file_channel (ch, index, limit (),
- address);
+ int a = nio_read_Int_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putInt (int index, int value)
{
- nio_write_Int_file_channel (ch, index, limit (), value, address);
+ nio_write_Int_file_channel (ch, index, limit (), value, map_address);
return this;
}
final public long getLong ()
{
- long a = nio_read_Long_file_channel (ch, position (), limit (), address);
+ long a = nio_read_Long_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putLong (long value)
{
- nio_write_Long_file_channel (ch, position (), limit (), value, address);
+ nio_write_Long_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public long getLong (int index)
{
- long a = nio_read_Long_file_channel (ch, index, limit (), address);
+ long a = nio_read_Long_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putLong (int index, long value)
{
- nio_write_Long_file_channel (ch, index, limit (), value, address);
+ nio_write_Long_file_channel (ch, index, limit (), value, map_address);
return this;
}
final public float getFloat ()
{
- float a = nio_read_Float_file_channel (ch, position (), limit (), address);
+ float a = nio_read_Float_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putFloat (float value)
{
- nio_write_Float_file_channel (ch, position (), limit (), value, address);
+ nio_write_Float_file_channel (ch, position (), limit (), value,
+ map_address);
position (position () + 1);
return this;
}
final public float getFloat (int index)
{
- float a = nio_read_Float_file_channel (ch, index, limit (), address);
+ float a = nio_read_Float_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putFloat (int index, float value)
{
- nio_write_Float_file_channel (ch, index, limit (), value, address);
+ nio_write_Float_file_channel (ch, index, limit (), value, map_address);
return this;
}
final public double getDouble ()
{
- double a = nio_read_Double_file_channel (ch, position (), limit (), address);
+ double a = nio_read_Double_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putDouble (double value)
{
- nio_write_Double_file_channel (ch, position (), limit (), value, address);
+ nio_write_Double_file_channel (ch, position (), limit (), value,
+ map_address);
position (position () + 1);
return this;
}
final public double getDouble (int index)
{
- double a = nio_read_Double_file_channel (ch, index, limit (), address);
+ double a = nio_read_Double_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putDouble (int index, double value)
{
- nio_write_Double_file_channel (ch, index, limit (), value, address);
+ nio_write_Double_file_channel (ch, index, limit (), value, map_address);
return this;
}
}
#include <fcntl.h>
#endif
+#include <gnu/gcj/RawData.h>
#include <gnu/java/nio/MappedByteFileBuffer.h>
#include <java/lang/Error.h>
jbyte
gnu::java::nio::MappedByteFileBuffer::nio_read_Byte_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
jchar
gnu::java::nio::MappedByteFileBuffer::nio_read_Char_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
jdouble
gnu::java::nio::MappedByteFileBuffer::nio_read_Double_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
jfloat
gnu::java::nio::MappedByteFileBuffer::nio_read_Float_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
jint
gnu::java::nio::MappedByteFileBuffer::nio_read_Int_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
jlong
gnu::java::nio::MappedByteFileBuffer::nio_read_Long_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
jshort
gnu::java::nio::MappedByteFileBuffer::nio_read_Short_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Byte_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jbyte, jlong)
+ jint, jint, jbyte,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Char_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jchar, jlong)
+ jint, jint, jchar,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Double_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jdouble, jlong)
+ jint, jint, jdouble,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Float_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jfloat, jlong)
+ jint, jint, jfloat,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Int_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jint, jlong)
+ jint, jint, jint,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Long_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong, jlong)
+ jint, jint, jlong,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Short_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jshort, jlong)
+ jint, jint, jshort,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}