From 70a7e543a1bf9ff6d404b6897bc53fd2e5349b9c Mon Sep 17 00:00:00 2001 From: Hugo Landau Date: Thu, 9 Nov 2023 10:27:13 +0000 Subject: [PATCH] list.h: Add iterator macros Reviewed-by: Tomas Mraz Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/22674) --- include/internal/list.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/internal/list.h b/include/internal/list.h index de2a102cd44..902047641f7 100644 --- a/include/internal/list.h +++ b/include/internal/list.h @@ -20,6 +20,34 @@ # define OSSL_LIST_DBG(x) x; # endif +# define LIST_FOREACH_FROM(p, name, init) \ + for ((p) = (init); \ + (p) != NULL; \ + (p) = ossl_list_##name##_next(p)) +# define LIST_FOREACH(p, name, l) \ + LIST_FOREACH_FROM(p, name, ossl_list_##name##_head(l)) + +# define LIST_FOREACH_REV_FROM(p, name, init) \ + for ((p) = (init); \ + (p) != NULL; \ + (p) = ossl_list_##name##_prev(p)) +# define LIST_FOREACH_REV(p, name, l) \ + LIST_FOREACH_FROM(p, name, ossl_list_##name##_tail(l)) + +# define LIST_FOREACH_DELSAFE_FROM(p, pn, name, init) \ + for ((p) = (init); \ + (p) != NULL && (((pn) = ossl_list_##name##_next(p)), 1); \ + (p) = (pn)) +#define LIST_FOREACH_DELSAFE(p, pn, name, l) \ + LIST_FOREACH_DELSAFE_FROM(p, pn, name, ossl_list_##name##_head(l)) + +# define LIST_FOREACH_REV_DELSAFE_FROM(p, pn, name, init) \ + for ((p) = (init); \ + (p) != NULL && (((pn) = ossl_list_##name##_prev(p)), 1); \ + (p) = (pn)) +# define LIST_FOREACH_REV_DELSAFE(p, pn, name, l) \ + LIST_FOREACH_REV_DELSAFE_FROM(p, pn, name, ossl_list_##name##_tail(l)) + /* Define a list structure */ # define OSSL_LIST(name) OSSL_LIST_ ## name -- 2.47.2