Skip to content

Instantly share code, notes, and snippets.

@dobesv
Created March 15, 2012 08:59
Show Gist options
  • Save dobesv/2043065 to your computer and use it in GitHub Desktop.
Save dobesv/2043065 to your computer and use it in GitHub Desktop.
Buf asByteBuffer patch
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