aboutsummaryrefslogtreecommitdiffstats
path: root/guava/src/com/google/common/collect/DiscreteDomain.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava/src/com/google/common/collect/DiscreteDomain.java')
-rw-r--r--guava/src/com/google/common/collect/DiscreteDomain.java155
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();
}
-
}