Fix bug in to_bytes_packed when packed size > unpacked size.

This commit is contained in:
Jason Paryani
2014-02-24 14:06:28 -08:00
parent 6e3f609626
commit 9f06f0f3e8
4 changed files with 55 additions and 17 deletions

View File

@@ -33,7 +33,7 @@ cdef extern from "../helpers/rpcHelper.h":
PyPromise connectServer(TaskSet &, PyRestorer &, AsyncIoContext *, StringPtr)
cdef extern from "../helpers/serialize.h":
ByteArray messageToPackedBytes(MessageBuilder &)
ByteArray messageToPackedBytes(MessageBuilder &, size_t wordCount)
cdef extern from "../helpers/asyncHelper.h":
void waitNeverDone(WaitScope&)

View File

@@ -4,16 +4,10 @@
#include "capnp/dynamic.h"
#include "capnp/serialize-packed.h"
kj::Array< ::capnp::byte> messageToPackedBytes(capnp::MessageBuilder & message)
kj::Array< ::capnp::byte> messageToPackedBytes(capnp::MessageBuilder & message, size_t wordCount)
{
auto segments = message.getSegmentsForOutput();
size_t totalSize = segments.size() / 2 + 1;
for (auto& segment: segments) {
totalSize += segment.size();
}
kj::Array<capnp::byte> result = kj::heapArray<capnp::byte>(totalSize * 8);
kj::Array<capnp::byte> result = kj::heapArray<capnp::byte>(wordCount * 8);
kj::ArrayOutputStream out(result.asPtr());
capnp::writePackedMessage(out, message);
return heapArray(out.getArray()); // TODO: make this non-copying somehow