varint header
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
// varint.h
|
||||||
|
// QUIC variable-length integers, according to RFC 9000 Section 16.
|
||||||
|
//
|
||||||
|
// The top two bits of the first byte indicate the length of the integer in bytes:
|
||||||
|
// 00: 1 byte (6 bits of data)
|
||||||
|
// 01: 2 bytes (14 bits of data)
|
||||||
|
// 10: 4 bytes (30 bits of data)
|
||||||
|
// 11: 8 bytes (62 bits of data)
|
||||||
|
// The remaining bits of the first byte, along with the subsequent bytes, contain the integer value in big-endian order.
|
||||||
|
// Values above BRAVAIS_VARINT_MAX are not able to be incoded.
|
||||||
|
|
||||||
|
#ifndef BRAVAIS_VARINT_H
|
||||||
|
#define BRAVAIS_VARINT_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "util/buf.h"
|
||||||
|
|
||||||
|
#define BRAVAIS_VARINT_MAX UINT64_C(0x3FFFFFFFFFFFFFFF)
|
||||||
|
|
||||||
|
// Bytes needed to encode *val*, or 0 if *val* is too large to encode (>BRAVAIS_VARINT_MAX).
|
||||||
|
size_t bravais_varint_len(uint64_t val);
|
||||||
|
|
||||||
|
uint64_t bravais_rcur_varint(bravais_rcur_buf_t* buf);
|
||||||
|
|
||||||
|
// Always uses the shortest encoding. Fails the cursor if value is too large.
|
||||||
|
void bravais_wcur_varint(bravais_wcur_t* cur, uint64_t val);
|
||||||
|
|
||||||
|
#endif // BRAVAIS_VARINT_H
|
||||||
Reference in New Issue
Block a user