diff options
| author | Mistivia <i@mistivia.com> | 2024-02-16 11:07:30 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2024-02-16 11:07:30 +0800 |
| commit | e1a5304af2c35ff83819546953309764e24656d4 (patch) | |
| tree | 8992bf2a489e4dc7f6ff3b9661aae5a50d08cab9 /advent-of-code/2023/lib/vec.c | |
| parent | a19a1b970e5dd6983be8660ef6e0f5929fb5a149 (diff) | |
refactor from c to racket
Diffstat (limited to 'advent-of-code/2023/lib/vec.c')
| -rw-r--r-- | advent-of-code/2023/lib/vec.c | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/advent-of-code/2023/lib/vec.c b/advent-of-code/2023/lib/vec.c deleted file mode 100644 index c3d8a0a..0000000 --- a/advent-of-code/2023/lib/vec.c +++ /dev/null @@ -1,72 +0,0 @@ -#include "vec.h" - -#include <string.h> -#include "stdlib.h" - -struct vec { - size_t length; - size_t capacity; - void** buf; -}; - -static void vec_enlarge(struct vec* self) { - self->buf = realloc(self->buf, self->capacity * sizeof(void*) * 2); - self->capacity = self->capacity * 2; -} - -void *new_vec() { - struct vec* vec = malloc(sizeof(struct vec)); - vec->length = 0; - vec->capacity = 16; - vec->buf = malloc(16 * sizeof(void*)); - return vec; -} - -void vec_push_back(void *self_, void* obj) { - struct vec *self = self_; - if (self->length == self->capacity) vec_enlarge(self); - self->buf[self->length] = obj; - self->length++; -} - -void* vec_get(void *self_, size_t n) { - struct vec *self = self_; - if (n < 0 || n >= self->length) return NULL; - return self->buf[n]; -} - - -void vec_erase(void *self_, size_t n) { - struct vec *self = self_; - if (self->length <= n) { - return; - } - memmove(self->buf + n, self->buf + n + 1, (self->length - n - 1) * sizeof(void*)); - self->length--; -} - -size_t vec_size(void *self_) { - struct vec *self = self_; - return self->length; -} - -void vec_reserve(void *self_, size_t n) { - struct vec *self = self_; - if (n <= self->capacity) { - return; - } - self->buf = malloc(sizeof(void*) * n); - self->capacity = n; -} - -void vec_insert(void *self_, size_t pos, void *obj) { - struct vec *self = self_; - if (self->length == self->capacity) { - vec_enlarge(self); - } - if (pos > self->length || pos < 0) return; - memmove(self->buf + pos + 1, self->buf + pos, sizeof(void*) * (self->length - pos)); - self->buf[pos] = obj; - self->length++; -} - |
