#include "vector.h" #include #include Vector_t newVec(u32 typesz, u32 preallocate) { Vector_t res = { .data = calloc(preallocate, typesz), .capacity = preallocate * typesz, .count = 0, .elemSz = typesz }; // check .data != null; return res; } Vector_t vecFromArray(void* array, u32 count, u32 typesz) { Vector_t res = { .data = array, .capacity = count * typesz, .count = count, .elemSz = typesz }; return res; } bool vecAdd(Vector_t* v, void* elem, u32 sz) { if (!v || !elem || v->elemSz != sz) return false; u32 usedbytes = v->count * sz; if (usedbytes >= v->capacity) { v->capacity *= 2; void *buff = malloc(v->capacity); if (!buff) return false; memcpy(buff, v->data, v->capacity / 2); free(v->data); v->data = buff; } memcpy((char*)v->data + usedbytes, elem, sz); v->count++; return true; } Vector_t vecCopyOffset(Vector_t* orig, u32 offset) { Vector_t dst = newVec(orig->elemSz, orig->count - offset); memcpy(dst.data, ((u8*)orig->data + orig->elemSz * offset), (orig->count - offset) * orig->elemSz); dst.count = orig->count - offset; return dst; } Vector_t vecCopy(Vector_t* orig) { return vecCopyOffset(orig, 0); }