#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) {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) {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); }