]> Dogcows Code - chaz/rasterize/blobdiff - array.c
preliminary support for obj files
[chaz/rasterize] / array.c
diff --git a/array.c b/array.c
new file mode 100644 (file)
index 0000000..76118fb
--- /dev/null
+++ b/array.c
@@ -0,0 +1,52 @@
+
+/*
+ * CS5600 University of Utah
+ * Charles McGarvey
+ * mcgarvey@eng.utah.edu
+ */
+
+#include "array.h"
+
+
+array_t* array_alloc2(size_t size, size_t capacity)
+{
+       array_t* v = mem_alloc(sizeof(array_t));
+    capacity = MAX(capacity, ARRAY_CAPACITY_MIN);
+    v->arr = mem_alloc(size * capacity);
+    v->cap = capacity;
+    v->len = 0;
+    v->siz = size;
+    return v;
+}
+
+
+void array_reserve(array_t* v, size_t s)
+{
+       assert(v && v->arr);
+       if (v->cap < s) {
+               size_t  cap = MAX(s + ARRAY_CAPACITY_DEFAULT, ARRAY_CAPACITY_MIN);
+               void*   arr = mem_realloc(v->arr, v->siz * cap);
+               v->arr = arr;
+               v->cap = cap;
+       }
+}
+
+void array_done(array_t* v)
+{
+       assert(v && v->arr);
+       if (v->len < v->cap) {
+               size_t  cap = MAX(v->len, ARRAY_CAPACITY_MIN);
+               void*   arr = mem_realloc(v->arr, v->siz * cap);
+               v->arr = arr;
+               v->cap = cap;
+       }
+}
+
+
+void array_call(const array_t* v, array_call_fn_t fn)
+{
+       array_it_t it = array_begin(v);
+       void* e;
+       while (e = array_it_next(&it)) fn(it.pos - 1, e);
+}
+
This page took 0.017566 seconds and 4 git commands to generate.