mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-12 10:15:52 +00:00
Use a bit of Guava for unsigned longs. Resolves issue 367.
This commit is contained in:
parent
4f1c7f4816
commit
7b8eab19ff
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.google.bitcoin.core;
|
package com.google.bitcoin.core;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.CycleDetectingLockFactory;
|
import com.google.common.primitives.UnsignedLongs;
|
||||||
import org.spongycastle.crypto.digests.RIPEMD160Digest;
|
import org.spongycastle.crypto.digests.RIPEMD160Digest;
|
||||||
import org.spongycastle.util.encoders.Hex;
|
import org.spongycastle.util.encoders.Hex;
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ public class Utils {
|
|||||||
* Work around lack of unsigned types in Java.
|
* Work around lack of unsigned types in Java.
|
||||||
*/
|
*/
|
||||||
public static boolean isLessThanUnsigned(long n1, long n2) {
|
public static boolean isLessThanUnsigned(long n1, long n2) {
|
||||||
return (n1 < n2) ^ ((n1 < 0) != (n2 < 0));
|
return UnsignedLongs.compare(n1, n2) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.google.bitcoin.core;
|
package com.google.bitcoin.core;
|
||||||
|
|
||||||
|
import com.google.common.primitives.UnsignedInteger;
|
||||||
|
|
||||||
import static com.google.bitcoin.core.Utils.isLessThanUnsigned;
|
import static com.google.bitcoin.core.Utils.isLessThanUnsigned;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,7 +75,6 @@ public class VarInt {
|
|||||||
* Gets the minimum encoded size of the given value.
|
* Gets the minimum encoded size of the given value.
|
||||||
*/
|
*/
|
||||||
public static int sizeOf(int value) {
|
public static int sizeOf(int value) {
|
||||||
// Java doesn't have the actual value of MAX_INT, as all types in Java are signed.
|
|
||||||
if (value < 253)
|
if (value < 253)
|
||||||
return 1;
|
return 1;
|
||||||
else if (value < 65536)
|
else if (value < 65536)
|
||||||
@ -85,12 +86,11 @@ public class VarInt {
|
|||||||
* Gets the minimum encoded size of the given value.
|
* Gets the minimum encoded size of the given value.
|
||||||
*/
|
*/
|
||||||
public static int sizeOf(long value) {
|
public static int sizeOf(long value) {
|
||||||
// Java doesn't have the actual value of MAX_INT, as all types in Java are signed.
|
|
||||||
if (isLessThanUnsigned(value, 253))
|
if (isLessThanUnsigned(value, 253))
|
||||||
return 1;
|
return 1;
|
||||||
else if (isLessThanUnsigned(value, 65536))
|
else if (isLessThanUnsigned(value, 65536))
|
||||||
return 3; // 1 marker + 2 data bytes
|
return 3; // 1 marker + 2 data bytes
|
||||||
else if (isLessThanUnsigned(value, 4294967296L))
|
else if (isLessThanUnsigned(value, UnsignedInteger.MAX_VALUE.longValue()))
|
||||||
return 5; // 1 marker + 4 data bytes
|
return 5; // 1 marker + 4 data bytes
|
||||||
else
|
else
|
||||||
return 9; // 1 marker + 8 data bytes
|
return 9; // 1 marker + 8 data bytes
|
||||||
@ -106,7 +106,7 @@ public class VarInt {
|
|||||||
return new byte[]{(byte) value};
|
return new byte[]{(byte) value};
|
||||||
} else if (isLessThanUnsigned(value, 65536)) {
|
} else if (isLessThanUnsigned(value, 65536)) {
|
||||||
return new byte[]{(byte) 253, (byte) (value), (byte) (value >> 8)};
|
return new byte[]{(byte) 253, (byte) (value), (byte) (value >> 8)};
|
||||||
} else if (isLessThanUnsigned(value, 4294967295L)) {
|
} else if (isLessThanUnsigned(value, UnsignedInteger.MAX_VALUE.longValue())) {
|
||||||
byte[] bytes = new byte[5];
|
byte[] bytes = new byte[5];
|
||||||
bytes[0] = (byte) 254;
|
bytes[0] = (byte) 254;
|
||||||
Utils.uint32ToByteArrayLE(value, bytes, 1);
|
Utils.uint32ToByteArrayLE(value, bytes, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user