//has to be in util so that beta sleep records can still be used.
package com.androsz.util;
import java.io.Serializable;
public class PointD implements Serializable {
private static final long serialVersionUID = -7526147553632397385L;
public static PointD fromByteArray(final byte[] data) {
final byte[] temp = new byte[8];
double x;
double y;
System.arraycopy(data, 0, temp, 0, 8);
x = toDouble(temp);
System.arraycopy(data, 8, temp, 0, 8);
y = toDouble(temp);
return new PointD(x, y);
}
private static byte[] toByta(final double data) {
return toByta(Double.doubleToRawLongBits(data));
}
private static byte[] toByta(final long data) {
return new byte[] { (byte) (data >> 56 & 0xff),
(byte) (data >> 48 & 0xff), (byte) (data >> 40 & 0xff),
(byte) (data >> 32 & 0xff), (byte) (data >> 24 & 0xff),
(byte) (data >> 16 & 0xff), (byte) (data >> 8 & 0xff),
(byte) (data >> 0 & 0xff), };
}
public static byte[] toByteArray(final PointD point) {
final byte[] bytes = new byte[16];
System.arraycopy(toByta(point.x), 0, bytes, 0, 8);
System.arraycopy(toByta(point.y), 0, bytes, 8, 8);
return bytes;
}
private static double toDouble(final byte[] data) {
if (data == null || data.length != 8)
return 0x0;
// ---------- simple:
return Double.longBitsToDouble(toLong(data));
}
private static long toLong(final byte[] data) {
if (data == null || data.length != 8)
return 0x0;
// ----------
return (long) (0xff & data[0]) << 56 | (long) (0xff & data[1]) << 48
| (long) (0xff & data[2]) << 40 | (long) (0xff & data[3]) << 32
| (long) (0xff & data[4]) << 24 | (long) (0xff & data[5]) << 16
| (long) (0xff & data[6]) << 8 | (long) (0xff & data[7]) << 0;
}
public double x;
public double y;
public PointD(final double x, final double y) {
this.x = x;
this.y = y;
}
}