#ifndef TOBI_RD_H #define TOBI_RD_H #include #include typedef struct tobi_rd { const uint8_t *data; size_t len; size_t pos; size_t base; int failed; } tobi_rd; void tobi_rd_init(tobi_rd *rd, const uint8_t *data, size_t len, size_t base); size_t tobi_rd_off(const tobi_rd *rd); size_t tobi_rd_left(const tobi_rd *rd); int tobi_rd_u8(tobi_rd *rd, uint8_t *out); int tobi_rd_peek(const tobi_rd *rd, uint8_t *out); int tobi_rd_u16(tobi_rd *rd, uint16_t *out); int tobi_rd_u32(tobi_rd *rd, uint32_t *out); int tobi_rd_u64(tobi_rd *rd, uint64_t *out); int tobi_rd_bytes(tobi_rd *rd, uint8_t *out, size_t n); int tobi_rd_skip(tobi_rd *rd, size_t n); int tobi_rd_sub(tobi_rd *rd, size_t n, tobi_rd *sub); int tobi_rd_pkg_len(tobi_rd *rd, size_t *pkg_len, size_t *encoded_len); #endif