44 using context_type =
typename Impl::context_type;
46 constexpr state_builder() =
default;
48 state_builder(
const state_builder&) =
delete;
50 state_builder(state_builder&&) =
delete;
52 ~state_builder() =
default;
54 state_builder& operator=(
const state_builder&) =
delete;
56 state_builder& operator=(state_builder&&) =
delete;
58#define MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN \
59 [[maybe_unused]] const auto MAKI_DETAIL_ARG_context_type = detail::type<typename Impl::context_type>; \
60 [[maybe_unused]] const auto MAKI_DETAIL_ARG_context_sig = impl_.context_sig; \
61 [[maybe_unused]] const auto MAKI_DETAIL_ARG_entry_actions = impl_.entry_actions; \
62 [[maybe_unused]] const auto MAKI_DETAIL_ARG_internal_actions = impl_.internal_actions; \
63 [[maybe_unused]] const auto MAKI_DETAIL_ARG_exit_actions = impl_.exit_actions; \
64 [[maybe_unused]] const auto MAKI_DETAIL_ARG_pretty_name_view = impl_.pretty_name; \
65 [[maybe_unused]] const auto MAKI_DETAIL_ARG_transition_tables = impl_.transition_tables;
67#define MAKI_DETAIL_MAKE_STATE_CONF_COPY_END \
68 return state_builder \
70 detail::state_builder_option_set \
72 typename std::decay_t<decltype(MAKI_DETAIL_ARG_context_type)>::type, \
73 std::decay_t<decltype(MAKI_DETAIL_ARG_entry_actions)>, \
74 std::decay_t<decltype(MAKI_DETAIL_ARG_internal_actions)>, \
75 std::decay_t<decltype(MAKI_DETAIL_ARG_exit_actions)>, \
76 std::decay_t<decltype(MAKI_DETAIL_ARG_transition_tables)> \
80 MAKI_DETAIL_ARG_context_sig, \
81 MAKI_DETAIL_ARG_entry_actions, \
82 MAKI_DETAIL_ARG_internal_actions, \
83 MAKI_DETAIL_ARG_exit_actions, \
84 MAKI_DETAIL_ARG_pretty_name_view, \
85 MAKI_DETAIL_ARG_transition_tables \
88#define MAKI_DETAIL_X(signature) \
92 template<class Context> \
93 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE context_##signature() const \
95 return context<Context, state_context_signature::signature>(); \
97 MAKI_DETAIL_STATE_CONTEXT_CONSTRUCTOR_SIGNATURES
100#define MAKI_DETAIL_X(signature) \
105 template<class EventSetPredicate, class Action> \
106 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE entry_action_##signature(const event_set<EventSetPredicate>& evt_set, const Action& action) const \
108 return entry_action<action_signature::signature>(evt_set, action); \
115 template<class Event, class Action> \
116 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE entry_action_##signature(const Action& action) const \
118 return entry_action_##signature(event_set{event<Event>}, action); \
125 template<class Action> \
126 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE entry_action_##signature(const Action& action) const \
128 return entry_action_##signature(all_events, action); \
130 MAKI_DETAIL_ACTION_SIGNATURES
133#define MAKI_DETAIL_X(signature) \
134 MAKI_DETAIL_ACTION_SIGNATURES
137#define MAKI_DETAIL_X(signature) \
142 template<class EventSetPredicate, class Action> \
143 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE internal_action_##signature(const event_set<EventSetPredicate>& evt_set, const Action& action) const \
145 return internal_action<action_signature::signature>(evt_set, action); \
152 template<class Event, class Action> \
153 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE internal_action_##signature(const Action& action) const \
155 return internal_action_##signature(event_set{event<Event>}, action); \
157 MAKI_DETAIL_ACTION_SIGNATURES
160#define MAKI_DETAIL_X(signature) \
165 template<class EventSetPredicate, class Action> \
166 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE exit_action_##signature(const event_set<EventSetPredicate>& evt_set, const Action& action) const \
168 return exit_action<action_signature::signature>(evt_set, action); \
175 template<class Event, class Action> \
176 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE exit_action_##signature(const Action& action) const \
178 return exit_action_##signature(event_set{event<Event>}, action); \
185 template<class Action> \
186 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE exit_action_##signature(const Action& action) const \
188 return exit_action_##signature(all_events, action); \
190 MAKI_DETAIL_ACTION_SIGNATURES
196 [[nodiscard]]
constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE
pretty_name(
const std::string_view value)
const
198 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
199#define MAKI_DETAIL_ARG_pretty_name_view value
200 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
201#undef MAKI_DETAIL_ARG_pretty_name_view
208 template<
class... TransitionTables>
209 [[nodiscard]]
constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE
transition_tables(
const TransitionTables&... tables)
const
211 const auto tpl = detail::tuple<TransitionTables...>{detail::distributed_construct, tables...};
212 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
213#define MAKI_DETAIL_ARG_transition_tables tpl
214 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
215#undef MAKI_DETAIL_ARG_transition_tables
219 using impl_type = Impl;
221 template<
class Impl2>
222 friend class state_builder;
224 template<
class... Args>
225 constexpr state_builder(Args&&... args):
226 impl_{std::forward<Args>(args)...}
230 template<
class Context, auto ContextSig>
231 [[nodiscard]]
constexpr auto context()
const
233 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
234#define MAKI_DETAIL_ARG_context_type detail::type<Context>
235#define MAKI_DETAIL_ARG_context_sig ContextSig
236 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
237#undef MAKI_DETAIL_ARG_context_type
238#undef MAKI_DETAIL_ARG_context_sig
241 template<action_signature Sig,
class EventSetPredicate,
class Action>
244 const auto new_entry_actions = tuple_append
247 detail::make_event_action<Sig>(evt_set, action)
250 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
251#define MAKI_DETAIL_ARG_entry_actions new_entry_actions
252 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
253#undef MAKI_DETAIL_ARG_entry_actions
256 template<action_signature Sig,
class EventSetPredicate,
class Action>
259 const auto new_internal_actions = tuple_append
261 impl_.internal_actions,
262 detail::make_event_action<Sig>(evt_set, action)
constexpr state_builder< IMPLEMENTATION_DETAIL > pretty_name(const std::string_view value) const
Forces the value returned by maki::state::pretty_name().
Definition state_builder.hpp:170
constexpr state_builder< IMPLEMENTATION_DETAIL > transition_tables(const TransitionTables &... tables) const
Specifies the list of transition tables. One region per transition table is created.
Definition state_builder.hpp:183