package mil.nga.giat.geowave.core.index.sfc.data;
import java.nio.ByteBuffer;
/**
* Concrete implementation defining a single numeric value associated with a
* space filling curve.
*
*/
public class NumericValue implements
NumericData
{
/**
*
*/
private static final long serialVersionUID = 1L;
private double value;
protected NumericValue() {}
/**
* Constructor used to create a new NumericValue object
*
* @param value
* the particular numeric value
*/
public NumericValue(
final double value ) {
this.value = value;
}
/**
*
* @return value the value of a numeric value object
*/
@Override
public double getMin() {
return value;
}
/**
*
* @return value the value of a numeric value object
*/
@Override
public double getMax() {
return value;
}
/**
*
* @return value the value of a numeric value object
*/
@Override
public double getCentroid() {
return value;
}
/**
* Determines if this object is a range or not
*/
@Override
public boolean isRange() {
return false;
}
@Override
public String toString() {
return "NumericRange [value=" + value + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(value);
result = (prime * result) + (int) (temp ^ (temp >>> 32));
return result;
}
protected static final double EPSILON = 1E-10;
@Override
public boolean equals(
final Object obj ) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final NumericValue other = (NumericValue) obj;
return (Math.abs(value - other.value) < EPSILON);
}
@Override
public byte[] toBinary() {
final ByteBuffer buf = ByteBuffer.allocate(8);
buf.putDouble(value);
return buf.array();
}
@Override
public void fromBinary(
final byte[] bytes ) {
final ByteBuffer buf = ByteBuffer.wrap(bytes);
value = buf.getDouble();
}
}