From: Maria Matejka Date: Sun, 11 Feb 2024 21:57:55 +0000 (+0100) Subject: Typed lists: enabled defining the list structure independently on the node X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59304b2f912bbde3f63c82563ba44448866516a4;p=thirdparty%2Fbird.git Typed lists: enabled defining the list structure independently on the node --- diff --git a/lib/tlists.h b/lib/tlists.h index d7f1cf03e..70b8eb3f4 100644 --- a/lib/tlists.h +++ b/lib/tlists.h @@ -71,15 +71,14 @@ #define TLIST_NAME(x) MACRO_CONCAT_AFTER(TLIST_PREFIX,_##x) #ifndef TLIST_LIST_STRUCT -#define TLIST_LIST_STRUCT TLIST_NAME(list) +#define TLIST_LIST_STRUCT struct TLIST_NAME(list) #endif -typedef struct TLIST_LIST_STRUCT { - TLIST_TYPE *first; - TLIST_TYPE *last; -} TLIST_LIST_STRUCT; +#ifndef TLIST_DEFINED_BEFORE +TLIST_STRUCT_DEF(TLIST_PREFIX, TLIST_TYPE); +#endif -static inline struct TLIST_LIST_STRUCT * TLIST_NAME(enlisted)(TLIST_TYPE *node) +static inline TLIST_LIST_STRUCT * TLIST_NAME(enlisted)(TLIST_TYPE *node) { return node->TLIST_ITEM.list; } @@ -206,6 +205,7 @@ static inline void TLIST_NAME(rem_node)(TLIST_LIST_STRUCT *list, TLIST_TYPE *nod #endif #define TLIST_LIST(_name) struct _name##_list +#define TLIST_STRUCT_DEF(_name, _type) TLIST_LIST(_name) { _type *first, *last; } #define TLIST_NODE_IN(_name, _type) { _type *next; _type *prev; TLIST_LIST(_name) *list; } #define TLIST_NODE(_name, _type) struct _name##_node TLIST_NODE_IN(_name, _type)