diff options
| author | frsyuki <frsyuki@users.sourceforge.jp> | 2010-05-22 03:34:43 +0900 |
|---|---|---|
| committer | frsyuki <frsyuki@users.sourceforge.jp> | 2010-05-22 03:34:43 +0900 |
| commit | b9cb270b8f771e5504e36469112daa6a32b24d63 (patch) | |
| tree | e50d7ed4de4290399f12327c545fec58ef341a7a /java/src | |
| parent | 1fe35d7efe4d5a4993d2392cc259dec17fc744e4 (diff) | |
| download | msgpack-python-b9cb270b8f771e5504e36469112daa6a32b24d63.tar.gz | |
java: add Unpacker.unpack(MessageUnpackable) and Unpacker.tryUnpackNil()
Diffstat (limited to 'java/src')
| -rw-r--r-- | java/src/main/java/org/msgpack/BufferedUnpackerImpl.java | 22 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/Unpacker.java | 8 |
2 files changed, 29 insertions, 1 deletions
diff --git a/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java b/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java index 0aba62b..4b2f302 100644 --- a/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java +++ b/java/src/main/java/org/msgpack/BufferedUnpackerImpl.java @@ -63,6 +63,15 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl { } } + private final boolean tryMore(int require) throws IOException, UnpackException { + while(filled - offset < require) { + if(!fill()) { + return false; + } + } + return true; + } + private final void advance(int length) { offset += length; } @@ -275,6 +284,18 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl { return null; } + final boolean tryUnpackNull() throws IOException { + if(!tryMore(1)) { + return false; + } + int b = buffer[offset] & 0xff; + if(b != 0xc0) { // nil + return false; + } + advance(1); + return 1; + } + final boolean unpackBoolean() throws IOException, MessageTypeException { more(1); int b = buffer[offset] & 0xff; @@ -389,7 +410,6 @@ abstract class BufferedUnpackerImpl extends UnpackerImpl { } final Object unpackObject() throws IOException { - // FIXME save state, restore state UnpackResult result = new UnpackResult(); if(!next(result)) { super.reset(); diff --git a/java/src/main/java/org/msgpack/Unpacker.java b/java/src/main/java/org/msgpack/Unpacker.java index 7563b39..1917b9f 100644 --- a/java/src/main/java/org/msgpack/Unpacker.java +++ b/java/src/main/java/org/msgpack/Unpacker.java @@ -544,5 +544,13 @@ public class Unpacker implements Iterable<Object> { final public Object unpackObject() throws IOException { return impl.unpackObject(); } + + final void unpack(MessageUnpackable obj) throws IOException, MessageTypeException { + obj.unpackMessage(this); + } + + final boolean tryUnpackNull() throws IOException { + return impl.tryUnpackNull(); + } } |
