2017-09-20 08:42:57 -07:00
|
|
|
// Copyright © 2017 Project Golan, all rights reserved.
|
|
|
|
#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)
|
|
|
|
|
2017-09-21 11:29:03 -07:00
|
|
|
#define M_Vec_next(vec) ((vec##V)[(vec##C)++])
|
|
|
|
|
2017-09-22 08:37:31 -07:00
|
|
|
#define M_Vec_clear(vec) \
|
|
|
|
(free((vec##V)), (vec##V) = NULL, (vec##C) = (vec##S) = 0)
|
|
|
|
|
2017-09-20 08:42:57 -07:00
|
|
|
#endif
|