-#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++)
+namespace lttng {
+namespace ctl {
+namespace details {
+class action_list_operations {
+public:
+ static lttng_action *get(const lttng_action *list, std::size_t index) noexcept
+ {
+ return lttng_action_list_borrow_mutable_at_index(list, index);
+ }
+
+ static std::size_t size(const lttng_action *list)
+ {
+ unsigned int count;
+ const auto status = lttng_action_list_get_count(list, &count);
+
+ if (status != LTTNG_ACTION_STATUS_OK) {
+ LTTNG_THROW_INVALID_ARGUMENT_ERROR(
+ "Failed to get action list element count");
+ }
+
+ return count;
+ }
+};
+
+class const_action_list_operations {
+public:
+ static const lttng_action *get(const lttng_action *list, std::size_t index) noexcept
+ {
+ return lttng_action_list_get_at_index(list, index);
+ }
+
+ static std::size_t size(const lttng_action *list)
+ {
+ return action_list_operations::size(list);
+ }
+};
+} /* namespace details */
+
+using action_list_view = utils::random_access_container_wrapper<const lttng_action *,
+ lttng_action *,
+ details::action_list_operations>;
+
+using const_action_list_view =
+ utils::random_access_container_wrapper<const lttng_action *,
+ const lttng_action *,
+ details::const_action_list_operations>;
+
+} /* namespace ctl */
+} /* namespace lttng */