From e9614ab0949a8dc1daca469a231637becfe6c176 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Fri, 26 Sep 2014 14:10:14 -0400 Subject: [PATCH] write the rest of PackedOutputStream.write() --- .../java/org/capnproto/PackedOutputStream.java | 16 ++++++++++++++++ .../org/capnproto/SerializePackedTest.scala | 13 ++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/PackedOutputStream.java b/runtime/src/main/java/org/capnproto/PackedOutputStream.java index f0bfbc8..d8c8247 100644 --- a/runtime/src/main/java/org/capnproto/PackedOutputStream.java +++ b/runtime/src/main/java/org/capnproto/PackedOutputStream.java @@ -158,6 +158,22 @@ public final class PackedOutputStream implements WritableByteChannel { //# to the output stream in one chunk and let it //# decide what to do. + if (out == slowBuffer) { + int oldLimit = out.limit(); + out.limit(out.position()); + out.rewind(); + this.inner.write(out); + out.limit(oldLimit); + } + + inBuf.position(runStart); + ByteBuffer slice = inBuf.slice(); + slice.limit(count); + while(slice.hasRemaining()) { + this.inner.write(slice); + } + + out = this.inner.getWriteBuffer(); } } } diff --git a/runtime/src/test/scala/org/capnproto/SerializePackedTest.scala b/runtime/src/test/scala/org/capnproto/SerializePackedTest.scala index c164a34..483dd53 100644 --- a/runtime/src/test/scala/org/capnproto/SerializePackedTest.scala +++ b/runtime/src/test/scala/org/capnproto/SerializePackedTest.scala @@ -30,8 +30,15 @@ class SerializePackedSuite extends FunSuite { expectPacksTo(Array(1,3,2,4,5,7,6,8, 8,6,7,4,5,2,3,1), Array(0xff.toByte,1,3,2,4,5,7,6,8,1,8,6,7,4,5,2,3,1)); - //expectPacksTo(Array(1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 0,2,4,0,9,0,5,1), - // Array(0xff.toByte,1,2,3,4,5,6,7,8, 3, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, - // 0xd6.toByte,2,4,9,5,1)); + expectPacksTo(Array(1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 0,2,4,0,9,0,5,1), + Array(0xff.toByte,1,2,3,4,5,6,7,8, 3, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, + 0xd6.toByte,2,4,9,5,1)); + + expectPacksTo(Array(1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8, 6,2,4,3,9,0,5,1, 1,2,3,4,5,6,7,8, 0,2,4,0,9,0,5,1), + Array(0xff.toByte,1,2,3,4,5,6,7,8, 3, 1,2,3,4,5,6,7,8, 6,2,4,3,9,0,5,1, 1,2,3,4,5,6,7,8, + 0xd6.toByte,2,4,9,5,1)); + + expectPacksTo(Array(8,0,100,6,0,1,1,2, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,0,2,0,3,1), + Array(0xed.toByte,8,100,6,1,1,2, 0,2, 0xd4.toByte,1,2,3,1)); } }