From 0e2d58347c0290cb4dbed92e3b47dbabd0005318 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 14 May 2011 22:11:09 +0200 Subject: [PATCH] introduce the NODES_FOREACH and GREP_FIRST macros --- include/util.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/util.h b/include/util.h index 610e701e..df0e3065 100644 --- a/include/util.h +++ b/include/util.h @@ -25,6 +25,21 @@ #define FOR_TABLE(workspace) \ for (int cols = 0; cols < (workspace)->cols; cols++) \ for (int rows = 0; rows < (workspace)->rows; rows++) + +#define NODES_FOREACH(head) \ + for (Con *child = (Con*)-1; (child == (Con*)-1) && ((child = 0), true);) \ + TAILQ_FOREACH(child, &((head)->nodes_head), nodes) + +/* greps the ->nodes of the given head and returns the first node that matches the given condition */ +#define GREP_FIRST(dest, head, condition) \ + NODES_FOREACH(head) { \ + if (!(condition)) \ + continue; \ + \ + (dest) = child; \ + break; \ + } + #define FREE(pointer) do { \ if (pointer != NULL) { \ free(pointer); \ -- 2.39.5