package mil.nga.giat.geowave.core.index;
import java.nio.ByteBuffer;
import java.util.Arrays;
public class CoordinateRange implements
Persistable
{
private long minCoordinate;
private long maxCoordinate;
private byte[] binId;
protected CoordinateRange() {}
public CoordinateRange(
final long minCoordinate,
final long maxCoordinate,
final byte[] binId ) {
this.minCoordinate = minCoordinate;
this.maxCoordinate = maxCoordinate;
this.binId = binId;
}
public long getMinCoordinate() {
return minCoordinate;
}
public long getMaxCoordinate() {
return maxCoordinate;
}
public byte[] getBinId() {
return binId;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = (prime * result) + Arrays.hashCode(binId);
result = (prime * result) + (int) (maxCoordinate ^ (maxCoordinate >>> 32));
result = (prime * result) + (int) (minCoordinate ^ (minCoordinate >>> 32));
return result;
}
@Override
public boolean equals(
final Object obj ) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CoordinateRange other = (CoordinateRange) obj;
if (!Arrays.equals(
binId,
other.binId)) {
return false;
}
if (maxCoordinate != other.maxCoordinate) {
return false;
}
if (minCoordinate != other.minCoordinate) {
return false;
}
return true;
}
@Override
public byte[] toBinary() {
final ByteBuffer buf = ByteBuffer.allocate(16 + (binId == null ? 0 : binId.length));
buf.putLong(minCoordinate);
buf.putLong(maxCoordinate);
if (binId != null) {
buf.put(binId);
}
return buf.array();
}
@Override
public void fromBinary(
final byte[] bytes ) {
final ByteBuffer buf = ByteBuffer.wrap(bytes);
minCoordinate = buf.getLong();
maxCoordinate = buf.getLong();
if (bytes.length > 16) {
binId = new byte[bytes.length - 16];
buf.get(binId);
}
else {
binId = null;
}
}
}