diff options
-rw-r--r-- | hex.c | 21 | ||||
-rw-r--r-- | tui.c | 1 |
2 files changed, 10 insertions, 12 deletions
@@ -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 ------------------------------------------------------------- @@ -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 |