Package org.apache.cassandra.utils.vint
Class VIntCoding
- java.lang.Object
-
- org.apache.cassandra.utils.vint.VIntCoding
-
public class VIntCoding extends java.lang.Object
Borrows idea from https://developers.google.com/protocol-buffers/docs/encoding#varints
-
-
Field Summary
Fields Modifier and Type Field Description protected static io.netty.util.concurrent.FastThreadLocal<byte[]>
encodingBuffer
static int
MAX_SIZE
-
Constructor Summary
Constructors Constructor Description VIntCoding()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static int
computeUnsignedVIntSize(long value)
Compute the number of bytes that would be needed to encode an unsigned varint.static int
computeUnsignedVIntSize(java.nio.ByteBuffer input, int readerIndex)
Computes size of an unsigned vint that starts at readerIndex of the provided ByteBuf.static int
computeUnsignedVIntSize(java.nio.ByteBuffer input, int readerIndex, int readerLimit)
static int
computeVIntSize(long param)
Compute the number of bytes that would be needed to encode a varint.static long
decodeZigZag64(long n)
Decode a ZigZag-encoded 64-bit value.static int
encodeExtraBytesToRead(int extraBytesToRead)
static long
encodeZigZag64(long n)
Encode a ZigZag-encoded 64-bit value.static int
firstByteValueMask(int extraBytesToRead)
static long
getUnsignedVInt(java.nio.ByteBuffer input, int readerIndex)
Note this method is the same asreadUnsignedVInt(DataInput)
, except that we do *not* block if there are not enough bytes in the buffer to reconstruct the value.static long
getUnsignedVInt(java.nio.ByteBuffer input, int readerIndex, int readerLimit)
static int
numberOfExtraBytesToRead(int firstByte)
static long
readUnsignedVInt(java.io.DataInput input)
static long
readVInt(java.io.DataInput input)
static void
skipUnsignedVInt(DataInputPlus input)
static void
writeUnsignedVInt(long value, java.io.DataOutput output)
static void
writeUnsignedVInt(long value, java.nio.ByteBuffer output)
static void
writeVInt(long value, java.io.DataOutput output)
-
-
-
Field Detail
-
MAX_SIZE
public static final int MAX_SIZE
- See Also:
- Constant Field Values
-
encodingBuffer
protected static final io.netty.util.concurrent.FastThreadLocal<byte[]> encodingBuffer
-
-
Method Detail
-
readUnsignedVInt
public static long readUnsignedVInt(java.io.DataInput input) throws java.io.IOException
- Throws:
java.io.IOException
-
skipUnsignedVInt
public static void skipUnsignedVInt(DataInputPlus input) throws java.io.IOException
- Throws:
java.io.IOException
-
getUnsignedVInt
public static long getUnsignedVInt(java.nio.ByteBuffer input, int readerIndex)
Note this method is the same asreadUnsignedVInt(DataInput)
, except that we do *not* block if there are not enough bytes in the buffer to reconstruct the value. WARNING: this method is only safe for vints we know to be representable by a positive long value.- Returns:
- -1 if there are not enough bytes in the input to read the value; else, the vint unsigned value.
-
getUnsignedVInt
public static long getUnsignedVInt(java.nio.ByteBuffer input, int readerIndex, int readerLimit)
-
computeUnsignedVIntSize
public static int computeUnsignedVIntSize(java.nio.ByteBuffer input, int readerIndex)
Computes size of an unsigned vint that starts at readerIndex of the provided ByteBuf.- Returns:
- -1 if there are not enough bytes in the input to calculate the size; else, the vint unsigned value size in bytes.
-
computeUnsignedVIntSize
public static int computeUnsignedVIntSize(java.nio.ByteBuffer input, int readerIndex, int readerLimit)
-
readVInt
public static long readVInt(java.io.DataInput input) throws java.io.IOException
- Throws:
java.io.IOException
-
firstByteValueMask
public static int firstByteValueMask(int extraBytesToRead)
-
encodeExtraBytesToRead
public static int encodeExtraBytesToRead(int extraBytesToRead)
-
numberOfExtraBytesToRead
public static int numberOfExtraBytesToRead(int firstByte)
-
writeUnsignedVInt
@Inline public static void writeUnsignedVInt(long value, java.io.DataOutput output) throws java.io.IOException
- Throws:
java.io.IOException
-
writeUnsignedVInt
@Inline public static void writeUnsignedVInt(long value, java.nio.ByteBuffer output)
-
writeVInt
@Inline public static void writeVInt(long value, java.io.DataOutput output) throws java.io.IOException
- Throws:
java.io.IOException
-
decodeZigZag64
public static long decodeZigZag64(long n)
Decode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers into values that can be efficiently encoded with varint. (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, thus always taking 10 bytes on the wire.)- Parameters:
n
- An unsigned 64-bit integer, stored in a signed int because Java has no explicit unsigned support.- Returns:
- A signed 64-bit integer.
-
encodeZigZag64
public static long encodeZigZag64(long n)
Encode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers into values that can be efficiently encoded with varint. (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, thus always taking 10 bytes on the wire.)- Parameters:
n
- A signed 64-bit integer.- Returns:
- An unsigned 64-bit integer, stored in a signed int because Java has no explicit unsigned support.
-
computeVIntSize
public static int computeVIntSize(long param)
Compute the number of bytes that would be needed to encode a varint.
-
computeUnsignedVIntSize
public static int computeUnsignedVIntSize(long value)
Compute the number of bytes that would be needed to encode an unsigned varint.
-
-