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