From 1d10b1bf6161069589fba8c35d1040ad6f6b8a9c Mon Sep 17 00:00:00 2001
From: Michael Sippel <micha@fragmental.art>
Date: Thu, 20 Mar 2025 17:25:40 +0100
Subject: [PATCH] improve length prefix array macros

---
 .../runtime/include/array/length-prefix.h     | 36 +++++++------------
 1 file changed, 12 insertions(+), 24 deletions(-)

diff --git a/morphisms/runtime/include/array/length-prefix.h b/morphisms/runtime/include/array/length-prefix.h
index 9017950..35a4aec 100644
--- a/morphisms/runtime/include/array/length-prefix.h
+++ b/morphisms/runtime/include/array/length-prefix.h
@@ -3,7 +3,6 @@
 #include <stdio.h>
 #include <stdint.h>
 
-// Macro to define length-prefixed array structures and functions
 #define DEFINE_LENGTH_PREFIX_ARRAY(LEN_TYPE, ITEM_TYPE)                        \
     typedef struct {                                                           \
         LEN_TYPE len;                                                          \
@@ -40,29 +39,18 @@
         printf("\n");                                                          \
     }
 
+#define DEFINE_ALL_LENGTH_PREFIX_ARRAYS(LEN_TYPE)  \
+    DEFINE_LENGTH_PREFIX_ARRAY(LEN_TYPE, uint8_t)  \
+    DEFINE_LENGTH_PREFIX_ARRAY(LEN_TYPE, uint16_t) \
+    DEFINE_LENGTH_PREFIX_ARRAY(LEN_TYPE, uint32_t) \
+    DEFINE_LENGTH_PREFIX_ARRAY(LEN_TYPE, uint64_t)
+
+DEFINE_ALL_LENGTH_PREFIX_ARRAYS(uint8_t)
+DEFINE_ALL_LENGTH_PREFIX_ARRAYS(uint16_t)
+DEFINE_ALL_LENGTH_PREFIX_ARRAYS(uint32_t)
+DEFINE_ALL_LENGTH_PREFIX_ARRAYS(uint64_t)
 
-// Define all combinations of length and item types
-DEFINE_LENGTH_PREFIX_ARRAY(uint8_t, uint8_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint8_t, uint16_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint8_t, uint32_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint8_t, uint64_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint16_t, uint8_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint16_t, uint16_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint16_t, uint32_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint16_t, uint64_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint32_t, uint8_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint32_t, uint16_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint32_t, uint32_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint32_t, uint64_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint64_t, uint8_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint64_t, uint16_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint64_t, uint32_t)
-DEFINE_LENGTH_PREFIX_ARRAY(uint64_t, uint64_t)
 
-/*
- * Map
- */
-// Macro to define map function between different item types
 #define DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, SRC_ITEM_TYPE, DST_ITEM_TYPE) \
     static inline int length_prefix_##LEN_TYPE##_array_map_##SRC_ITEM_TYPE##_to_##DST_ITEM_TYPE( \
         int (*f)(SRC_ITEM_TYPE const * restrict, DST_ITEM_TYPE * restrict),    \
@@ -78,12 +66,12 @@ DEFINE_LENGTH_PREFIX_ARRAY(uint64_t, uint64_t)
     }
 
 #define DEFINE_ALL_MAPS(LEN_TYPE)                        \
-    DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint8_t, uint8_t)  \
+    DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint8_t, uint8_t)   \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint8_t, uint16_t)  \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint8_t, uint32_t)  \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint8_t, uint64_t)  \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint16_t, uint8_t)  \
-    DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint16_t, uint16_t)  \
+    DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint16_t, uint16_t) \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint16_t, uint32_t) \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint16_t, uint64_t) \
     DEFINE_LENGTH_PREFIX_ARRAY_MAP(LEN_TYPE, uint32_t, uint8_t)  \