#ifndef _VECTOR_H_
#define _VECTOR_H_
#include <stdlib.h>
#include <stdio.h>
#define VEC_NEEDS_RESIZE(vec) (((vec)->index + 1) == (vec)->size)
#define VEC_PUSH(vec, item) \
if (VEC_NEEDS_RESIZE(vec)) { \
printf("Resizing vector at %p\n", (vec)); \
(vec)->size *= 2; \
__typeof__((vec)->list) tmp = (__typeof__((vec)->list))realloc((vec)->list, (vec)->size * sizeof(item)); \
if (!tmp) { \
printf("Error resizing vector!\n"); \
exit(-1); \
} \
(vec)->list = tmp; \
} \
\
(vec)->list[(vec)->index++] = item
#define VEC_INIT(vec, items) \
(vec)->list = calloc(items, sizeof(__typeof__(*((vec)->list)))); \
(vec)->size = items; \
(vec)->index = 0
#define VEC_DESTROY(vec) \
free((vec)->list); \
(vec)->list = NULL; \
(vec)->index = (vec)->size = 0;
#endif
#include "include/vector.h"
struct int_vector_t {
int *list;
int size;
int index;
};
int main(void) {
struct int_vector_t vec;
VEC_INIT(&vec, 1);
VEC_PUSH(&vec, 98);
VEC_PUSH(&vec, 110);
printf("%d\n", vec.list[0]);
printf("%d\n", vec.list[1]);
VEC_DESTROY(&vec);
}