package com.netifera.platform.net.packets.util; // FIXME check buflen before pack // else java.lang.ArrayIndexOutOfBoundsException at FieldPacker.bufferPack() @Deprecated // not used: remove from codebase? public class FieldPacker { private byte[] dataBuffer; private int bufferLength; private int baseOffset; private int current; static public void bufferPack16(byte[] buffer, int offset, int value) { buffer[offset++] = (byte)(value >> 8); buffer[offset] = (byte)(value); } static public void bufferPack32(byte[] buffer, int offset, int value) { buffer[offset++] = (byte)(value >> 24); buffer[offset++] = (byte)(value >> 16); buffer[offset++] = (byte)(value >> 8); buffer[offset++] = (byte)(value); } static public int bufferUnpack16(byte[] buffer, int offset) { int value = 0; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset] & 0xFF); return value; } static public int bufferUnpack32(byte[] buffer, int offset) { int value = 0; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset] & 0xFF); return value; } static public long bufferUnpack64(byte[] buffer, int offset) { long value = 0; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset++] & 0xFF); value <<= 8; value |= (buffer[offset] & 0xFF); return value; } public void initialize(byte[] buffer, int offset, int length) { this.dataBuffer = buffer.clone(); this.bufferLength = length; this.baseOffset = offset; this.current = 0; } public void pack16(int value) { bufferPack16(dataBuffer, baseOffset + current, value); current += 2; } public void pack32(int value) { bufferPack32(dataBuffer, baseOffset + current, value); current += 4; } public void pack8(int value) { dataBuffer[baseOffset + current++] = (byte)(value); } void packBytes(byte[] data, int offset, int length) { System.arraycopy(data, offset, dataBuffer, baseOffset + current, length); current += length; } public void packBytes(byte[] data) { packBytes(data, 0, data.length); } public long unpack64() { long value = bufferUnpack64(dataBuffer, baseOffset + current); current += 8; return value; } public int unpack32() { int value = bufferUnpack32(dataBuffer, baseOffset + current); current += 4; return value; } public int unpack16() { int value = bufferUnpack16(dataBuffer, baseOffset + current); current += 2; return value; } public int unpack8() { return (dataBuffer[baseOffset + current++] & 0xFF); } public void unpackBytes(byte[] buffer, int length) { unpackBytes(buffer, 0, length); } void unpackBytes(byte[] buffer, int offset, int length) { System.arraycopy(dataBuffer, baseOffset + current, buffer, offset, length); current += length; } /** Current offset from base offset */ public int getCurrentOffset() { return current; } public int getSpaceLeft() { return bufferLength - (baseOffset + current); } }