46 #error Must define a SPECVEC_TAG to use this header
49 #define SPECVEC_TYPE struct SPECVEC_TAG
52 #define SPECVEC_PASTE_(x, y) x##y
53 #define SPECVEC_PASTE(x, y) SPECVEC_PASTE_(x, y)
55 #define SPECVEC_VECTOR struct SPECVEC_PASTE(SPECVEC_TAG, _vector)
57 #define SPECVEC_FOO(suffix) SPECVEC_PASTE(SPECVEC_TAG, suffix)
70 tthis->size = tthis->size_alloc = 0;
76 if (
size > tthis->size_alloc) {
77 size_t new_size =
MAX(
size, tthis->size_alloc * 2);
80 fc_realloc(tthis->p, new_size *
sizeof(*tthis->p)));
81 tthis->size_alloc = new_size;
94 if (svindex == -1 && tthis->size > 0) {
95 return tthis->p + tthis->size - 1;
96 }
else if (svindex >= 0 &&
static_cast<size_t>(svindex) < tthis->size) {
97 return tthis->p + svindex;
108 if (from->size > 0) {
109 memcpy(to->p, from->p, from->size *
sizeof(*to->p));
125 tthis->p[tthis->size - 1] = pfoo;
140 :
static_cast<size_t>(svindex));
146 tthis->p[i] = tthis->p[i + 1];
152 #define TYPED_VECTOR_ITERATE(atype, vector, var) \
154 unsigned int myiter##var; \
156 for (myiter##var = 0; myiter##var < (vector)->size; myiter##var++) { \
157 var = &(vector)->p[myiter##var];
160 #define VECTOR_ITERATE_END \
166 #undef SPECVEC_PASTE_
168 #undef SPECVEC_VECTOR
#define fc_assert_ret(condition)
static void SPECVEC_FOO() _vector_free(SPECVEC_VECTOR *tthis)
static void SPECVEC_FOO() _vector_init(SPECVEC_VECTOR *tthis)
static void SPECVEC_FOO() _vector_remove(SPECVEC_VECTOR *tthis, const int svindex)
#define SPECVEC_FOO(suffix)
static void SPECVEC_FOO() _vector_copy(SPECVEC_VECTOR *to, const SPECVEC_VECTOR *from)
static size_t SPECVEC_FOO() _vector_size(const SPECVEC_VECTOR *tthis)
static void SPECVEC_FOO() _vector_append(SPECVEC_VECTOR *tthis, SPECVEC_TYPE const &pfoo)
static void SPECVEC_FOO() _vector_reserve(SPECVEC_VECTOR *tthis, size_t size)
static SPECVEC_TYPE *SPECVEC_FOO() _vector_get(const SPECVEC_VECTOR *tthis, int svindex)
#define fc_realloc(ptr, sz)