To: None <>
From: Antti Kantee <>
List: tech-userlevel
Date: 12/15/2005 15:01:29
The intended usage of CIRCLEQ_NEXT/PREV goes totally against my intuition,
as the name implies that I can go around in circles with it.

It is probably a bit too late to do anything about those macros, but
I'd like to add two new ones, which actually make me drive in circles:

+#define        CIRCLEQ_LOOP_NEXT(head, elm, field)                     \
+       (((elm)->field.cqe_next == (void *)(head))                      \
+           ? ((head)->cqh_first)                                       \
+           : (elm->field.cqe_next))
+#define        CIRCLEQ_LOOP_PREV(head, elm, field)                     \
+       (((elm)->field.cqe_prev == (void *)(head))                      \
+           ? ((head)->cqh_last)                                        \
+           : (elm->field.cqe_prev))

Any objections (except for the names, which will no doubt create the
bulk of the discussion)?

Antti Kantee <>                     Of course he runs NetBSD                
    "la qualité la plus indispensable du cuisinier est l'exactitude"