|
-
-
-
-
-
-
-
- struct name { \
- struct type *tqh_first; \
- struct type **tqh_last; \
- }
-
-
- { NULL, &(head).tqh_first }
-
-
- struct { \
- struct type *tqe_next; \
- struct type **tqe_prev; \
- }
-
-
-
-
-
-
- (*(((struct headname *)((head)->tqh_last))->tqh_last))
-
- #define BTPDQ_NEXT(elm, field) ((elm)->field.tqe_next)
-
- #define BTPDQ_PREV(elm, headname, field) \
- (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-
- #define BTPDQ_FOREACH(var, head, field) \
- for ((var) = BTPDQ_FIRST((head)); \
- (var); \
- (var) = BTPDQ_NEXT((var), field))
-
- #define BTPDQ_FOREACH_MUTABLE(var, head, field, nvar) \
- for ((var) = BTPDQ_FIRST((head)); \
- (var) && ((nvar) = BTPDQ_NEXT((var), field), (var)); \
- (var) = (nvar))
-
- #define BTPDQ_INIT(head) do { \
- BTPDQ_FIRST((head)) = NULL; \
- (head)->tqh_last = &BTPDQ_FIRST((head)); \
- } while (0)
-
-
- if ((BTPDQ_NEXT((elm), field) = BTPDQ_NEXT((listelm), field)) != NULL)\
- BTPDQ_NEXT((elm), field)->field.tqe_prev = \
- &BTPDQ_NEXT((elm), field); \
- else { \
- (head)->tqh_last = &BTPDQ_NEXT((elm), field); \
- } \
- BTPDQ_NEXT((listelm), field) = (elm); \
- (elm)->field.tqe_prev = &BTPDQ_NEXT((listelm), field); \
- } while (0)
-
-
- (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
- BTPDQ_NEXT((elm), field) = (listelm); \
- *(listelm)->field.tqe_prev = (elm); \
- (listelm)->field.tqe_prev = &BTPDQ_NEXT((elm), field); \
- } while (0)
-
-
- if ((BTPDQ_NEXT((elm), field) = BTPDQ_FIRST((head))) != NULL) \
- BTPDQ_FIRST((head))->field.tqe_prev = \
- &BTPDQ_NEXT((elm), field); \
- else \
- (head)->tqh_last = &BTPDQ_NEXT((elm), field); \
- BTPDQ_FIRST((head)) = (elm); \
- (elm)->field.tqe_prev = &BTPDQ_FIRST((head)); \
- } while (0)
-
-
- BTPDQ_NEXT((elm), field) = NULL; \
- (elm)->field.tqe_prev = (head)->tqh_last; \
- *(head)->tqh_last = (elm); \
- (head)->tqh_last = &BTPDQ_NEXT((elm), field); \
- } while (0)
-
-
- if ((BTPDQ_NEXT((elm), field)) != NULL) \
- BTPDQ_NEXT((elm), field)->field.tqe_prev = \
- (elm)->field.tqe_prev; \
- else { \
- (head)->tqh_last = (elm)->field.tqe_prev; \
- } \
- *(elm)->field.tqe_prev = BTPDQ_NEXT((elm), field); \
- } while (0)
-
|