]> git.lizzy.rs Git - nothing.git/commitdiff
Make Dynarray fixed
authorrexim <reximkut@gmail.com>
Sun, 22 Dec 2019 19:03:32 +0000 (02:03 +0700)
committerrexim <reximkut@gmail.com>
Sat, 4 Jan 2020 17:08:51 +0000 (00:08 +0700)
src/dynarray.c
src/dynarray.h

index f6a7f8e51329fe657b933ae6f9c352c8315adc32..214e4d096326bbb1ae672624bb8f9b97bbf17d5f 100644 (file)
@@ -7,8 +7,6 @@
 #include "system/nth_alloc.h"
 #include "dynarray.h"
 
-#define DYNARRAY_INIT_CAPACITY 8
-
 void *dynarray_pointer_at(const Dynarray *dynarray, size_t index)
 {
     trace_assert(index < dynarray->count);
@@ -21,34 +19,11 @@ void dynarray_clear(Dynarray *dynarray)
     dynarray->count = 0;
 }
 
-static
-int dynarray_grow(Dynarray *dynarray)
-{
-    if (dynarray->count < dynarray->capacity) {
-        return 0;
-    }
-
-    if (dynarray->capacity == 0) {
-        dynarray->capacity = DYNARRAY_INIT_CAPACITY;
-    } else {
-        dynarray->capacity *= 2;
-    }
-
-    dynarray->data = nth_realloc(
-        dynarray->data,
-        dynarray->capacity * dynarray->element_size * 2);
-
-    return 0;
-}
-
 int dynarray_push(Dynarray *dynarray, const void *element)
 {
     trace_assert(dynarray);
     trace_assert(element);
-
-    if (dynarray_grow(dynarray) < 0) {
-        return -1;
-    }
+    trace_assert(dynarray->count < DYNARRAY_CAPACITY);
 
     memcpy(
         (char*) dynarray->data + dynarray->count * dynarray->element_size,
@@ -92,9 +67,7 @@ void dynarray_insert_before(Dynarray *dynarray, size_t index, void *element)
 {
     trace_assert(dynarray);
     trace_assert(element);
-    trace_assert(index <= dynarray->count);
-
-    dynarray_grow(dynarray);
+    trace_assert(index < dynarray->count);
 
     memmove(
         (uint8_t*) dynarray->data + (index + 1) * dynarray->element_size,
@@ -112,10 +85,7 @@ void dynarray_insert_before(Dynarray *dynarray, size_t index, void *element)
 int dynarray_push_empty(Dynarray *dynarray)
 {
     trace_assert(dynarray);
-
-    if (dynarray_grow(dynarray) < 0) {
-        return -1;
-    }
+    trace_assert(dynarray->count < DYNARRAY_CAPACITY);
 
     memset(
         (char*) dynarray->data + dynarray->count * dynarray->element_size,
index b86345038ac526d12713570346eb3040addedd58..39bc1b9157383b92b1910e41b03312a96b7c1a6b 100644 (file)
@@ -5,9 +5,10 @@
 #include <stdbool.h>
 #include <stdint.h>
 
+#define DYNARRAY_CAPACITY 256
+
 typedef struct {
     size_t element_size;
-    size_t capacity;
     size_t count;
     void *data;
 } Dynarray;
@@ -17,9 +18,8 @@ Dynarray create_dynarray(size_t element_size)
 {
     Dynarray result = {
         .element_size = element_size,
-        .capacity = 0,
         .count = 0,
-        .data = NULL
+        .data = malloc(DYNARRAY_CAPACITY * element_size)
     };
     return result;
 }