From c43e9f348f17382bd90e337be07dfbe15d0746b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Mon, 23 Jan 2017 22:31:55 +0100 Subject: [PATCH] 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