diff options
Diffstat (limited to 'guava/src/com/google/common/collect/DiscreteDomain.java')
-rw-r--r-- | guava/src/com/google/common/collect/DiscreteDomain.java | 155 |
1 files changed, 3 insertions, 152 deletions
diff --git a/guava/src/com/google/common/collect/DiscreteDomain.java b/guava/src/com/google/common/collect/DiscreteDomain.java index f2a2f9a..893bbbb 100644 --- a/guava/src/com/google/common/collect/DiscreteDomain.java +++ b/guava/src/com/google/common/collect/DiscreteDomain.java @@ -19,13 +19,11 @@ package com.google.common.collect; import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; -import java.io.Serializable; -import java.math.BigInteger; import java.util.NoSuchElementException; /** * A descriptor for a <i>discrete</i> {@code Comparable} domain such as all - * {@link Integer} instances. A discrete domain is one that supports the three basic + * {@link Integer}s. A discrete domain is one that supports the three basic * operations: {@link #next}, {@link #previous} and {@link #distance}, according * to their specifications. The methods {@link #minValue} and {@link #maxValue} * should also be overridden for bounded types. @@ -34,159 +32,13 @@ import java.util.NoSuchElementException; * type; it cannot represent partial domains such as "prime integers" or * "strings of length 5." * - * <p>See the Guava User Guide section on <a href= - * "http://code.google.com/p/guava-libraries/wiki/RangesExplained#Discrete_Domains"> - * {@code DiscreteDomain}</a>. - * * @author Kevin Bourrillion * @since 10.0 + * @see DiscreteDomains */ @GwtCompatible @Beta public abstract class DiscreteDomain<C extends Comparable> { - - /** - * Returns the discrete domain for values of type {@code Integer}. - * - * @since 14.0 (since 10.0 as {@code DiscreteDomains.integers()}) - */ - public static DiscreteDomain<Integer> integers() { - return IntegerDomain.INSTANCE; - } - - private static final class IntegerDomain extends DiscreteDomain<Integer> - implements Serializable { - private static final IntegerDomain INSTANCE = new IntegerDomain(); - - @Override public Integer next(Integer value) { - int i = value; - return (i == Integer.MAX_VALUE) ? null : i + 1; - } - - @Override public Integer previous(Integer value) { - int i = value; - return (i == Integer.MIN_VALUE) ? null : i - 1; - } - - @Override public long distance(Integer start, Integer end) { - return (long) end - start; - } - - @Override public Integer minValue() { - return Integer.MIN_VALUE; - } - - @Override public Integer maxValue() { - return Integer.MAX_VALUE; - } - - private Object readResolve() { - return INSTANCE; - } - - @Override - public String toString() { - return "DiscreteDomains.integers()"; - } - - private static final long serialVersionUID = 0; - } - - /** - * Returns the discrete domain for values of type {@code Long}. - * - * @since 14.0 (since 10.0 as {@code DiscreteDomains.longs()}) - */ - public static DiscreteDomain<Long> longs() { - return LongDomain.INSTANCE; - } - - private static final class LongDomain extends DiscreteDomain<Long> - implements Serializable { - private static final LongDomain INSTANCE = new LongDomain(); - - @Override public Long next(Long value) { - long l = value; - return (l == Long.MAX_VALUE) ? null : l + 1; - } - - @Override public Long previous(Long value) { - long l = value; - return (l == Long.MIN_VALUE) ? null : l - 1; - } - - @Override public long distance(Long start, Long end) { - long result = end - start; - if (end > start && result < 0) { // overflow - return Long.MAX_VALUE; - } - if (end < start && result > 0) { // underflow - return Long.MIN_VALUE; - } - return result; - } - - @Override public Long minValue() { - return Long.MIN_VALUE; - } - - @Override public Long maxValue() { - return Long.MAX_VALUE; - } - - private Object readResolve() { - return INSTANCE; - } - - @Override - public String toString() { - return "DiscreteDomains.longs()"; - } - - private static final long serialVersionUID = 0; - } - - /** - * Returns the discrete domain for values of type {@code BigInteger}. - */ - // TODO(kevinb): make sure it's tested, and make it public - static DiscreteDomain<BigInteger> bigIntegers() { - return BigIntegerDomain.INSTANCE; - } - - private static final class BigIntegerDomain extends DiscreteDomain<BigInteger> - implements Serializable { - private static final BigIntegerDomain INSTANCE = new BigIntegerDomain(); - - private static final BigInteger MIN_LONG = - BigInteger.valueOf(Long.MIN_VALUE); - private static final BigInteger MAX_LONG = - BigInteger.valueOf(Long.MAX_VALUE); - - @Override public BigInteger next(BigInteger value) { - return value.add(BigInteger.ONE); - } - - @Override public BigInteger previous(BigInteger value) { - return value.subtract(BigInteger.ONE); - } - - @Override public long distance(BigInteger start, BigInteger end) { - return end.subtract(start).max(MIN_LONG).min(MAX_LONG).longValue(); - } - - private Object readResolve() { - return INSTANCE; - } - - @Override - public String toString() { - return "DiscreteDomains.bigIntegers()"; - } - - private static final long serialVersionUID = 0; - } - /** Constructor for use by subclasses. */ protected DiscreteDomain() {} @@ -224,7 +76,7 @@ public abstract class DiscreteDomain<C extends Comparable> { * type. * * @return the distance as described above, or {@link Long#MIN_VALUE} or - * {@link Long#MAX_VALUE} if the distance is too small or too large, + * {@link Long#MIN_VALUE} if the distance is too small or too large, * respectively. */ public abstract long distance(C start, C end); @@ -258,5 +110,4 @@ public abstract class DiscreteDomain<C extends Comparable> { public C maxValue() { throw new NoSuchElementException(); } - } |