X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=include%2Flttng%2Faction%2Flist-internal.hpp;fp=include%2Flttng%2Faction%2Flist-internal.hpp;h=607d5981887df3d8fceb1f958c9b9faab910c837;hp=53cab5897eb1b17c7286356ef748bae3b78a3a01;hb=b17ed2ad7083d1b0bf45fe3e1bfc4e4ad787aaf3;hpb=2460203ad4c64f0dcdb716e833abee10a79ec092 diff --git a/include/lttng/action/list-internal.hpp b/include/lttng/action/list-internal.hpp index 53cab5897..607d59818 100644 --- a/include/lttng/action/list-internal.hpp +++ b/include/lttng/action/list-internal.hpp @@ -8,9 +8,12 @@ #ifndef LTTNG_ACTION_LIST_INTERNAL_H #define LTTNG_ACTION_LIST_INTERNAL_H +#include +#include +#include #include -#include +#include #include #include @@ -41,19 +44,54 @@ lttng_action_list_mi_serialize(const struct lttng_trigger *trigger, 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++) +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; + +using const_action_list_view = + utils::random_access_container_wrapper; + +} /* namespace ctl */ +} /* namespace lttng */ #endif /* LTTNG_ACTION_LIST_INTERNAL_H */