aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2023/lib/vec.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2024-02-16 11:07:30 +0800
committerMistivia <i@mistivia.com>2024-02-16 11:07:30 +0800
commite1a5304af2c35ff83819546953309764e24656d4 (patch)
tree8992bf2a489e4dc7f6ff3b9661aae5a50d08cab9 /advent-of-code/2023/lib/vec.c
parenta19a1b970e5dd6983be8660ef6e0f5929fb5a149 (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.c72
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++;
-}
-