Created
March 15, 2012 08:59
-
-
Save dobesv/2043065 to your computer and use it in GitHub Desktop.
Buf asByteBuffer patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -r cb58d11083c7 src/sys/java/fan/sys/Buf.java | |
--- a/src/sys/java/fan/sys/Buf.java Thu Mar 15 14:50:08 2012 +0800 | |
+++ b/src/sys/java/fan/sys/Buf.java Thu Mar 15 16:59:06 2012 +0800 | |
@@ -11,6 +11,8 @@ | |
import java.math.*; | |
import java.nio.*; | |
+import fanx.interop.Interop; | |
+ | |
/** | |
* Buf | |
*/ | |
@@ -233,6 +235,12 @@ | |
for (int i=0; i<t; ++i) out.write(b); | |
return this; | |
} | |
+ | |
+ /** | |
+ * Implements {@link Interop#toJava(Buf)} | |
+ */ | |
+ public abstract ByteBuffer asByteBuffer(); | |
+ | |
////////////////////////////////////////////////////////////////////////// | |
// OutStream | |
diff -r cb58d11083c7 src/sys/java/fan/sys/FileBuf.java | |
--- a/src/sys/java/fan/sys/FileBuf.java Thu Mar 15 14:50:08 2012 +0800 | |
+++ b/src/sys/java/fan/sys/FileBuf.java Thu Mar 15 16:59:06 2012 +0800 | |
@@ -251,6 +251,12 @@ | |
throw IOErr.make(e); | |
} | |
} | |
+ | |
+ @Override | |
+ public ByteBuffer asByteBuffer() | |
+ { | |
+ throw new UnsupportedOperationException(); | |
+ } | |
////////////////////////////////////////////////////////////////////////// | |
// Buf API | |
diff -r cb58d11083c7 src/sys/java/fan/sys/MemBuf.java | |
--- a/src/sys/java/fan/sys/MemBuf.java Thu Mar 15 14:50:08 2012 +0800 | |
+++ b/src/sys/java/fan/sys/MemBuf.java Thu Mar 15 16:59:06 2012 +0800 | |
@@ -166,6 +166,12 @@ | |
return len; | |
} | |
+ @Override | |
+ public ByteBuffer asByteBuffer() | |
+ { | |
+ return ByteBuffer.wrap(buf, pos, size-pos); | |
+ } | |
+ | |
////////////////////////////////////////////////////////////////////////// | |
// Buf API | |
////////////////////////////////////////////////////////////////////////// | |
diff -r cb58d11083c7 src/sys/java/fan/sys/NioBuf.java | |
--- a/src/sys/java/fan/sys/NioBuf.java Thu Mar 15 14:50:08 2012 +0800 | |
+++ b/src/sys/java/fan/sys/NioBuf.java Thu Mar 15 16:59:06 2012 +0800 | |
@@ -175,6 +175,12 @@ | |
pipe(src, buf, len); | |
return len; | |
} | |
+ | |
+ @Override | |
+ public ByteBuffer asByteBuffer() | |
+ { | |
+ return buf.duplicate(); | |
+ } | |
////////////////////////////////////////////////////////////////////////// | |
// Buf API | |
@@ -301,7 +307,7 @@ | |
// Fields | |
////////////////////////////////////////////////////////////////////////// | |
- private ByteBuffer buf; | |
+ public ByteBuffer buf; | |
private byte[] temp; | |
} | |
\ No newline at end of file | |
diff -r cb58d11083c7 src/sys/java/fanx/interop/Interop.java | |
--- a/src/sys/java/fanx/interop/Interop.java Thu Mar 15 14:50:08 2012 +0800 | |
+++ b/src/sys/java/fanx/interop/Interop.java Thu Mar 15 16:59:06 2012 +0800 | |
@@ -132,6 +132,30 @@ | |
} | |
/** | |
+ * Convert from sys::Buf to to java.nio.ByteBuffer | |
+ * | |
+ * Return a bytebuffer that shares the same storage | |
+ * as this byte buffer, but independent pos and size. | |
+ * | |
+ * Changes made to the resulting ByteBuffer will affect | |
+ * this ByteBuffer's content but not its pos or size. | |
+ * | |
+ * The ByteBuffer will be created with position equal | |
+ * to this buf's pos and limit equal to this buf's limit, | |
+ * and no mark set. | |
+ * | |
+ * Throws {@link java.lang.UnsupportedOperationException} if this Buf | |
+ * doesn't use an underlying storage system supported by ByteBuffer. | |
+ * | |
+ * @see java.nio.ByteBuffer#duplicate | |
+ * @see java.nio.ByteBuffer#wrap(byte[], int, int) | |
+ */ | |
+ public static java.nio.ByteBuffer toJava(Buf buf) | |
+ { | |
+ return buf.asByteBuffer(); | |
+ } | |
+ | |
+ /** | |
* Convert from sys::InStream to java.io.InputStream. | |
*/ | |
public static InputStream toJava(InStream in) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment