TeX/include/TeX/vector.h

42 lines
861 B
C

//---
// vector: Simple vectors that only grow
// Preprocessing is a bit ugly here, but it makes it really easy to use.
//---
#ifndef TEX_VECTOR
#define TEX_VECTOR
#include <stdint.h>
#include <stddef.h>
/* Declare three variables for every vector */
#define vector_type(type, name) \
type * name; \
short name ## _len; \
short name ## _size;
/* Trivial initialization */
#define vector_init(name) { \
name = NULL; \
name ## _len = 0; \
name ## _size = 0; \
}
/* Extension */
#define vector_extend(name) { \
if(name ## _len >= name ## _size) \
name = realloc(name, sizeof *name * \
(name ## _size += 8)); \
}
/* Append */
#define vector_append(name, value) { \
vector_extend(name); \
(name)[name ## _len++] = (value); \
}
/* Last elements */
#define vector_last(name) ((name)[name ## _len - 1])
#endif /* TEX_VECTOR */