39 lines
845 B
C
39 lines
845 B
C
#include <errcode.h>
|
|
#include <uart.h>
|
|
#include <vector.h>
|
|
#include <utils.h>
|
|
#include <kmalloc.h>
|
|
#include <string.h>
|
|
|
|
vector_t *make_vector(size_t size)
|
|
{
|
|
vector_t *ret = kmalloc(sizeof(vector_t));
|
|
ret->size = size;
|
|
uint32_t msb = msb32(size);
|
|
ret->cap = (msb == size) ? size : (msb << 1);
|
|
ret->cap = MAX(ret->cap, 4);
|
|
ret->data = kmalloc(ret->cap * sizeof(uint64_t));
|
|
memzero(ret->data, ret->data + ret->cap);
|
|
|
|
return ret;
|
|
}
|
|
|
|
uint64_t vec_at(const vector_t *vec, size_t idx)
|
|
{
|
|
if (idx >= vec->size)
|
|
exit(ERR_OUT_OF_BOUND);
|
|
|
|
return vec->data[idx];
|
|
}
|
|
|
|
void vec_push(vector_t *vec, uint64_t val)
|
|
{
|
|
if (vec->size == vec->cap) {
|
|
uint64_t *old = vec->data;
|
|
vec->data = kmalloc((vec->cap <<= 1) * sizeof(uint64_t));
|
|
memcpy(vec->data, old, vec->size * sizeof(uint64_t));
|
|
}
|
|
|
|
vec->data[vec->size++] = val;
|
|
}
|