package org.apache.activemq.apollo.openwire.codec;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.nio.ByteBuffer;
byte data[] = new byte[48];
short arrayLimit;
short arrayPos;
byte bytePos;
assert arrayPos <= arrayLimit;
byte b = data[arrayPos];
boolean rc = ((b >> bytePos) & 0x01) != 0;
bytePos++;
if (bytePos >= 8) {
bytePos = 0;
arrayPos++;
}
return rc;
}
public void writeBoolean(
boolean value)
throws IOException {
if (bytePos == 0) {
arrayLimit++;
if (arrayLimit >= data.length) {
byte d[] = new byte[data.length * 2];
System.arraycopy(data, 0, d, 0, data.length);
data = d;
}
}
if (value) {
data[arrayPos] |= 0x01 << bytePos;
}
bytePos++;
if (bytePos >= 8) {
bytePos = 0;
arrayPos++;
}
}
public void marshal(DataOutput dataOut)
throws IOException {
if (arrayLimit < 64) {
dataOut.writeByte(arrayLimit);
} else if (arrayLimit < 256) {
dataOut.writeByte(0xC0);
dataOut.writeByte(arrayLimit);
} else {
dataOut.writeByte(0x80);
dataOut.writeShort(arrayLimit);
}
dataOut.write(data, 0, arrayLimit);
clear();
}
public void marshal(ByteBuffer dataOut) {
if (arrayLimit < 64) {
dataOut.put((byte)arrayLimit);
} else if (arrayLimit < 256) {
dataOut.put((byte)0xC0);
dataOut.put((byte)arrayLimit);
} else {
dataOut.put((byte)0x80);
dataOut.putShort(arrayLimit);
}
dataOut.put(data, 0, arrayLimit);
}
public void unmarshal(DataInput dataIn)
throws IOException {
arrayLimit = (short)(dataIn.readByte() & 0xFF);
if (arrayLimit == 0xC0) {
arrayLimit = (short)(dataIn.readByte() & 0xFF);
} else if (arrayLimit == 0x80) {
arrayLimit = dataIn.readShort();
}
if (data.length < arrayLimit) {
data = new byte[arrayLimit];
}
dataIn.readFully(data, 0, arrayLimit);
clear();
}
arrayPos = 0;
bytePos = 0;
}
if (arrayLimit < 64) {
return 1 + arrayLimit;
} else if (arrayLimit < 256) {
return 2 + arrayLimit;
} else {
return 3 + arrayLimit;
}
}
}