From 8c67087a154da0e7cdc32c0b676d2956ce1d0f47 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Wed, 18 Aug 2010 16:32:42 +0900 Subject: java: adds MessagePackObject.bigIntegerValue(), asBigInteger() and equals() --- java/src/main/java/org/msgpack/MessagePackObject.java | 4 ++++ .../main/java/org/msgpack/object/BigIntegerTypeIMPL.java | 15 +++++++++++++++ java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java | 5 +++++ .../main/java/org/msgpack/object/LongIntegerTypeIMPL.java | 15 +++++++++++++++ .../java/org/msgpack/object/ShortIntegerTypeIMPL.java | 10 ++++++++++ 5 files changed, 49 insertions(+) (limited to 'java/src') diff --git a/java/src/main/java/org/msgpack/MessagePackObject.java b/java/src/main/java/org/msgpack/MessagePackObject.java index b1a6fab..6181f7a 100644 --- a/java/src/main/java/org/msgpack/MessagePackObject.java +++ b/java/src/main/java/org/msgpack/MessagePackObject.java @@ -119,6 +119,10 @@ public abstract class MessagePackObject implements Cloneable, MessagePackable { throw new MessageTypeException("type error"); } + public BigInteger bigIntegerValue() { + throw new MessageTypeException("type error"); + } + public float floatValue() { throw new MessageTypeException("type error"); } diff --git a/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java b/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java index fd517e7..7b060ee 100644 --- a/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java +++ b/java/src/main/java/org/msgpack/object/BigIntegerTypeIMPL.java @@ -60,6 +60,11 @@ class BigIntegerTypeIMPL extends IntegerType { return value.longValue(); } + @Override + public BigInteger asBigInteger() { + return value; + } + @Override public byte byteValue() { return value.byteValue(); @@ -80,6 +85,11 @@ class BigIntegerTypeIMPL extends IntegerType { return value.longValue(); } + @Override + public BigInteger bigIntegerValue() { + return value; + } + @Override public float floatValue() { return value.floatValue(); @@ -98,6 +108,11 @@ class BigIntegerTypeIMPL extends IntegerType { @Override public boolean equals(Object obj) { if(obj.getClass() != getClass()) { + if(obj.getClass() == ShortIntegerTypeIMPL.class) { + return BigInteger.valueOf((long)((ShortIntegerTypeIMPL)obj).shortValue()).equals(value); + } else if(obj.getClass() == LongIntegerTypeIMPL.class) { + return BigInteger.valueOf(((LongIntegerTypeIMPL)obj).longValue()).equals(value); + } return false; } return ((BigIntegerTypeIMPL)obj).value.equals(value); diff --git a/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java b/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java index b47a709..fd38089 100644 --- a/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java +++ b/java/src/main/java/org/msgpack/object/DoubleTypeIMPL.java @@ -59,6 +59,11 @@ class DoubleTypeIMPL extends FloatType { return (long)value; } + @Override + public BigInteger bigIntegerValue() { + return BigInteger.valueOf((long)value); + } + @Override public float floatValue() { return (float)value; diff --git a/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java b/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java index 940ab6f..3928a29 100644 --- a/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java +++ b/java/src/main/java/org/msgpack/object/LongIntegerTypeIMPL.java @@ -57,6 +57,11 @@ class LongIntegerTypeIMPL extends IntegerType { return value; } + @Override + public BigInteger asBigInteger() { + return BigInteger.valueOf(value); + } + @Override public byte byteValue() { return (byte)value; @@ -77,6 +82,11 @@ class LongIntegerTypeIMPL extends IntegerType { return (long)value; } + @Override + public BigInteger bigIntegerValue() { + return BigInteger.valueOf(value); + } + @Override public float floatValue() { return (float)value; @@ -95,6 +105,11 @@ class LongIntegerTypeIMPL extends IntegerType { @Override public boolean equals(Object obj) { if(obj.getClass() != getClass()) { + if(obj.getClass() == ShortIntegerTypeIMPL.class) { + return value == ((ShortIntegerTypeIMPL)obj).longValue(); + } else if(obj.getClass() == BigIntegerTypeIMPL.class) { + return (long)value == ((BigIntegerTypeIMPL)obj).longValue(); + } return false; } return ((LongIntegerTypeIMPL)obj).value == value; diff --git a/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java b/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java index 60e92b8..dbed426 100644 --- a/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java +++ b/java/src/main/java/org/msgpack/object/ShortIntegerTypeIMPL.java @@ -79,6 +79,11 @@ class ShortIntegerTypeIMPL extends IntegerType { return (long)value; } + @Override + public BigInteger bigIntegerValue() { + return BigInteger.valueOf((long)value); + } + @Override public float floatValue() { return (float)value; @@ -97,6 +102,11 @@ class ShortIntegerTypeIMPL extends IntegerType { @Override public boolean equals(Object obj) { if(obj.getClass() != getClass()) { + if(obj.getClass() == LongIntegerTypeIMPL.class) { + return (long)value == ((LongIntegerTypeIMPL)obj).longValue(); + } else if(obj.getClass() == BigIntegerTypeIMPL.class) { + return ((BigIntegerTypeIMPL)obj).bigIntegerValue().equals(BigInteger.valueOf((long)value)); + } return false; } return ((ShortIntegerTypeIMPL)obj).value == value; -- cgit v1.2.1