package net.sourceforge.pain.db;
/**
* User: fmike Date: 04.03.2003 Time: 20:32:43
Class for packing/unpacking image
*/
final class DbPacker {
static short unpack2(final byte[] arr, final int offs) {
return (short) ((arr[offs] << 8) | (arr[offs + 1] & 0xFF));
}
static int unpack4(final byte[] arr, final int offs) {
return (arr[offs] << 24) | ((arr[offs + 1] & 0xFF) << 16)
| ((arr[offs + 2] & 0xFF) << 8) | (arr[offs + 3] & 0xFF);
}
static long unpack8(final byte[] arr, final int offs) {
return ((long) unpack4(arr, offs) << 32)
| (unpack4(arr, offs + 4) & 0xFFFFFFFFL);
}
static void pack2(final byte[] arr, final int offs, final short val) {
arr[offs] = (byte) (val >> 8);
arr[offs + 1] = (byte) val;
}
static void pack4(final byte[] arr, final int offs, final int val) {
arr[offs] = (byte) (val >> 24);
arr[offs + 1] = (byte) (val >> 16);
arr[offs + 2] = (byte) (val >> 8);
arr[offs + 3] = (byte) val;
}
static void pack8(final byte[] arr, final int offs, final long val) {
pack4(arr, offs, (int) (val >> 32));
pack4(arr, offs + 4, (int) val);
}
static byte[] intArrayToBytes(final int[] array) {
final int len = array.length;
final byte[] bar = new byte[len * 4];
for (int i = 0; i < len; i++) {
pack4(bar, i * 4, array[i]);
}
return bar;
}
static byte[] charArrayToBytes(final char[] array) {
final int len = array.length;
final byte[] bar = new byte[len * 2];
for (int i = 0; i < len; i++) {
pack2(bar, i * 2, (short)array[i]);
}
return bar;
}
static byte[] shortArrayToBytes(final short[] array) {
final int len = array.length;
final byte[] bar = new byte[len * 2];
for (int i = 0; i < len; i++) {
pack2(bar, i * 2, array[i]);
}
return bar;
}
static byte[] longArrayToBytes(final long[] array) {
final int len = array.length;
final byte[] bar = new byte[len * 8];
for (int i = 0; i < len; i++) {
pack8(bar, i * 8, array[i]);
}
return bar;
}
static byte[] floatArrayToBytes(final float[] array) {
final int len = array.length;
final byte[] bar = new byte[len * 4];
for (int i = 0; i < len; i++) {
pack4(bar, i * 4, Float.floatToIntBits(array[i]));
}
return bar;
}
static byte[] floatArrayToBytes(final double[] array) {
final int len = array.length;
final byte[] bar = new byte[len * 8];
for (int i = 0; i < len; i++) {
pack8(bar, i * 8, Double.doubleToLongBits((array[i])));
}
return bar;
}
static byte[] booleanArrayToBytes(final boolean[] array) {
final int len = array.length;
final byte[] bar = new byte[len];
for (int i = 0; i < len; i++) {
bar[i] = (byte) (array[i] ? 1 : 0);
}
return bar;
}
}