summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-05-22 03:34:43 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-05-22 03:34:43 +0900
commitb9cb270b8f771e5504e36469112daa6a32b24d63 (patch)
treee50d7ed4de4290399f12327c545fec58ef341a7a /java/src
parent1fe35d7efe4d5a4993d2392cc259dec17fc744e4 (diff)
downloadmsgpack-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.java22
-rw-r--r--java/src/main/java/org/msgpack/Unpacker.java8
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();
+ }
}