New rewritten serial driver + dev interface

This commit is contained in:
2025-10-04 21:31:45 +02:00
parent 0117080b61
commit acbf051dbc
16 changed files with 139 additions and 16 deletions

View File

@ -26,13 +26,17 @@ enum {
HSHTB_TOMB = 2,
};
#define __HSHTB_ARRAY_LEN(tb) \
((void)sizeof(struct { int _[!!(sizeof(tb) % sizeof((tb)[0]) == 0)]; }) , (sizeof(tb) / sizeof((tb)[0])))
#define HSHTB_ALLOC(tb, keyfield, k, out) \
do { \
size_t __len = sizeof((tb)) / sizeof((tb)[0]); \
size_t __len = __HSHTB_ARRAY_LEN(tb); \
uint32_t __h = hshtb_fnv32((k), hal_strlen((k))); \
size_t __idx = __h % __len; \
size_t __start = __idx; \
typeof(&(tb)[0]) __tomb = NULL; \
(out) = NULL; \
do { \
if ((tb)[__idx]._hshtbstate == HSHTB_EMPTY) { \
typeof(&(tb)[0]) __slot = __tomb ? __tomb : &(tb)[__idx]; \
@ -55,7 +59,7 @@ enum {
#define HSHTB_GET(tb, keyfield, k, out) \
do { \
size_t __len = sizeof((tb)) / sizeof((tb)[0]); \
size_t __len = __HSHTB_ARRAY_LEN(tb); \
uint32_t __h = hshtb_fnv32((k), hal_strlen((k))); \
size_t __idx = __h % __len; \
size_t __start = __idx; \
@ -77,7 +81,7 @@ enum {
typeof(&(tb)[0]) __e; \
HSHTB_GET((tb), (keyfield), (k), __e); \
if (__e) { \
__e->state = HSHTB_TOMB; \
__e->_hshtbstate = HSHTB_TOMB; \
} \
} while(0)