From 9c99c948fd8c3c72b09d8de56f5424ef32061794 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 17 Aug 2021 11:19:35 +0200 Subject: [PATCH] platform: add nmp_cache_iter_for_each_reverse() helper --- .clang-format | 1 + src/libnm-platform/nmp-object.h | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/.clang-format b/.clang-format index ebb662e482..110ff05f23 100644 --- a/.clang-format +++ b/.clang-format @@ -120,4 +120,5 @@ ForEachMacros: ['c_list_for_each', 'nm_platform_iter_obj_for_each', 'nmp_cache_iter_for_each', 'nmp_cache_iter_for_each_link', + 'nmp_cache_iter_for_each_reverse', ] diff --git a/src/libnm-platform/nmp-object.h b/src/libnm-platform/nmp-object.h index e3e101eef3..021829db4b 100644 --- a/src/libnm-platform/nmp-object.h +++ b/src/libnm-platform/nmp-object.h @@ -777,6 +777,18 @@ nmp_cache_iter_next(NMDedupMultiIter *iter, const NMPObject **out_obj) return has_next; } +static inline gboolean +nmp_cache_iter_prev(NMDedupMultiIter *iter, const NMPObject **out_obj) +{ + gboolean has_prev; + + has_prev = nm_dedup_multi_iter_prev(iter); + nm_assert(!has_prev || NMP_OBJECT_IS_VALID(iter->current->obj)); + if (out_obj) + *out_obj = has_prev ? iter->current->obj : NULL; + return has_prev; +} + static inline gboolean nmp_cache_iter_next_link(NMDedupMultiIter *iter, const NMPlatformLink **out_obj) { @@ -792,6 +804,9 @@ nmp_cache_iter_next_link(NMDedupMultiIter *iter, const NMPlatformLink **out_obj) #define nmp_cache_iter_for_each(iter, head, obj) \ for (nm_dedup_multi_iter_init((iter), (head)); nmp_cache_iter_next((iter), (obj));) +#define nmp_cache_iter_for_each_reverse(iter, head, obj) \ + for (nm_dedup_multi_iter_init_reverse((iter), (head)); nmp_cache_iter_prev((iter), (obj));) + #define nmp_cache_iter_for_each_link(iter, head, obj) \ for (nm_dedup_multi_iter_init((iter), (head)); nmp_cache_iter_next_link((iter), (obj));)