New rewritten serial driver + dev interface
This commit is contained in:
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user