vppinfra: add pool_foreach_pointer() 11/39311/2
authorDamjan Marion <damarion@cisco.com>
Wed, 2 Aug 2023 15:58:58 +0000 (15:58 +0000)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 2 Aug 2023 17:41:22 +0000 (17:41 +0000)
Works on pools of pointers...

Type: improvement
Change-Id: I194dec389ca4c5ec2ce3361b54a9968c9caecefc
Signed-off-by: Damjan Marion <damarion@cisco.com>
.clang-format
src/vppinfra/pool.h

index a49d164..0680770 100644 (file)
@@ -13,6 +13,7 @@ ForEachMacros:
   - 'clib_bitmap_foreach'
   - 'pool_foreach'
   - 'pool_foreach_index'
+  - 'pool_foreach_pointer'
   - 'vec_foreach'
   - 'vec_foreach_backwards'
   - 'vec_foreach_index'
index 968614e..9913838 100644 (file)
@@ -568,6 +568,13 @@ do {                                                                       \
                                                (s));                               \
        (i) < (e); (i) = pool_get_next_index ((v), (i)))
 
+/* works only for pool of pointers, e is declared inside macro */
+#define pool_foreach_pointer(e, p)                                            \
+  if (p)                                                                      \
+    for (typeof ((p)[0]) *_t = (p) + pool_get_first_index (p), (e) = *_t;     \
+        _t < vec_end (p);                                                    \
+        _t = (p) + pool_get_next_index (p, _t - (p)), (e) = *_t)
+
 /**
  * @brief Remove all elements from a pool in a safe way
  *