package com.revolsys.collection.range;
import com.revolsys.util.number.Numbers;
/**
*
* Ranges are immutable
*/
public class LongRange extends AbstractRange<Long> {
private long from;
private long to;
public LongRange(final long value) {
this(value, value);
}
public LongRange(final long from, final long to) {
if (from < to) {
this.from = from;
this.to = to;
} else {
this.from = to;
this.to = from;
}
}
@Override
public AbstractRange<?> expand(final Object value) {
final Long longValue = Numbers.toLong(value);
if (longValue == null) {
return null;
} else {
return super.expand(longValue);
}
}
@Override
public Long getFrom() {
return this.from;
}
@Override
public Long getTo() {
return this.to;
}
@Override
protected LongRange newRange(final Object from, final Object to) {
return new LongRange((Long)from, (Long)to);
}
@Override
public Long next(final Object value) {
if (value == null) {
return null;
} else {
final Long longValue = Numbers.toLong(value);
if (longValue == null) {
return null;
} else {
final long number = longValue.longValue();
if (number == Long.MAX_VALUE) {
return null;
} else {
return number + 1;
}
}
}
}
@Override
public Long previous(final Object value) {
if (value == null) {
return null;
} else {
final Long longValue = Numbers.toLong(value);
if (longValue == null) {
return null;
} else {
final long number = longValue.longValue();
if (number == Long.MIN_VALUE) {
return null;
} else {
return number - 1;
}
}
}
}
@Override
public long size() {
return this.to - this.from + 1;
}
}