actions: list: Add `for_each_action_{const, mutable}()` macros
[lttng-tools.git] / include / lttng / action / list-internal.hpp
index 294a53ca24841c2769f12811f7a3a1c73a1a885f..53cab5897eb1b17c7286356ef748bae3b78a3a01 100644 (file)
@@ -8,10 +8,13 @@
 #ifndef LTTNG_ACTION_LIST_INTERNAL_H
 #define LTTNG_ACTION_LIST_INTERNAL_H
 
-#include <sys/types.h>
-
 #include <common/macros.hpp>
 
+#include <lttng/lttng-error.h>
+
+#include <assert.h>
+#include <sys/types.h>
+
 struct lttng_action;
 struct lttng_payload_view;
 struct mi_writer;
@@ -25,18 +28,32 @@ struct lttng_trigger;
  * On success, return the number of bytes consumed from `view`, and the created
  * list in `*list`. On failure, return -1.
  */
-extern ssize_t lttng_action_list_create_from_payload(
-               struct lttng_payload_view *view,
-               struct lttng_action **list);
-
-extern struct lttng_action *lttng_action_list_borrow_mutable_at_index(
-               const struct lttng_action *list, unsigned int index);
-
-enum lttng_error_code lttng_action_list_mi_serialize(const struct lttng_trigger *trigger,
-               const struct lttng_action *action,
-               struct mi_writer *writer,
-               const struct mi_lttng_error_query_callbacks
-                               *error_query_callbacks,
-               struct lttng_dynamic_array *action_path_indexes);
+extern ssize_t lttng_action_list_create_from_payload(struct lttng_payload_view *view,
+                                                    struct lttng_action **list);
+
+extern struct lttng_action *
+lttng_action_list_borrow_mutable_at_index(const struct lttng_action *list, unsigned int index);
+
+enum lttng_error_code
+lttng_action_list_mi_serialize(const struct lttng_trigger *trigger,
+                              const struct lttng_action *action,
+                              struct mi_writer *writer,
+                              const struct mi_lttng_error_query_callbacks *error_query_callbacks,
+                              struct lttng_dynamic_array *action_path_indexes);
+
+#define for_each_action_const(__action_element, __action_list)                                 \
+       assert(lttng_action_get_type(__action_list) == LTTNG_ACTION_TYPE_LIST);                \
+                                                                                               \
+       for (unsigned int __action_idx = 0;                                                    \
+            (__action_element = lttng_action_list_get_at_index(__action_list, __action_idx)); \
+            __action_idx++)
+
+#define for_each_action_mutable(__action_element, __action_list)                               \
+       assert(lttng_action_get_type(__action_list) == LTTNG_ACTION_TYPE_LIST);                \
+                                                                                               \
+       for (unsigned int __action_idx = 0;                                                    \
+            (__action_element =                                                               \
+                     lttng_action_list_borrow_mutable_at_index(__action_list, __action_idx)); \
+            __action_idx++)
 
 #endif /* LTTNG_ACTION_LIST_INTERNAL_H */
This page took 0.025875 seconds and 4 git commands to generate.