about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2005-09-20 18:54:20 +0000
committerRichard Nyberg <rnyberg@murmeldjur.se>2005-09-20 18:54:20 +0000
commitdc45054fe8ea9b4a58708616d0bc019c76ce6c32 (patch)
treeac62632d6f42ba830f191f70f45f8c86b9bc826a
parenta67eaf47cbbe80a75fbb533bde8feaa7c99bf326 (diff)
downloadbtpd-dc45054fe8ea9b4a58708616d0bc019c76ce6c32.tar.gz
btpd-dc45054fe8ea9b4a58708616d0bc019c76ce6c32.zip
Add some macros.
-rw-r--r--btpd/queue.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/btpd/queue.h b/btpd/queue.h
index 9027eb1..7406017 100644
--- a/btpd/queue.h
+++ b/btpd/queue.h
@@ -28,8 +28,14 @@ struct {								\
 
 #define	BTPDQ_FIRST(head)	((head)->tqh_first)
 
+#define	BTPDQ_LAST(head, headname)					\
+	(*(((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);							\
@@ -51,6 +57,13 @@ struct {								\
 	(elm)->field.tqe_prev = &BTPDQ_NEXT((listelm), field);		\
 } while (0)
 
+#define	BTPDQ_INSERT_BEFORE(listelm, elm, field) do {			\
+	(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)
+
 #define	BTPDQ_INSERT_HEAD(head, elm, field) do {			\
 	if ((BTPDQ_NEXT((elm), field) = BTPDQ_FIRST((head))) != NULL)	\
 		BTPDQ_FIRST((head))->field.tqe_prev =			\