2003-05-02 Michael Koch <konqueror@gmx.de>
* gnu/java/nio/FileChannelImpl.java (read): New implementation. (implRead): New methods. (write): New implementation, call other write insteal of read method. (implWrite): New methods. (map): Added comment. (transferFrom): Implemented. (transferTo): Implemented. (lock): Added checks to throw exceptions. (truncate): Added check to throw exception. * gnu/java/nio/natFileChannelImpl.cc (implRead): New method. (implWrite): New method. * java/nio/ByteBuffer.java (hashCode): Fixed comment. (get): Fixed exception documentation. (put): Fixed exception documentation. * java/nio/CharBuffer.java: Added comment for later optimizations. From-SVN: r66373
This commit is contained in:
parent
c67528fe19
commit
4b6eac52d5
@ -1,3 +1,25 @@
|
||||
2003-05-02 Michael Koch <konqueror@gmx.de>
|
||||
|
||||
* gnu/java/nio/FileChannelImpl.java
|
||||
(read): New implementation.
|
||||
(implRead): New methods.
|
||||
(write): New implementation, call other write insteal of read method.
|
||||
(implWrite): New methods.
|
||||
(map): Added comment.
|
||||
(transferFrom): Implemented.
|
||||
(transferTo): Implemented.
|
||||
(lock): Added checks to throw exceptions.
|
||||
(truncate): Added check to throw exception.
|
||||
* gnu/java/nio/natFileChannelImpl.cc
|
||||
(implRead): New method.
|
||||
(implWrite): New method.
|
||||
* java/nio/ByteBuffer.java
|
||||
(hashCode): Fixed comment.
|
||||
(get): Fixed exception documentation.
|
||||
(put): Fixed exception documentation.
|
||||
* java/nio/CharBuffer.java:
|
||||
Added comment for later optimizations.
|
||||
|
||||
2003-04-30 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR libgcj/10582:
|
||||
|
@ -126,19 +126,15 @@ public class FileChannelImpl extends FileChannel
|
||||
|
||||
public int read (ByteBuffer dst) throws IOException
|
||||
{
|
||||
int s = (int)size();
|
||||
|
||||
if (buf == null)
|
||||
// Check if file is mapped into memory.
|
||||
if (buf != null)
|
||||
{
|
||||
throw new EOFException("file not mapped");
|
||||
// FIXME: implement this
|
||||
throw new Error ("Accessing mapped buffers not implemented.");
|
||||
}
|
||||
|
||||
for (int i = 0; i < s; i++)
|
||||
{
|
||||
dst.put (buf.get());
|
||||
}
|
||||
|
||||
return s;
|
||||
// File not mapped, access it directly.
|
||||
return implRead (dst);
|
||||
}
|
||||
|
||||
public int read (ByteBuffer dst, long position)
|
||||
@ -149,12 +145,34 @@ public class FileChannelImpl extends FileChannel
|
||||
|
||||
if (!isOpen ())
|
||||
throw new ClosedChannelException ();
|
||||
|
||||
// FIXME: check for NonReadableChannelException
|
||||
|
||||
if (file_obj instanceof FileOutputStream)
|
||||
throw new NonReadableChannelException ();
|
||||
|
||||
throw new Error ("Not implemented");
|
||||
int result;
|
||||
long oldPosition;
|
||||
|
||||
oldPosition = implPosition ();
|
||||
result = implRead (dst);
|
||||
implPosition (oldPosition);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private int implRead (ByteBuffer dst) throws IOException
|
||||
{
|
||||
int result;
|
||||
byte[] buffer = new byte [dst.remaining ()];
|
||||
|
||||
result = implRead (buffer, 0, buffer.length);
|
||||
dst.put (buffer, 0, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private native int implRead (byte[] buffer, int offset, int length)
|
||||
throws IOException;
|
||||
|
||||
public long read (ByteBuffer[] dsts, int offset, int length)
|
||||
throws IOException
|
||||
{
|
||||
@ -162,7 +180,7 @@ public class FileChannelImpl extends FileChannel
|
||||
|
||||
for (int i = offset; i < offset + length; i++)
|
||||
{
|
||||
result += write (dsts [i]);
|
||||
result += read (dsts [i]);
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -170,20 +188,15 @@ public class FileChannelImpl extends FileChannel
|
||||
|
||||
public int write (ByteBuffer src) throws IOException
|
||||
{
|
||||
int w = 0;
|
||||
|
||||
if (buf == null)
|
||||
// Check if file is mapped into memory.
|
||||
if (buf != null)
|
||||
{
|
||||
throw new EOFException ("file not mapped");
|
||||
// FIXME: implement this
|
||||
throw new Error ("Accessing mapped buffers not implemented.");
|
||||
}
|
||||
|
||||
while (src.hasRemaining ())
|
||||
{
|
||||
buf.put (src.get ());
|
||||
w++;
|
||||
}
|
||||
|
||||
return w;
|
||||
|
||||
// File not mapped, access it directly.
|
||||
return implWrite (src);
|
||||
}
|
||||
|
||||
public int write (ByteBuffer src, long position)
|
||||
@ -195,10 +208,29 @@ public class FileChannelImpl extends FileChannel
|
||||
if (!isOpen ())
|
||||
throw new ClosedChannelException ();
|
||||
|
||||
// FIXME: check for NonWritableChannelException
|
||||
if (file_obj instanceof FileInputStream)
|
||||
throw new NonWritableChannelException ();
|
||||
|
||||
throw new Error ("Not implemented");
|
||||
int result;
|
||||
long oldPosition;
|
||||
|
||||
oldPosition = implPosition ();
|
||||
result = implWrite (src);
|
||||
implPosition (oldPosition);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private int implWrite (ByteBuffer src) throws IOException
|
||||
{
|
||||
byte[] buffer = new byte [src.remaining ()];
|
||||
|
||||
src.get (buffer, 0, buffer.length);
|
||||
return implWrite (buffer, 0, buffer.length);
|
||||
}
|
||||
|
||||
private native int implWrite (byte[] buffer, int offset, int length)
|
||||
throws IOException;
|
||||
|
||||
public long write(ByteBuffer[] srcs, int offset, int length)
|
||||
throws IOException
|
||||
@ -225,6 +257,7 @@ public class FileChannelImpl extends FileChannel
|
||||
|| size > Integer.MAX_VALUE)
|
||||
throw new IllegalArgumentException ();
|
||||
|
||||
// FIXME: Make this working.
|
||||
int cmode = mode.m;
|
||||
map_address = nio_mmap_file (position, size, cmode);
|
||||
length = (int) size;
|
||||
@ -272,10 +305,13 @@ public class FileChannelImpl extends FileChannel
|
||||
if (!isOpen ())
|
||||
throw new ClosedChannelException ();
|
||||
|
||||
// FIXME: check for NonReadableChannelException
|
||||
// FIXME: check for NonWritableChannelException
|
||||
|
||||
throw new Error ("Not implemented");
|
||||
if (file_obj instanceof FileOutputStream)
|
||||
throw new NonReadableChannelException ();
|
||||
|
||||
// XXX: count needs to be casted from long to int. Dataloss ?
|
||||
ByteBuffer buffer = ByteBuffer.allocate ((int) count);
|
||||
read (buffer, position);
|
||||
return target.write (buffer);
|
||||
}
|
||||
|
||||
public long transferFrom (ReadableByteChannel src, long position, long count)
|
||||
@ -288,10 +324,13 @@ public class FileChannelImpl extends FileChannel
|
||||
if (!isOpen ())
|
||||
throw new ClosedChannelException ();
|
||||
|
||||
// FIXME: check for NonReadableChannelException
|
||||
// FIXME: check for NonWritableChannelException
|
||||
|
||||
throw new Error ("Not implemented");
|
||||
if (file_obj instanceof FileInputStream)
|
||||
throw new NonWritableChannelException ();
|
||||
|
||||
// XXX: count needs to be casted from long to int. Dataloss ?
|
||||
ByteBuffer buffer = ByteBuffer.allocate ((int) count);
|
||||
src.read (buffer);
|
||||
return write (buffer, position);
|
||||
}
|
||||
|
||||
public FileLock lock (long position, long size, boolean shared)
|
||||
@ -304,9 +343,14 @@ public class FileChannelImpl extends FileChannel
|
||||
if (!isOpen ())
|
||||
throw new ClosedChannelException ();
|
||||
|
||||
// FIXME: check for NonReadableChannelException
|
||||
// FIXME: check for NonWritableChannelException
|
||||
|
||||
if (shared &&
|
||||
file_obj instanceof FileOutputStream)
|
||||
throw new NonReadableChannelException ();
|
||||
|
||||
if (!shared &&
|
||||
file_obj instanceof FileInputStream)
|
||||
throw new NonWritableChannelException ();
|
||||
|
||||
throw new Error ("Not implemented");
|
||||
}
|
||||
|
||||
@ -353,7 +397,8 @@ public class FileChannelImpl extends FileChannel
|
||||
if (!isOpen ())
|
||||
throw new ClosedChannelException ();
|
||||
|
||||
// FIXME: check for NonWritableChannelException
|
||||
if (file_obj instanceof FileInputStream)
|
||||
throw new NonWritableChannelException ();
|
||||
|
||||
return implTruncate (size);
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ details. */
|
||||
#include <gnu/java/nio/FileChannelImpl.h>
|
||||
#include <java/io/FileDescriptor.h>
|
||||
#include <java/io/IOException.h>
|
||||
#include <java/nio/ByteBuffer.h>
|
||||
#include <java/nio/channels/FileChannel.h>
|
||||
|
||||
jlong
|
||||
@ -49,6 +50,21 @@ gnu::java::nio::FileChannelImpl::implPosition (jlong newPosition)
|
||||
return this;
|
||||
}
|
||||
|
||||
jint
|
||||
gnu::java::nio::FileChannelImpl::implRead (JArray<jbyte>* buffer,
|
||||
jint offset, jint len)
|
||||
{
|
||||
return fd->read (buffer, offset, len);
|
||||
}
|
||||
|
||||
jint
|
||||
gnu::java::nio::FileChannelImpl::implWrite (JArray<jbyte>* buffer,
|
||||
jint offset, jint len)
|
||||
{
|
||||
fd->write (buffer, offset, len);
|
||||
return len;
|
||||
}
|
||||
|
||||
java::nio::channels::FileChannel*
|
||||
gnu::java::nio::FileChannelImpl::implTruncate (jlong size)
|
||||
{
|
||||
|
@ -251,7 +251,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
|
||||
*/
|
||||
public int hashCode()
|
||||
{
|
||||
// FIXME: Check what SUN calcs here
|
||||
// FIXME: Check what SUN calculates here
|
||||
return super.hashCode();
|
||||
}
|
||||
|
||||
@ -344,7 +344,8 @@ public abstract class ByteBuffer extends Buffer implements Comparable
|
||||
/**
|
||||
* Absolute get method.
|
||||
*
|
||||
* @exception IndexOutOfBoundsException FIXME
|
||||
* @exception IndexOutOfBoundsException If index < 0 or index >= this
|
||||
* buffers limit.
|
||||
*/
|
||||
public abstract byte get (int index);
|
||||
|
||||
@ -352,7 +353,8 @@ public abstract class ByteBuffer extends Buffer implements Comparable
|
||||
* Absolute put method.
|
||||
*
|
||||
* @exception ReadOnlyBufferException If this buffer is read-only
|
||||
* @exception IndexOutOfBoundsException FIXME
|
||||
* @exception IndexOutOfBoundsException If index < 0 or index >= this
|
||||
* buffers limit.
|
||||
*/
|
||||
public abstract ByteBuffer put (int index, byte b);
|
||||
|
||||
|
@ -83,6 +83,9 @@ public abstract class CharBuffer extends Buffer
|
||||
*/
|
||||
final public static CharBuffer wrap (CharSequence a, int offset, int length)
|
||||
{
|
||||
// FIXME: implement better handling of java.lang.String.
|
||||
// Probably share data with String via reflection.
|
||||
|
||||
if ((offset < 0)
|
||||
|| (offset > a.length ())
|
||||
|| (length < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user