From 81a0df76cbcd46799134e688dabb8dc870da5351 Mon Sep 17 00:00:00 2001 From: Mustafa Quraish Date: Sat, 5 Feb 2022 01:38:34 -0500 Subject: Add support for some more binary ops: |, &, ^ --- std/vector.cup | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 std/vector.cup (limited to 'std/vector.cup') diff --git a/std/vector.cup b/std/vector.cup new file mode 100644 index 0000000..eb76155 --- /dev/null +++ b/std/vector.cup @@ -0,0 +1,40 @@ +import "std/common.cup" + +struct Vector { + size: int; + capacity: int; + data: void**; +}; + +fn vector_new_sized(capacity: int): Vector* { + let t: Vector* = malloc(sizeof(Vector)); + t.size = 0; + t.capacity = capacity; + t.data = malloc(capacity * sizeof(void*)); + return t; +} + +fn vector_new(): Vector* { + const initial_default_capacity = 4; + return vector_new_sized(initial_default_capacity); +} + +fn vector_push(vec: Vector*, item: void*) { + if (vec.size == vec.capacity) { + let new_capacity = vec.capacity * 2; + let new_data = malloc(new_capacity * sizeof(void*)); + memcpy(new_data, vec.data, vec.capacity * sizeof(void*)); + vec.data = new_data; + vec.capacity = new_capacity; + } + vec.data[vec.size] = item; + vec.size = vec.size + 1; +} + +fn vector_pop(vec: Vector*): void* { + if (vec.size == 0) + die("Vector is empty, nothing to pop."); + + vec.size = vec.size - 1; + return vec.data[vec.size]; +} \ No newline at end of file -- cgit v1.2.3