/
codebase/src/net/sourceforge/pain/admin/console/command/
codebase/src/net/sourceforge/pain/data/role/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/util/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
mudlibs/tinylib/
mudlibs/tinylib/area/
mudlibs/tinylib/etc/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/prototype/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/data/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/affect/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/deploy/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/event/guitool/event/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/fn/util/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/logic/trigger/impl/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/command/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/reset/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/shutdown/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/plugin/social/
mudlibs/tinylib/src/net/sourceforge/pain/tinylib/util/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
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;
	}

}