improve length prefix array macros

This commit is contained in:
Michael Sippel 2025-03-20 17:25:40 +01:00
parent f67f8c0118
commit 1d10b1bf61
Signed by: senvas
GPG key ID: F96CF119C34B64A6

View file

@ -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) \