6#ifndef __CWIST_PROTOBUF_H__
7#define __CWIST_PROTOBUF_H__
25#define CWIST_PB_MAX_FIELD_NUMBER 536870911u
65static inline uint32_t cwist_pb_load32_le(
const uint8_t *p) {
66 return (uint32_t)p[0] | ((uint32_t)p[1] << 8) | ((uint32_t)p[2] << 16) | ((uint32_t)p[3] << 24);
69static inline uint64_t cwist_pb_load64_le(
const uint8_t *p) {
70 return (uint64_t)cwist_pb_load32_le(p) | ((uint64_t)cwist_pb_load32_le(p + 4) << 32);
73static inline uint32_t cwist_pb_float_bits(
float value) {
75 memcpy(&bits, &value,
sizeof(bits));
79static inline uint64_t cwist_pb_double_bits(
double value) {
81 memcpy(&bits, &value,
sizeof(bits));
85static inline float cwist_pb_load_float(
const uint8_t *p) {
86 uint32_t bits = cwist_pb_load32_le(p);
88 memcpy(&value, &bits,
sizeof(value));
92static inline double cwist_pb_load_double(
const uint8_t *p) {
93 uint64_t bits = cwist_pb_load64_le(p);
95 memcpy(&value, &bits,
sizeof(value));
int cwist_pb_write_fixed64_field(cwist_pb_writer *w, uint32_t field_number, uint64_t value)
Write a fixed64 field (key plus 8 little-endian bytes).
uint64_t cwist_pb_zigzag_encode(int64_t value)
ZigZag-encode a signed 64-bit value for sint fields.
int cwist_pb_write_double_field(cwist_pb_writer *w, uint32_t field_number, double value)
Write a double field by reinterpreting it as fixed64 bits.
void cwist_pb_reader_init(cwist_pb_reader *r, const void *data, size_t len)
Initialize a reader over a caller-owned buffer.
int cwist_pb_write_raw64(cwist_pb_writer *w, uint64_t value)
Append a 64-bit value in little-endian order (no key written).
int cwist_pb_write_uint64_field(cwist_pb_writer *w, uint32_t field_number, uint64_t value)
Write a uint64 field as a varint.
int cwist_pb_write_float_field(cwist_pb_writer *w, uint32_t field_number, float value)
Write a float field by reinterpreting it as fixed32 bits.
int cwist_pb_writer_reserve(cwist_pb_writer *w, size_t extra)
Ensure the writer buffer has room for extra more bytes.
enum cwist_pb_wire_type cwist_pb_wire_type_t
void cwist_pb_writer_free(cwist_pb_writer *w)
Release the buffer owned by a Protobuf writer.
int cwist_pb_read_varint(cwist_pb_reader *r, uint64_t *out)
Read a base-128 varint, advancing the reader position.
void cwist_pb_writer_init(cwist_pb_writer *w)
Initialize a Protobuf writer to an empty buffer.
int cwist_pb_write_int64_field(cwist_pb_writer *w, uint32_t field_number, int64_t value)
Write an int64 field; negative values are encoded as ten-byte varints.
int cwist_pb_write_fixed32_field(cwist_pb_writer *w, uint32_t field_number, uint32_t value)
Write a fixed32 field (key plus 4 little-endian bytes).
int cwist_pb_read_field(cwist_pb_reader *r, cwist_pb_field *field)
Read the next field key and payload from the reader.
int cwist_pb_write_raw32(cwist_pb_writer *w, uint32_t value)
Append a 32-bit value in little-endian order (no key written).
int cwist_pb_skip_field(cwist_pb_reader *r, const cwist_pb_field *field)
Validate a parsed field descriptor.
int cwist_pb_write_bytes_field(cwist_pb_writer *w, uint32_t field_number, const void *data, size_t len)
Write a length-delimited bytes field (key, length varint, raw bytes).
int cwist_pb_write_bool_field(cwist_pb_writer *w, uint32_t field_number, int value)
Write a bool field as a 0/1 varint.
int cwist_pb_write_varint(cwist_pb_writer *w, uint64_t value)
Append a base-128 varint to the writer buffer.
int cwist_pb_write_string_field(cwist_pb_writer *w, uint32_t field_number, const char *value)
Write a string field (length-delimited, excluding the NUL terminator).
int cwist_pb_write_key(cwist_pb_writer *w, uint32_t field_number, cwist_pb_wire_type_t wire_type)
Write a field key (field number and wire type) as a varint.
int64_t cwist_pb_zigzag_decode(uint64_t value)
ZigZag-decode an unsigned 64-bit value back to a signed value.
cwist_pb_wire_type_t wire_type