vc4/asm/vec.h
2025-10-02 22:44:00 +02:00

41 lines
2.5 KiB
C

#ifndef VEC_H
#define VEC_H
#include <stddef.h>
#include <stdlib.h>
#define DEFINE_VEC(TYPENAME, FN_PREFIX, TYPE) \
\
typedef struct { \
TYPE* data; \
size_t size; \
size_t capacity; \
} TYPENAME; \
\
[[maybe_unused]] static void FN_PREFIX##_construct(TYPENAME* vec) \
{ \
*vec = (TYPENAME) {}; \
} \
\
[[maybe_unused]] static void FN_PREFIX##_destroy(TYPENAME* vec) \
{ \
if (vec->data) { \
free(vec->data); \
} \
} \
\
[[maybe_unused]] static void FN_PREFIX##_push(TYPENAME* vec, TYPE value) \
{ \
if (!vec->data || vec->capacity == 0) { \
vec->capacity = 4; \
vec->data = malloc(sizeof(TYPE) * vec->capacity); \
} else if (vec->size + 1 >= vec->capacity) { \
vec->capacity *= 2; \
vec->data = realloc(vec->data, sizeof(TYPE) * vec->capacity); \
} \
vec->data[vec->size] = value; \
vec->size += 1; \
}
#endif