hw2 done
This commit is contained in:
39
lib/vector.c
Normal file
39
lib/vector.c
Normal file
@@ -0,0 +1,39 @@
|
||||
#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_VECTOR_OOR);
|
||||
|
||||
return vec->data[idx];
|
||||
}
|
||||
|
||||
vector_t *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;
|
||||
return vec;
|
||||
}
|
||||
Reference in New Issue
Block a user