aboutsummaryrefslogtreecommitdiff
path: root/src/vector.c
diff options
context:
space:
mode:
authorMikkel Thestrup <mithe24@student.sdu.dk>2025-12-01 11:00:18 +0100
committerMikkel Thestrup <mithe24@student.sdu.dk>2025-12-01 11:50:22 +0100
commite50e38edbc0df8e2ef46fcdc8498e29d4422afb7 (patch)
treec570a9d4eac96f1acdce96ec76148f6aa90bd8d4 /src/vector.c
parentf1021bf0aa79d880fad4073635d4561d67152a9d (diff)
downloadcycle-detector-e50e38edbc0df8e2ef46fcdc8498e29d4422afb7.tar.gz
cycle-detector-e50e38edbc0df8e2ef46fcdc8498e29d4422afb7.zip
Added vector implementation
Diffstat (limited to '')
-rw-r--r--src/vector.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/vector.c b/src/vector.c
new file mode 100644
index 0000000..ca58468
--- /dev/null
+++ b/src/vector.c
@@ -0,0 +1,68 @@
+#include "vector.h"
+#include <stdlib.h>
+
+static void vector_resize(Vector *v, size_t new_capacity);
+
+Vector *vector_new(void) {
+ Vector *v = (Vector *)malloc(sizeof(Vector));
+ if (!v)
+ return NULL;
+
+ v->data = (void **)malloc(INITAL_CAPACITY * sizeof(void *));
+ if (!v->data) {
+ free(v);
+ return NULL;
+ }
+
+ v->size = 0;
+ v->capacity = INITAL_CAPACITY;
+ return v;
+}
+
+void vector_delete(Vector *v) {
+ free(v->data);
+ free(v);
+}
+
+void vector_push(Vector *v, void *element) {
+ if (v->size >= v->capacity)
+ vector_resize(v, v->capacity * GROWTH_FACTOR);
+ v->data[++v->size] = element;
+}
+
+void *vector_pop(Vector *v) {
+ if (!v->size) return NULL;
+ return v->data[--v->size];
+}
+
+void *vector_get(Vector *v, size_t index) {
+ if (index >= v->size)
+ return NULL;
+ return v->data[index];
+}
+
+void vector_set(Vector *v, size_t index, void *element) {
+ if (index >= v->size)
+ return;
+ v->data[index] = element;
+}
+
+size_t vector_size(Vector *v) {
+ return v->size;
+}
+
+int vector_is_empty(Vector *v) {
+ return v->size == 0;
+}
+
+void vector_clear(Vector *v) {
+ v->size = 0;
+}
+
+static void vector_resize(Vector *v, size_t new_capacity) {
+ void **new_data = (void **)realloc(v->data, new_capacity * sizeof(void *));
+ if (new_data) {
+ v->data = new_data;
+ v->capacity = new_capacity;
+ }
+}