6#ifndef MIMICPP_EXPECTATION_POLICIES_SIDE_EFFECT_POLICIES_HPP
7#define MIMICPP_EXPECTATION_POLICIES_SIDE_EFFECT_POLICIES_HPP
16#ifndef MIMICPP_DETAIL_IS_MODULE
20 #include <type_traits>
26 template <
typename Action>
36 explicit constexpr SideEffectAction(Action&& action)
noexcept(std::is_nothrow_move_constructible_v<Action>)
37 : m_Action{std::move(action)}
50 template <
typename Return,
typename... Args>
57 template <
typename Return,
typename... Args>
58 requires std::invocable<Action&,
call::Info<Return, Args...>
const&>
60 noexcept(std::is_nothrow_invocable_v<Action&,
call::Info<Return, Args...>
const&>)
62 std::invoke(m_Action, info);
100 template <std::
size_t index,
typename Action>
103 noexcept(std::is_nothrow_constructible_v<std::remove_cvref_t<Action>, Action>)
105 using arg_selector_t = expectation::policies::detail::args_selector_fn<
106 std::add_lvalue_reference_t,
107 std::index_sequence<index>>;
108 using apply_strategy_t = expectation::policies::detail::arg_list_forward_apply_fn;
112 expectation::policies::detail::apply_args_fn{arg_selector_t{}, apply_strategy_t{}},
113 std::forward<Action>(action))};
126 template <std::size_t index, std::size_t... additionalIndices,
typename Action>
129 noexcept(std::is_nothrow_constructible_v<std::remove_cvref_t<Action>, Action>)
131 using arg_selector_t = expectation::policies::detail::args_selector_fn<
132 std::add_lvalue_reference_t,
133 std::index_sequence<index, additionalIndices...>>;
134 using apply_strategy_t = expectation::policies::detail::arg_list_forward_apply_fn;
138 expectation::policies::detail::apply_args_fn{arg_selector_t{}, apply_strategy_t{}},
139 std::forward<Action>(action))};
148 template <
typename Action>
151 noexcept(std::is_nothrow_constructible_v<std::remove_cvref_t<Action>, Action>)
153 using arg_selector_t = expectation::policies::detail::all_args_selector_fn<std::add_lvalue_reference_t>;
154 using apply_strategy_t = expectation::policies::detail::arg_list_forward_apply_fn;
158 expectation::policies::detail::apply_args_fn{arg_selector_t{}, apply_strategy_t{}},
159 std::forward<Action>(action))};
168 template <std::invocable Action>
171 noexcept(std::is_nothrow_constructible_v<std::remove_cvref_t<Action>, Action>)
174 [fn = std::forward<Action>(action)]([[maybe_unused]]
auto const&
call)
mutable noexcept(
175 std::is_nothrow_invocable_v<Action&>) {
#define MIMICPP_DETAIL_MODULE_EXPORT
Definition Config.hpp:19
Definition SideEffectPolicies.hpp:28
constexpr void consume(call::Info< Return, Args... > const &info) noexcept(std::is_nothrow_invocable_v< Action &, call::Info< Return, Args... > const & >)
Definition SideEffectPolicies.hpp:59
constexpr SideEffectAction(Action &&action) noexcept(std::is_nothrow_move_constructible_v< Action >)
Definition SideEffectPolicies.hpp:36
SideEffectAction & operator=(SideEffectAction const &)=delete
static MatchResult matches(call::Info< Return, Args... > const &) noexcept
Definition SideEffectPolicies.hpp:52
SideEffectAction & operator=(SideEffectAction &&)=default
~SideEffectAction()=default
SideEffectAction(SideEffectAction const &)=delete
static constexpr bool is_satisfied() noexcept
Definition SideEffectPolicies.hpp:45
SideEffectAction(SideEffectAction &&)=default
constexpr auto apply_all(Action &&action) noexcept(std::is_nothrow_constructible_v< std::remove_cvref_t< Action >, Action >)
Applies all arguments on the given action.
Definition SideEffectPolicies.hpp:150
constexpr auto apply_arg(Action &&action) noexcept(std::is_nothrow_constructible_v< std::remove_cvref_t< Action >, Action >)
Applies the argument at the specified index on the given action.
Definition SideEffectPolicies.hpp:102
constexpr auto invoke(Action &&action) noexcept(std::is_nothrow_constructible_v< std::remove_cvref_t< Action >, Action >)
Invokes the given function.
Definition SideEffectPolicies.hpp:170
constexpr auto apply_args(Action &&action) noexcept(std::is_nothrow_constructible_v< std::remove_cvref_t< Action >, Action >)
Applies the arguments at the specified index and in that order on the given action.
Definition SideEffectPolicies.hpp:128
Definition ArgumentList.hpp:24
std::variant< MatchSuccess, MatchFailure > MatchResult
Definition Common.hpp:41
Definition SideEffectPolicies.hpp:71