diff --git a/src/main/java/org/stellar/sdk/xdr/Int128Parts.java b/src/main/java/org/stellar/sdk/xdr/Int128Parts.java index 90a50fa66..4a77594aa 100644 --- a/src/main/java/org/stellar/sdk/xdr/Int128Parts.java +++ b/src/main/java/org/stellar/sdk/xdr/Int128Parts.java @@ -5,6 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.math.BigInteger; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -46,6 +47,12 @@ public static Int128Parts fromXdrBase64(String xdr) throws IOException { return fromXdrByteArray(bytes); } + public BigInteger toBigInteger() { + BigInteger hiValue = BigInteger.valueOf(hi.getInt64()); + BigInteger loValue = lo.getUint64().getNumber(); + return hiValue.shiftLeft(64).add(loValue); + } + public static Int128Parts fromXdrByteArray(byte[] xdr) throws IOException { ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xdr); XdrDataInputStream xdrDataInputStream = new XdrDataInputStream(byteArrayInputStream); diff --git a/src/main/java/org/stellar/sdk/xdr/Int256Parts.java b/src/main/java/org/stellar/sdk/xdr/Int256Parts.java index c16004932..c4fdbbc40 100644 --- a/src/main/java/org/stellar/sdk/xdr/Int256Parts.java +++ b/src/main/java/org/stellar/sdk/xdr/Int256Parts.java @@ -5,6 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.math.BigInteger; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -54,6 +55,19 @@ public static Int256Parts fromXdrBase64(String xdr) throws IOException { return fromXdrByteArray(bytes); } + public BigInteger toBigInteger() { + BigInteger hi_hiValue = BigInteger.valueOf(hi_hi.getInt64()); + BigInteger hi_loValue = hi_lo.getUint64().getNumber(); + BigInteger lo_hiValue = lo_hi.getUint64().getNumber(); + BigInteger lo_loValue = lo_lo.getUint64().getNumber(); + + return hi_hiValue + .shiftLeft(192) + .add(hi_loValue.shiftLeft(128)) + .add(lo_hiValue.shiftLeft(64)) + .add(lo_loValue); + } + public static Int256Parts fromXdrByteArray(byte[] xdr) throws IOException { ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xdr); XdrDataInputStream xdrDataInputStream = new XdrDataInputStream(byteArrayInputStream); diff --git a/src/main/java/org/stellar/sdk/xdr/UInt128Parts.java b/src/main/java/org/stellar/sdk/xdr/UInt128Parts.java index 1e8e277c0..a03c87107 100644 --- a/src/main/java/org/stellar/sdk/xdr/UInt128Parts.java +++ b/src/main/java/org/stellar/sdk/xdr/UInt128Parts.java @@ -5,6 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.math.BigInteger; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -46,6 +47,12 @@ public static UInt128Parts fromXdrBase64(String xdr) throws IOException { return fromXdrByteArray(bytes); } + public BigInteger toBigInteger() { + BigInteger hiValue = hi.getUint64().getNumber(); + BigInteger loValue = lo.getUint64().getNumber(); + return hiValue.shiftLeft(64).add(loValue); + } + public static UInt128Parts fromXdrByteArray(byte[] xdr) throws IOException { ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xdr); XdrDataInputStream xdrDataInputStream = new XdrDataInputStream(byteArrayInputStream); diff --git a/src/main/java/org/stellar/sdk/xdr/UInt256Parts.java b/src/main/java/org/stellar/sdk/xdr/UInt256Parts.java index c7e7e42b3..37bfab3ad 100644 --- a/src/main/java/org/stellar/sdk/xdr/UInt256Parts.java +++ b/src/main/java/org/stellar/sdk/xdr/UInt256Parts.java @@ -5,6 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.math.BigInteger; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -49,6 +50,18 @@ public static UInt256Parts decode(XdrDataInputStream stream) throws IOException return decodedUInt256Parts; } + public BigInteger toBigInteger() { + BigInteger hi_hiValue = hi_hi.getUint64().getNumber(); + BigInteger hi_loValue = hi_lo.getUint64().getNumber(); + BigInteger lo_hiValue = lo_hi.getUint64().getNumber(); + BigInteger lo_loValue = lo_lo.getUint64().getNumber(); + return hi_hiValue + .shiftLeft(192) + .add(hi_loValue.shiftLeft(128)) + .add(lo_hiValue.shiftLeft(64)) + .add(lo_loValue); + } + public static UInt256Parts fromXdrBase64(String xdr) throws IOException { byte[] bytes = Base64Factory.getInstance().decode(xdr); return fromXdrByteArray(bytes); diff --git a/src/main/java/org/stellar/sdk/xdr/Uint256.java b/src/main/java/org/stellar/sdk/xdr/Uint256.java index 13348bd7f..ca60f0577 100644 --- a/src/main/java/org/stellar/sdk/xdr/Uint256.java +++ b/src/main/java/org/stellar/sdk/xdr/Uint256.java @@ -5,6 +5,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.math.BigInteger; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -36,6 +37,10 @@ public static Uint256 decode(XdrDataInputStream stream) throws IOException { return decodedUint256; } + public BigInteger toBigInteger() { + return new BigInteger(1, uint256); + } + public static Uint256 fromXdrBase64(String xdr) throws IOException { byte[] bytes = Base64Factory.getInstance().decode(xdr); return fromXdrByteArray(bytes);