aboutsummaryrefslogtreecommitdiffstats
path: root/guava/src/com/google/common/collect/DiscreteDomains.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava/src/com/google/common/collect/DiscreteDomains.java')
-rw-r--r--guava/src/com/google/common/collect/DiscreteDomains.java125
1 files changed, 116 insertions, 9 deletions
diff --git a/guava/src/com/google/common/collect/DiscreteDomains.java b/guava/src/com/google/common/collect/DiscreteDomains.java
index dac4628..8cb2ae7 100644
--- a/guava/src/com/google/common/collect/DiscreteDomains.java
+++ b/guava/src/com/google/common/collect/DiscreteDomains.java
@@ -16,22 +16,20 @@
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;
+
/**
* Factories for common {@link DiscreteDomain} instances.
*
- * <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 Gregory Kick
* @since 10.0
- * @deprecated Merged into {@link DiscreteDomain}. This class is scheduled for deletion in release
- * 15.0.
*/
@GwtCompatible
-@Deprecated
+@Beta
public final class DiscreteDomains {
private DiscreteDomains() {}
@@ -39,13 +37,122 @@ public final class DiscreteDomains {
* Returns the discrete domain for values of type {@code Integer}.
*/
public static DiscreteDomain<Integer> integers() {
- return DiscreteDomain.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;
+ }
+
+ private static final long serialVersionUID = 0;
}
/**
* Returns the discrete domain for values of type {@code Long}.
*/
public static DiscreteDomain<Long> longs() {
- return DiscreteDomain.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;
+ }
+
+ 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 start.subtract(end).max(MIN_LONG).min(MAX_LONG).longValue();
+ }
+
+ private Object readResolve() {
+ return INSTANCE;
+ }
+
+ private static final long serialVersionUID = 0;
}
}