UnsignedInteger.java revision 1d580d0f6ee4f21eb309ba7b509d2c6d671c4044
11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * in compliance with the License. You may obtain a copy of the License at 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software distributed under the 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * express or implied. See the License for the specific language governing permissions and 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.primitives; 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkArgument; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.base.Preconditions.checkNotNull; 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.primitives.UnsignedInts.INT_MASK; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.primitives.UnsignedInts.compare; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.primitives.UnsignedInts.toLong; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.math.BigInteger; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport javax.annotation.Nullable; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.Beta; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A wrapper class for unsigned {@code int} values, supporting arithmetic operations. 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <p>In some cases, when speed is more important than code readability, it may be faster simply to 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * treat primitive {@code int} values as unsigned, using the methods from {@link UnsignedInts}. 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 11.0 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@Beta 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic final class UnsignedInteger extends Number implements Comparable<UnsignedInteger> { 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final UnsignedInteger ZERO = asUnsigned(0); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final UnsignedInteger ONE = asUnsigned(1); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static final UnsignedInteger MAX_VALUE = asUnsigned(-1); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private final int value; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private UnsignedInteger(int value) { 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.value = value & 0xffffffff; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns an {@code UnsignedInteger} that, when treated as signed, is 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * equal to {@code value}. 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static UnsignedInteger asUnsigned(int value) { 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new UnsignedInteger(value); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns an {@code UnsignedInteger} that is equal to {@code value}, 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * if possible. The inverse operation of {@link #longValue()}. 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static UnsignedInteger valueOf(long value) { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkArgument((value & INT_MASK) == value, 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "value (%s) is outside the range for an unsigned integer value", value); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned((int) value); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns a {@code UnsignedInteger} representing the same value as the specified 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@link BigInteger}. This is the inverse operation of {@link #bigIntegerValue()}. 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @throws IllegalArgumentException if {@code value} is negative or {@code value >= 2^32} 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static UnsignedInteger valueOf(BigInteger value) { 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(value); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkArgument(value.signum() >= 0 && value.bitLength() <= Integer.SIZE, 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "value (%s) is outside the range for an unsigned integer value", value); 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(value.intValue()); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns an {@code UnsignedInteger} holding the value of the specified {@code String}, parsed 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * as an unsigned {@code int} value. 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @throws NumberFormatException if the string does not contain a parsable unsigned {@code int} 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * value 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static UnsignedInteger valueOf(String string) { 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return valueOf(string, 10); 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns an {@code UnsignedInteger} holding the value of the specified {@code String}, parsed 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * as an unsigned {@code int} value in the specified radix. 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @throws NumberFormatException if the string does not contain a parsable unsigned {@code int} 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * value 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static UnsignedInteger valueOf(String string, int radix) { 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(UnsignedInts.parseUnsignedInt(string, radix)); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the result of adding this and {@code val}. If the result would have more than 32 bits, 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * returns the low 32 bits of the result. 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnsignedInteger add(UnsignedInteger val) { 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(val); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(this.value + val.value); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the result of subtracting this and {@code val}. If the result would be negative, 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * returns the low 32 bits of the result. 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnsignedInteger subtract(UnsignedInteger val) { 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(val); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(this.value - val.value); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the result of multiplying this and {@code val}. If the result would have more than 32 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * bits, returns the low 32 bits of the result. 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Does not truncate correctly") 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnsignedInteger multiply(UnsignedInteger val) { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(val); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(value * val.value); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the result of dividing this by {@code val}. 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnsignedInteger divide(UnsignedInteger val) { 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(val); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(UnsignedInts.divide(value, val.value)); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the remainder of dividing this by {@code val}. 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public UnsignedInteger remainder(UnsignedInteger val) { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(val); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return asUnsigned(UnsignedInts.remainder(value, val.value)); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the value of this {@code UnsignedInteger} as an {@code int}. This is an inverse 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * operation to {@link #asUnsigned}. 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <p>Note that if this {@code UnsignedInteger} holds a value {@code >= 2^31}, the returned value 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * will be equal to {@code this - 2^32}. 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int intValue() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value; 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the value of this {@code UnsignedInteger} as a {@code long}. 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public long longValue() { 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return toLong(value); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the value of this {@code UnsignedInteger} as a {@code float}, analogous to a widening 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * primitive conversion from {@code int} to {@code float}, and correctly rounded. 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public float floatValue() { 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return longValue(); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the value of this {@code UnsignedInteger} as a {@code float}, analogous to a widening 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * primitive conversion from {@code int} to {@code double}, and correctly rounded. 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public double doubleValue() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return longValue(); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the value of this {@code UnsignedInteger} as a {@link BigInteger}. 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public BigInteger bigIntegerValue() { 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return BigInteger.valueOf(longValue()); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Compares this unsigned integer to another unsigned integer. 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns {@code 0} if they are equal, a negative number if {@code this < other}, 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * and a positive number if {@code this > other}. 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compareTo(UnsignedInteger other) { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkNotNull(other); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return compare(value, other.value); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int hashCode() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value; 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public boolean equals(@Nullable Object obj) { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (obj instanceof UnsignedInteger) { 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedInteger other = (UnsignedInteger) obj; 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value == other.value; 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return false; 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns a string representation of the {@code UnsignedInteger} value, in base 10. 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public String toString() { 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return toString(10); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns a string representation of the {@code UnsignedInteger} value, in base {@code radix}. 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * If {@code radix < Character.MIN_RADIX} or {@code radix > Character.MAX_RADIX}, the radix 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@code 10} is used. 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public String toString(int radix) { 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return UnsignedInts.toString(value, radix); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 237