summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-07-28 01:17:20 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-07-28 01:17:20 +0900
commit6c91b862c9da56ce0914d430fea2cb388e32d5d5 (patch)
treeb9c1fc4c9f5fd198b20ec783fc253ed75ee4d9cd /java
parentcba47b635a5a3bab2050fb4e0d099c23f8455867 (diff)
downloadmsgpack-python-6c91b862c9da56ce0914d430fea2cb388e32d5d5.tar.gz
java: MessagePackObject implements Cloneable and MessagePackable interfaces
Diffstat (limited to 'java')
-rw-r--r--java/src/main/java/org/msgpack/MessagePackObject.java4
-rw-r--r--java/src/main/java/org/msgpack/Packer.java22
-rw-r--r--java/src/main/java/org/msgpack/object/ArrayType.java28
-rw-r--r--java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java19
-rw-r--r--java/src/main/java/org/msgpack/object/BooleanType.java19
-rw-r--r--java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java19
-rw-r--r--java/src/main/java/org/msgpack/object/FloatTypeIMPL.java19
-rw-r--r--java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java19
-rw-r--r--java/src/main/java/org/msgpack/object/MapType.java27
-rw-r--r--java/src/main/java/org/msgpack/object/NilType.java19
-rw-r--r--java/src/main/java/org/msgpack/object/RawType.java23
-rw-r--r--java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java19
12 files changed, 233 insertions, 4 deletions
diff --git a/java/src/main/java/org/msgpack/MessagePackObject.java b/java/src/main/java/org/msgpack/MessagePackObject.java
index aba27e4..b1a6fab 100644
--- a/java/src/main/java/org/msgpack/MessagePackObject.java
+++ b/java/src/main/java/org/msgpack/MessagePackObject.java
@@ -22,7 +22,7 @@ import java.util.Set;
import java.util.Map;
import java.math.BigInteger;
-public abstract class MessagePackObject {
+public abstract class MessagePackObject implements Cloneable, MessagePackable {
public boolean isNull() {
return false;
}
@@ -126,5 +126,7 @@ public abstract class MessagePackObject {
public double doubleValue() {
throw new MessageTypeException("type error");
}
+
+ abstract public Object clone();
}
diff --git a/java/src/main/java/org/msgpack/Packer.java b/java/src/main/java/org/msgpack/Packer.java
index dd510f3..fbf7e35 100644
--- a/java/src/main/java/org/msgpack/Packer.java
+++ b/java/src/main/java/org/msgpack/Packer.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Map;
+import java.math.BigInteger;
/**
* Packer enables you to serialize objects into OutputStream.
@@ -194,6 +195,27 @@ public class Packer {
return this;
}
+ public Packer packBigInteger(BigInteger d) throws IOException {
+ if(d.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) <= 0) {
+ return packLong(d.longValue());
+ } else if(d.bitLength() <= 64) {
+ castBytes[0] = (byte)0xcf;
+ byte[] barray = d.toByteArray();
+ castBytes[1] = barray[0];
+ castBytes[2] = barray[1];
+ castBytes[3] = barray[2];
+ castBytes[4] = barray[3];
+ castBytes[5] = barray[4];
+ castBytes[6] = barray[5];
+ castBytes[7] = barray[6];
+ castBytes[8] = barray[7];
+ out.write(castBytes);
+ return this;
+ } else {
+ throw new MessageTypeException("can't BigInteger larger than 0xffffffffffffffff");
+ }
+ }
+
public Packer packFloat(float d) throws IOException {
castBytes[0] = (byte)0xca;
castBuffer.putFloat(1, d);
diff --git a/java/src/main/java/org/msgpack/object/ArrayType.java b/java/src/main/java/org/msgpack/object/ArrayType.java
index 06e9b16..694f53f 100644
--- a/java/src/main/java/org/msgpack/object/ArrayType.java
+++ b/java/src/main/java/org/msgpack/object/ArrayType.java
@@ -18,9 +18,8 @@
package org.msgpack.object;
import java.util.List;
-import java.util.Set;
-import java.util.Map;
import java.util.Arrays;
+import java.io.IOException;
import org.msgpack.*;
public class ArrayType extends MessagePackObject {
@@ -44,5 +43,30 @@ public class ArrayType extends MessagePackObject {
public List<MessagePackObject> asList() {
return Arrays.asList(array);
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packArray(array.length);
+ for(int i=0; i < array.length; i++) {
+ array[i].messagePack(pk);
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return Arrays.equals(((ArrayType)obj).array, array);
+ }
+
+ @Override
+ public Object clone() {
+ MessagePackObject[] copy = new MessagePackObject[array.length];
+ for(int i=0; i < array.length; i++) {
+ copy[i] = (MessagePackObject)array[i].clone();
+ }
+ return copy;
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java b/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java
index 1ebb83d..f7c73ae 100644
--- a/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java
+++ b/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java
@@ -18,6 +18,7 @@
package org.msgpack.object;
import java.math.BigInteger;
+import java.io.IOException;
import org.msgpack.*;
class BigIntegerTypeIMPL extends IntegerType {
@@ -88,5 +89,23 @@ class BigIntegerTypeIMPL extends IntegerType {
public double doubleValue() {
return value.doubleValue();
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packBigInteger(value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((BigIntegerTypeIMPL)obj).value.equals(value);
+ }
+
+ @Override
+ public Object clone() {
+ return new BigIntegerTypeIMPL(value);
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/BooleanType.java b/java/src/main/java/org/msgpack/object/BooleanType.java
index d272b6f..c6e4f30 100644
--- a/java/src/main/java/org/msgpack/object/BooleanType.java
+++ b/java/src/main/java/org/msgpack/object/BooleanType.java
@@ -17,6 +17,7 @@
//
package org.msgpack.object;
+import java.io.IOException;
import org.msgpack.*;
public class BooleanType extends MessagePackObject {
@@ -35,5 +36,23 @@ public class BooleanType extends MessagePackObject {
public boolean asBoolean() {
return value;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packBoolean(value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((BooleanType)obj).value == value;
+ }
+
+ @Override
+ public Object clone() {
+ return new BooleanType(value);
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java b/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java
index 8bbc52a..dafe540 100644
--- a/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java
+++ b/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java
@@ -18,6 +18,7 @@
package org.msgpack.object;
import java.math.BigInteger;
+import java.io.IOException;
import org.msgpack.*;
class DoubleTypeIMPL extends FloatType {
@@ -67,5 +68,23 @@ class DoubleTypeIMPL extends FloatType {
public double doubleValue() {
return (double)value;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packDouble(value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((DoubleTypeIMPL)obj).value == value;
+ }
+
+ @Override
+ public Object clone() {
+ return new DoubleTypeIMPL(value);
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/FloatTypeIMPL.java b/java/src/main/java/org/msgpack/object/FloatTypeIMPL.java
index 8821640..234b2ad 100644
--- a/java/src/main/java/org/msgpack/object/FloatTypeIMPL.java
+++ b/java/src/main/java/org/msgpack/object/FloatTypeIMPL.java
@@ -18,6 +18,7 @@
package org.msgpack.object;
import java.math.BigInteger;
+import java.io.IOException;
import org.msgpack.*;
class FloatTypeIMPL extends FloatType {
@@ -66,5 +67,23 @@ class FloatTypeIMPL extends FloatType {
public double doubleValue() {
return (double)value;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packFloat(value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((FloatTypeIMPL)obj).value == value;
+ }
+
+ @Override
+ public Object clone() {
+ return new FloatTypeIMPL(value);
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java b/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java
index c914e91..0ce22a2 100644
--- a/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java
+++ b/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java
@@ -18,6 +18,7 @@
package org.msgpack.object;
import java.math.BigInteger;
+import java.io.IOException;
import org.msgpack.*;
class LongIntegerTypeIMPL extends IntegerType {
@@ -85,5 +86,23 @@ class LongIntegerTypeIMPL extends IntegerType {
public double doubleValue() {
return (double)value;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packLong(value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((LongIntegerTypeIMPL)obj).value == value;
+ }
+
+ @Override
+ public Object clone() {
+ return new LongIntegerTypeIMPL(value);
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/MapType.java b/java/src/main/java/org/msgpack/object/MapType.java
index 359ebe6..d456e78 100644
--- a/java/src/main/java/org/msgpack/object/MapType.java
+++ b/java/src/main/java/org/msgpack/object/MapType.java
@@ -19,6 +19,8 @@ package org.msgpack.object;
import java.util.HashMap;
import java.util.Map;
+import java.util.Arrays;
+import java.io.IOException;
import org.msgpack.*;
public class MapType extends MessagePackObject {
@@ -44,5 +46,30 @@ public class MapType extends MessagePackObject {
}
return m;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packMap(map.length / 2);
+ for(int i=0; i < map.length; i++) {
+ map[i].messagePack(pk);
+ }
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return Arrays.equals(((MapType)obj).map, map);
+ }
+
+ @Override
+ public Object clone() {
+ MessagePackObject[] copy = new MessagePackObject[map.length];
+ for(int i=0; i < map.length; i++) {
+ copy[i] = (MessagePackObject)map[i].clone();
+ }
+ return copy;
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/NilType.java b/java/src/main/java/org/msgpack/object/NilType.java
index c36ff05..7a46376 100644
--- a/java/src/main/java/org/msgpack/object/NilType.java
+++ b/java/src/main/java/org/msgpack/object/NilType.java
@@ -17,6 +17,7 @@
//
package org.msgpack.object;
+import java.io.IOException;
import org.msgpack.*;
public class NilType extends MessagePackObject {
@@ -24,5 +25,23 @@ public class NilType extends MessagePackObject {
public boolean isNull() {
return true;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packNil();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Object clone() {
+ return new NilType();
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/RawType.java b/java/src/main/java/org/msgpack/object/RawType.java
index 107ba27..18a419d 100644
--- a/java/src/main/java/org/msgpack/object/RawType.java
+++ b/java/src/main/java/org/msgpack/object/RawType.java
@@ -17,9 +17,11 @@
//
package org.msgpack.object;
+import java.util.Arrays;
+import java.io.IOException;
import org.msgpack.*;
-class RawType extends MessagePackObject {
+public class RawType extends MessagePackObject {
private byte[] bytes;
public RawType(byte[] bytes) {
@@ -44,5 +46,24 @@ class RawType extends MessagePackObject {
throw new MessageTypeException("type error");
}
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packRaw(bytes.length);
+ pk.packRawBody(bytes);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((RawType)obj).bytes.equals(bytes);
+ }
+
+ @Override
+ public Object clone() {
+ return new RawType((byte[])bytes.clone());
+ }
}
diff --git a/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java b/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java
index a725950..83a4daf 100644
--- a/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java
+++ b/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java
@@ -18,6 +18,7 @@
package org.msgpack.object;
import java.math.BigInteger;
+import java.io.IOException;
import org.msgpack.*;
class ShortIntegerTypeIMPL extends IntegerType {
@@ -87,5 +88,23 @@ class ShortIntegerTypeIMPL extends IntegerType {
public double doubleValue() {
return (double)value;
}
+
+ @Override
+ public void messagePack(Packer pk) throws IOException {
+ pk.packInt(value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj.getClass() != getClass()) {
+ return false;
+ }
+ return ((ShortIntegerTypeIMPL)obj).value == value;
+ }
+
+ @Override
+ public Object clone() {
+ return new ShortIntegerTypeIMPL(value);
+ }
}