MINOR: list: add a macro to detect that a list contains at most one element

The new LIST_ATMOST1() test verifies that the designated element is either
alone or points on both sides to the same element. This is used to detect
that a list has at most a single element, or that an element about to be
deleted was the last one of a list.
This commit is contained in:
Willy Tarreau 2024-04-24 18:21:50 +02:00
parent bc236ad133
commit 1db3a390bb
1 changed files with 7 additions and 0 deletions

View File

@ -106,6 +106,13 @@
*/ */
#define LIST_INLIST(el) ((el)->n != (el)) #define LIST_INLIST(el) ((el)->n != (el))
/* checks if the list element <el> has the same prev and next, i.e. it's either
* detached or alone in a list since (it points to itself or to a single other
* node). One can check that an element is strictly attached and alone by
* combining this with LIST_INLIST().
*/
#define LIST_ATMOST1(el) ((el)->n == (el)->p)
/* atomically checks if the list element's next pointer points to anything /* atomically checks if the list element's next pointer points to anything
* different from itself, implying the element should be part of a list. This * different from itself, implying the element should be part of a list. This
* usually is similar to LIST_INLIST() except that while that one might be * usually is similar to LIST_INLIST() except that while that one might be