core/encoding/varint
encoding_varint
Types
1Constants
1LEB128_MAX_BYTES
LEB128_MAX_BYTES :: 19SourceCopyright 2022 Jeroen van Rijn <nom@duclavier.com>.
Made available under Odin's license.
List of contributors:
Jeroen van Rijn: Initial implementation.
In theory we should use the bigint package. In practice, varints bigger than this indicate a corrupted file.
Instead we'll set limits on the values we'll encode/decode
18 * 7 bits = 126, which means that a possible 19th byte may at most be `0b0000_0011`.Procedures
6decode_ileb128_buffer
decode_ileb128_buffer :: proc(buf: []u8) -> (val: i128, size: int, err: Error)SourceDecode a slice of bytes encoding a signed LEB128 integer into value and number of bytes used. Returns size == 0 for an invalid value, empty slice, or a varint > 18 bytes.
decode_ileb128_byte
decode_ileb128_byte :: proc(input: u8, offset: int, accumulator: i128) -> (val: i128, size: int, err: Error)SourceDecode a a signed LEB128 integer into value and number of bytes used, one byte at a time. Returns size == 0 for an invalid value, empty slice, or a varint > 18 bytes.
decode_uleb128_buffer
decode_uleb128_buffer :: proc(buf: []u8) -> (val: u128, size: int, err: Error)SourceDecode a slice of bytes encoding an unsigned LEB128 integer into value and number of bytes used. Returns size == 0 for an invalid value, empty slice, or a varint > 18 bytes.
decode_uleb128_byte
decode_uleb128_byte :: proc(input: u8, offset: int, accumulator: u128) -> (val: u128, size: int, err: Error)SourceDecodes an unsigned LEB128 integer into value a byte at a time. Returns .None when decoded properly, .Value_Too_Large when they value exceeds the limits of a u128, and .Buffer_Too_Small when it's not yet fully decoded.
encode_ileb128
encode_ileb128 :: proc(buf: []u8, val: i128) -> (size: int, err: Error)SourceEncode val into buf as a signed LEB128 encoded series of bytes. buf must be appropriately sized.
encode_uleb128
encode_uleb128 :: proc(buf: []u8, val: u128) -> (size: int, err: Error)SourceEncode val into buf as an unsigned LEB128 encoded series of bytes. buf must be appropriately sized.