1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-12-27 03:46:02 +00:00
TegraExplorer/source/utils/vector.c
2020-12-28 14:51:59 +01:00

55 lines
No EOL
1.2 KiB
C

#include "vector.h"
#include <string.h>
#include <mem/heap.h>
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 vecCopy(Vector_t* orig) {
Vector_t dst = newVec(orig->elemSz, orig->count);
memcpy(dst.data, orig->data, orig->count * orig->elemSz);
dst.count = orig->count;
return dst;
}