package com.yoghurt.crypto.transactions.shared.domain; import java.io.Serializable; import com.yoghurt.crypto.transactions.shared.util.ArrayUtil; import com.yoghurt.crypto.transactions.shared.util.NumberParseUtil; public final class VariableLengthInteger implements Serializable { private static final long serialVersionUID = 3006944545057671762L; private long value; private int byteSize; private byte[] bytes; public VariableLengthInteger() { } public VariableLengthInteger(final byte[] bytes) { this(bytes, 0); } public VariableLengthInteger(final byte[] bytes, final int pointer) { final int lengthByte = bytes[pointer] & 0xFF; if (lengthByte <= 252) { value = lengthByte; byteSize = 1; } else if (lengthByte == 253) { value = NumberParseUtil.parseLong(ArrayUtil.arrayCopy(bytes, pointer + 1, pointer + 3)); byteSize = 3; } else if (lengthByte == 254) { value = NumberParseUtil.parseLong(ArrayUtil.arrayCopy(bytes, pointer + 1, pointer + 5)); byteSize = 5; } else { // Must be 255 value = NumberParseUtil.parseLong(ArrayUtil.arrayCopy(bytes, pointer + 1, pointer + 9)); byteSize = 9; } this.bytes = ArrayUtil.arrayCopy(bytes, pointer, pointer + byteSize); } public int getByteSize() { return byteSize; } public void setByteSize(final int byteSize) { this.byteSize = byteSize; } public long getValue() { return value; } @SuppressWarnings("unused") private void setValue(final long value) { this.value = value; } public byte[] getBytes() { return bytes; } @SuppressWarnings("unused") private void setBytes(final byte[] bytes) { this.bytes = bytes; } }