summaryrefslogtreecommitdiff
path: root/arr.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-12-03 23:03:14 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2019-12-03 23:03:14 -0500
commitae8af6b1d8860b18ae159499af397d067f46c46a (patch)
tree7eb170f91a11f961a97392c7dc415239be7931a1 /arr.c
parent896cac9b89decb94a7d3f18f24276e4032d776ca (diff)
fixed another problem, and now I kind of know whats going on with Arr
Diffstat (limited to 'arr.c')
-rw-r--r--arr.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/arr.c b/arr.c
index 4991cc4..0956460 100644
--- a/arr.c
+++ b/arr.c
@@ -44,12 +44,25 @@ static void arr_resva_(void **arr, size_t n, size_t item_sz, Allocator *a) {
}
}
+static void arr_clear_(void **arr) {
+ if (*arr) {
+ free(arr_hdr(*arr));
+ *arr = NULL;
+ }
+}
static void arr_set_len_(void **arr, size_t n, size_t item_sz) {
+ if (n == 0) {
+ arr_clear_(arr);
+ return;
+ }
arr_resv_(arr, n, item_sz);
arr_hdr(*arr)->len = n;
}
static void arr_set_lena_(void **arr, size_t n, size_t item_sz, Allocator *a) {
+ if (n == 0) {
+ /* OPTIM: arr_cleara */
+ }
arr_resva_(arr, n, item_sz, a);
arr_hdr(*arr)->len = n;
}
@@ -83,12 +96,6 @@ static void *arr_adda_(void **arr, size_t item_sz, Allocator *a) {
return &(((char *)hdr->data)[(hdr->len++) * item_sz]);
}
-static void arr_clear_(void **arr) {
- if (*arr) {
- free(arr_hdr(*arr));
- *arr = NULL;
- }
-}
static void *arr_last_(void *arr, size_t item_sz) {
if (arr) {