From c43e9f348f17382bd90e337be07dfbe15d0746b9 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Mon, 23 Jan 2017 22:31:55 +0100
Subject: Improve ARRAY
---
hex.c | 21 +++++++++------------
tui.c | 1 +
2 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/hex.c b/hex.c
index 3b4ad26..1c28ae6 100644
--- a/hex.c
+++ b/hex.c
@@ -103,23 +103,20 @@ update_curses_terminal_size (void)
// --- Simple array support ----------------------------------------------------
-// Primitives for arrays
+// The most basic helper macros to make working with arrays not suck
#define ARRAY(type, name) type *name; size_t name ## _len, name ## _size;
-#define ARRAY_INIT(a) \
+#define ARRAY_INIT_SIZED(a, n) \
BLOCK_START \
- a = xcalloc (sizeof *a, (a ## _size = 16)); \
- a ## _len = 0; \
+ (a) = xcalloc (sizeof *(a), (a ## _size) = (n)); \
+ (a ## _len) = 0; \
BLOCK_END
+#define ARRAY_INIT(a) ARRAY_INIT_SIZED (a, 16)
#define ARRAY_RESERVE(a, n) \
- array_reserve ((void **) &a, sizeof *a, a ## _len + n, &a ## _size)
-
-static void
-array_reserve (void **array, size_t element_size, size_t len, size_t *size)
-{
- while (len > *size)
- *array = xreallocarray (*array, element_size, *size <<= 1);
-}
+ BLOCK_START \
+ while ((a ## _size) - (a ## _len) < n) \
+ (a) = xreallocarray ((a), sizeof *(a), (a ## _size) <<= 1); \
+ BLOCK_END
// --- Application -------------------------------------------------------------
diff --git a/tui.c b/tui.c
index 3887369..4d803df 100644
--- a/tui.c
+++ b/tui.c
@@ -90,6 +90,7 @@ struct row_char
struct row_buffer
{
+ // TODO: rewrite this using ARRAY
struct row_char *chars; ///< Characters
size_t chars_len; ///< Character count
size_t chars_alloc; ///< Characters allocated
--
cgit v1.2.3-70-g09d2