package org.infinispan.server.core.transport;
import io.netty.buffer.ByteBuf;
/**
* Utilities to read from a {@link ByteBuf}
*
* @author wburns
* @since 9.0
*/
public class ExtendedByteBufJava {
private ExtendedByteBufJava() {
}
public static long readUnsignedMaybeLong(ByteBuf buf) {
if (buf.readableBytes() < 8) {
buf.resetReaderIndex();
return Long.MIN_VALUE;
}
return buf.readLong();
}
public static long readMaybeVLong(ByteBuf buf) {
if (buf.readableBytes() > 0) {
byte b = buf.readByte();
long i = b & 0x7F;
for (int shift = 7; (b & 0x80) != 0; shift += 7) {
if (buf.readableBytes() == 0) {
buf.resetReaderIndex();
return Long.MIN_VALUE;
}
b = buf.readByte();
i |= (b & 0x7FL) << shift;
}
return i;
} else {
buf.resetReaderIndex();
return Long.MIN_VALUE;
}
}
public static int readMaybeVInt(ByteBuf buf) {
if (buf.readableBytes() > 0) {
byte b = buf.readByte();
int i = b & 0x7F;
for (int shift = 7; (b & 0x80) != 0; shift += 7) {
if (buf.readableBytes() == 0) {
buf.resetReaderIndex();
return Integer.MIN_VALUE;
}
b = buf.readByte();
i |= (b & 0x7FL) << shift;
}
return i;
} else {
buf.resetReaderIndex();
return Integer.MIN_VALUE;
}
}
public static byte[] readMaybeRangedBytes(ByteBuf bf) {
int length = readMaybeVInt(bf);
if (length == Integer.MIN_VALUE) {
return null;
}
return readMaybeRangedBytes(bf, length);
}
public static byte[] readMaybeRangedBytes(ByteBuf bf, int length) {
if (bf.readableBytes() < length) {
bf.resetReaderIndex();
return null;
} else {
byte[] bytes = new byte[length];
bf.readBytes(bytes);
return bytes;
}
}
}