llist update, iterate over ranges
authorChristian Thaeter <ct@pipapo.org>
Thu, 25 Oct 2007 01:05:30 +0000 (03:05 +0200)
committerChristian Thaeter <ct@pipapo.org>
Thu, 25 Oct 2007 01:05:30 +0000 (03:05 +0200)
src/llist.h

index 7b03b67..b7d061c 100644 (file)
@@ -115,7 +115,6 @@ typedef llist ** LList_ref;
  * @param node pointer to the iterated node
  */
 #define LLIST_FOREACH(list, node)               \
-  if (!list); else                              \
     for (LList node = llist_head (list);        \
          ! llist_is_end (node, list);           \
          llist_forward (&node))
@@ -126,11 +125,34 @@ typedef llist ** LList_ref;
  * @param node pointer to the iterated node
  */
 #define LLIST_FOREACH_REV(list, node)           \
-  if (!list); else                              \
     for (LList node = llist_tail (list);        \
          ! llist_is_end (node, list);           \
          llist_backward (&node))
 
+
+/**
+ * Iterate forward over a range.
+ * @param start first node to be interated
+ * @param end node after the last node be iterated
+ * @param node pointer to the iterated node
+ */
+#define LLIST_FORRANGE(start, end, node)        \
+    for (LList node = start;                    \
+         node != end;                           \
+         llist_forward (&node))
+
+/**
+ * Iterate backward over a range.
+ * @param rstart first node to be interated
+ * @param rend node before the last node be iterated
+ * @param node pointer to the iterated node
+ */
+#define LLIST_FORRANGE_REV(rstart, rend, node)  \
+    for (LList node = rstart;                   \
+         node != rend;                          \
+         llist_backward (&node))
+
+
 /**
  * Consume a list from head.
  * The body of this statement should remove the head from the list, else it would be a infinite loop
@@ -138,7 +160,6 @@ typedef llist ** LList_ref;
  * @param head pointer to the head node
  */
 #define LLIST_WHILE_HEAD(list, head)            \
-  if (!list); else                              \
     for (LList head = llist_head (list);        \
          !llist_is_empty (list);                \
          head = llist_head (list))
@@ -150,7 +171,6 @@ typedef llist ** LList_ref;
  * @param tail pointer to the tail node
  */
 #define LLIST_WHILE_TAIL(list, tail)            \
-  if (!list); else                              \
     for (LList tail = llist_tail (list);        \
          !llist_is_empty (list);                \
          tail = llist_tail (list))