#pragma once #include /* * Binary serialization primitives. * * All values are encoded little-endian. Fields are placed and read * explicitly by position — never by casting a struct to bytes. */ /* -- put: write a value into a buffer at a given byte offset -- */ void put_u8 (uint8_t *buf, uint32_t offset, uint8_t value); void put_u16(uint8_t *buf, uint32_t offset, uint16_t value); void put_u32(uint8_t *buf, uint32_t offset, uint32_t value); void put_u64(uint8_t *buf, uint32_t offset, uint64_t value); void put_i8 (uint8_t *buf, uint32_t offset, int8_t value); void put_i16(uint8_t *buf, uint32_t offset, int16_t value); void put_i32(uint8_t *buf, uint32_t offset, int32_t value); void put_i64(uint8_t *buf, uint32_t offset, int64_t value); /* -- get: read a value from a buffer at a given byte offset -- */ uint8_t get_u8 (const uint8_t *buf, uint32_t offset); uint16_t get_u16(const uint8_t *buf, uint32_t offset); uint32_t get_u32(const uint8_t *buf, uint32_t offset); uint64_t get_u64(const uint8_t *buf, uint32_t offset); int8_t get_i8 (const uint8_t *buf, uint32_t offset); int16_t get_i16(const uint8_t *buf, uint32_t offset); int32_t get_i32(const uint8_t *buf, uint32_t offset); int64_t get_i64(const uint8_t *buf, uint32_t offset);