brzeszczot

brzeszczot.git
git clone git://git.lenczewski.org/brzeszczot.git
Log | Files | Refs

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)