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