utils.c (1935B)
1 #include "libriot/utils.h" 2 3 #define READ_BYTES(stream, type, out) \ 4 do { \ 5 type _tmp = 0; \ 6 u8 buf; \ 7 for (u64 i = 0; i < sizeof(type); i++) { \ 8 if (!mem_stream_consume(stream, &buf, 1)) return false; \ 9 _tmp |= ((type)buf << (i * 8)); \ 10 } \ 11 *out = _tmp; \ 12 } while (0); 13 14 #define MAKE_READ_FN(name, type) \ 15 b32 name(struct mem_stream *self, type *out) { \ 16 assert(self); \ 17 assert(out); \ 18 READ_BYTES(self, type, out) \ 19 return true; \ 20 } 21 22 MAKE_READ_FN(riot_mem_stream_read_chr8, char) 23 MAKE_READ_FN(riot_mem_stream_read_b8, b8) 24 MAKE_READ_FN(riot_mem_stream_read_s8, s8) 25 MAKE_READ_FN(riot_mem_stream_read_s16, s16) 26 MAKE_READ_FN(riot_mem_stream_read_s32, s32) 27 MAKE_READ_FN(riot_mem_stream_read_s64, s64) 28 MAKE_READ_FN(riot_mem_stream_read_u8, u8) 29 MAKE_READ_FN(riot_mem_stream_read_u16, u16) 30 MAKE_READ_FN(riot_mem_stream_read_u32, u32) 31 MAKE_READ_FN(riot_mem_stream_read_u64, u64) 32 MAKE_READ_FN(riot_mem_stream_read_fnv1a_u32, fnv1a_u32) 33 MAKE_READ_FN(riot_mem_stream_read_xxh64_u64, xxh64_u64) 34 35 #define WRITE_BYTES(stream, type, val) \ 36 do { \ 37 u8 buf; \ 38 for (u64 i = 0; i < sizeof(type); i++) { \ 39 buf = ((val >> (i * 8)) & 0xff); \ 40 if (!mem_stream_push(stream, &buf, 1)) return false; \ 41 } \ 42 } while (0); 43 44 #define MAKE_WRITE_FN(name, type) \ 45 b32 name(struct mem_stream *self, type val) { \ 46 assert(self); \ 47 WRITE_BYTES(self, type, val) \ 48 return true; \ 49 } 50 51 MAKE_WRITE_FN(riot_mem_stream_write_chr8, char) 52 MAKE_WRITE_FN(riot_mem_stream_write_b8, b8) 53 MAKE_WRITE_FN(riot_mem_stream_write_s8, s8) 54 MAKE_WRITE_FN(riot_mem_stream_write_s16, s16) 55 MAKE_WRITE_FN(riot_mem_stream_write_s32, s32) 56 MAKE_WRITE_FN(riot_mem_stream_write_s64, s64) 57 MAKE_WRITE_FN(riot_mem_stream_write_u8, u8) 58 MAKE_WRITE_FN(riot_mem_stream_write_u16, u16) 59 MAKE_WRITE_FN(riot_mem_stream_write_u32, u32) 60 MAKE_WRITE_FN(riot_mem_stream_write_u64, u64) 61 MAKE_WRITE_FN(riot_mem_stream_write_fnv1a_u32, fnv1a_u32) 62 MAKE_WRITE_FN(riot_mem_stream_write_xxh64_u64, xxh64_u64)