package nl.thanod.cassandra.alpha.bytes;
import java.util.UUID;
import nl.thanod.annotations.spi.ProviderFor;
@ProviderFor(ByteObjectTranslator.class)
public class ByteUUIDTranslator extends ByteObjectTranslator<UUID> {
public ByteUUIDTranslator() {
super(UUID.class);
}
@Override
public byte[] get(UUID o) {
long msb = o.getMostSignificantBits();
long lsb = o.getLeastSignificantBits();
byte[] buffer = new byte[16];
for (int i = 0; i < 8; i++)
buffer[i] = (byte) (msb >>> 8 * (7 - i));
for (int i = 8; i < 16; i++)
buffer[i] = (byte) (lsb >>> 8 * (7 - i));
return buffer;
}
@Override
public UUID get(byte[] b) {
if (b.length != 16)
throw new NumberFormatException("An UUID is always 16 bytes long, not " + b.length);
long msb = 0;
long lsb = 0;
for (int i = 0; i < 8; i++)
msb = (msb << 8) | (b[i] & 0xff);
for (int i = 8; i < 16; i++)
lsb = (lsb << 8) | (b[i] & 0xff);
return new UUID(msb, lsb);
}
}