// Copyright © 2017 Project Golan, all rights reserved. // See COPYING for more information. #ifndef m_darray_h #define m_darray_h #define M_Vec_defn(type, name, ...) \ __VA_ARGS__ type *name##V = NULL; \ __VA_ARGS__ size_t name##C = 0, name##S = 0 #define M_Vec_decl(type, name, ...) \ __VA_ARGS__ type *name##V; \ __VA_ARGS__ size_t name##C, name##S #define M_Vec_growN(vec, n, g) \ do { \ if((vec##C) + (n) > (vec##S)) { \ (vec##S) += (n) + (g); \ (vec##V) = realloc((vec##V), sizeof(*(vec##V)) * (vec##S)); \ } \ } while(0) #define M_Vec_grow(vec, n) M_Vec_growN(vec, n, 8) #define M_Vec_next(vec) ((vec##V)[(vec##C)++]) #define M_Vec_clear(vec) \ (free((vec##V)), (vec##V) = NULL, (vec##C) = (vec##S) = 0) #endif