omi-eikyo/src/m_darray.h

30 lines
779 B
C

// 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