X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Faction%2Flist-internal.hpp;h=607d5981887df3d8fceb1f958c9b9faab910c837;hb=f40b76aed659ff694cf948bf8ebd1d4b5741c986;hp=294a53ca24841c2769f12811f7a3a1c73a1a885f;hpb=c9e313bc594f40a86eed237dce222c0fc99c957f;p=lttng-tools.git diff --git a/include/lttng/action/list-internal.hpp b/include/lttng/action/list-internal.hpp index 294a53ca2..607d59818 100644 --- a/include/lttng/action/list-internal.hpp +++ b/include/lttng/action/list-internal.hpp @@ -8,10 +8,16 @@ #ifndef LTTNG_ACTION_LIST_INTERNAL_H #define LTTNG_ACTION_LIST_INTERNAL_H -#include - +#include +#include +#include #include +#include + +#include +#include + struct lttng_action; struct lttng_payload_view; struct mi_writer; @@ -25,18 +31,67 @@ 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); + +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 */