mirror of
https://github.com/suchmememanyskill/TegraExplorer.git
synced 2024-11-26 13:52:06 +00:00
d6c4204027
Based on lockpick_rcm 1.9.0
48 lines
No EOL
1,016 B
C
48 lines
No EOL
1,016 B
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;
|
|
} |