#pragma once #include "utils.h" #define WAYC_VEC_INITIAL 4 #define WAYC_VEC_GROWTH 2 struct raw_vec_s { u8* ptr; usize size; usize len, cap; }; #define WAYC_RAW_VEC_INIT(size) raw_vec_s{nullptr, size, 0, 0} void wayc_raw_vec_push(raw_vec_s* vec, const u8* at); bool wayc_raw_vec_pop(raw_vec_s* vec, u8* out); void wayc_raw_vec_deinit(raw_vec_s* vec); template struct vec_s { raw_vec_s raw; }; #define WAYC_VEC_INIT(type) \ vec_s { WAYC_RAW_VEC_INIT(sizeof(type)) } template static inline void wayc_vec_push(vec_s* vec, const T* at) { wayc_raw_vec_push(&vec->raw, (u8*)at); } template static inline bool wayc_vec_pop(vec_s* vec, T* out) { return wayc_raw_vec_pop(&vec->raw, (u8*)out); } template static inline void wayc_vec_deinit(vec_s* vec) { wayc_raw_vec_deinit(&vec->raw); }