Files
osc2025/kernel/lib/vector.c
2025-04-08 06:59:50 +08:00

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;
}