Start of rewrite
Based on lockpick_rcm 1.9.0
This commit is contained in:
48
source/utils/vector.c
Normal file
48
source/utils/vector.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user