45 using context_type =
typename Impl::context_type;
47 constexpr state_mold() =
default;
49 state_mold(
const state_mold&) =
delete;
51 state_mold(state_mold&&) =
delete;
53 ~state_mold() =
default;
55 state_mold& operator=(
const state_mold&) =
delete;
57 state_mold& operator=(state_mold&&) =
delete;
59#define MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN \
60 [[maybe_unused]] const auto MAKI_DETAIL_ARG_context_type = detail::type<typename Impl::context_type>; \
61 [[maybe_unused]] const auto MAKI_DETAIL_ARG_context_sig = impl_.context_sig; \
62 [[maybe_unused]] const auto MAKI_DETAIL_ARG_context_lifetime = impl_.context_lifetime; \
63 [[maybe_unused]] const auto MAKI_DETAIL_ARG_entry_actions = impl_.entry_actions; \
64 [[maybe_unused]] const auto MAKI_DETAIL_ARG_internal_actions = impl_.internal_actions; \
65 [[maybe_unused]] const auto MAKI_DETAIL_ARG_exit_actions = impl_.exit_actions; \
66 [[maybe_unused]] const auto MAKI_DETAIL_ARG_pretty_name_view = impl_.pretty_name; \
67 [[maybe_unused]] const auto MAKI_DETAIL_ARG_transition_tables = impl_.transition_tables;
69#define MAKI_DETAIL_MAKE_STATE_CONF_COPY_END \
72 detail::state_mold_impl \
74 typename std::decay_t<decltype(MAKI_DETAIL_ARG_context_type)>::type, \
75 std::decay_t<decltype(MAKI_DETAIL_ARG_entry_actions)>, \
76 std::decay_t<decltype(MAKI_DETAIL_ARG_internal_actions)>, \
77 std::decay_t<decltype(MAKI_DETAIL_ARG_exit_actions)>, \
78 std::decay_t<decltype(MAKI_DETAIL_ARG_transition_tables)> \
82 MAKI_DETAIL_ARG_context_sig, \
83 MAKI_DETAIL_ARG_context_lifetime, \
84 MAKI_DETAIL_ARG_entry_actions, \
85 MAKI_DETAIL_ARG_internal_actions, \
86 MAKI_DETAIL_ARG_exit_actions, \
87 MAKI_DETAIL_ARG_pretty_name_view, \
88 MAKI_DETAIL_ARG_transition_tables \
91#define MAKI_DETAIL_X(signature) \
95 template<class Context> \
96 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE context_##signature() const \
98 return context<Context, state_context_signature::signature>(); \
100 MAKI_DETAIL_STATE_CONTEXT_CONSTRUCTOR_SIGNATURES
109 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
110#define MAKI_DETAIL_ARG_context_lifetime value
111 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
112#undef MAKI_DETAIL_ARG_context_lifetime
115#define MAKI_DETAIL_X(signature) \
120 template<class EventSetImpl, class Action> \
121 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE entry_action_##signature(const event_set<EventSetImpl>& , const Action& action) const \
123 return entry_action<action_signature::signature, EventSetImpl>(action); \
130 template<class Event, class Action> \
131 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE entry_action_##signature(const Action& action) const \
133 return entry_action<action_signature::signature, detail::type_set_item<Event>>(action); \
140 template<class Action> \
141 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE entry_action_##signature(const Action& action) const \
143 return entry_action<action_signature::signature, detail::universal_type_set_t>(action); \
145 MAKI_DETAIL_ACTION_SIGNATURES
148#define MAKI_DETAIL_X(signature) \
149 MAKI_DETAIL_ACTION_SIGNATURES
152#define MAKI_DETAIL_X(signature) \
157 template<class EventSetImpl, class Action> \
158 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE internal_action_##signature(const event_set<EventSetImpl>& , const Action& action) const \
160 return internal_action<action_signature::signature, EventSetImpl>(action); \
167 template<class Event, class Action> \
168 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE internal_action_##signature(const Action& action) const \
170 return internal_action<action_signature::signature, detail::type_set_item<Event>>(action); \
172 MAKI_DETAIL_ACTION_SIGNATURES
175#define MAKI_DETAIL_X(signature) \
180 template<class EventSetImpl, class Action> \
181 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE exit_action_##signature(const event_set<EventSetImpl>& , const Action& action) const \
183 return exit_action<action_signature::signature, EventSetImpl>(action); \
190 template<class Event, class Action> \
191 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE exit_action_##signature(const Action& action) const \
193 return exit_action<action_signature::signature, detail::type_set_item<Event>>(action); \
200 template<class Action> \
201 [[nodiscard]] constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE exit_action_##signature(const Action& action) const \
203 return exit_action<action_signature::signature, detail::universal_type_set_t>(action); \
205 MAKI_DETAIL_ACTION_SIGNATURES
211 [[nodiscard]]
constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE
pretty_name(
const std::string_view value)
const
213 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
214#define MAKI_DETAIL_ARG_pretty_name_view value
215 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
216#undef MAKI_DETAIL_ARG_pretty_name_view
223 template<
class... TransitionTables>
224 [[nodiscard]]
constexpr MAKI_DETAIL_STATE_CONF_RETURN_TYPE
transition_tables(
const TransitionTables&... tables)
const
226 const auto tpl = detail::tuple<TransitionTables...>{tables...};
227 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
228#define MAKI_DETAIL_ARG_transition_tables tpl
229 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
230#undef MAKI_DETAIL_ARG_transition_tables
234 MAKI_DETAIL_FRIENDLY_IMPL
236 using impl_type = Impl;
238 template<
class Impl2>
239 friend class state_mold;
241 template<
class... Args>
242 constexpr state_mold(Args&&... args):
243 impl_{std::forward<Args>(args)...}
247 template<
class Context, auto ContextSig>
248 [[nodiscard]]
constexpr auto context()
const
250 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
251#define MAKI_DETAIL_ARG_context_type detail::type<Context>
252#define MAKI_DETAIL_ARG_context_sig ContextSig
253 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
254#undef MAKI_DETAIL_ARG_context_type
255#undef MAKI_DETAIL_ARG_context_sig
258 template<action_signature Sig,
class EventTypeSet,
class Action>
259 [[nodiscard]]
constexpr auto entry_action(
const Action& action)
const
261 const auto new_entry_actions = append
264 detail::make_event_action<Sig, EventTypeSet>(action)
267 MAKI_DETAIL_MAKE_STATE_CONF_COPY_BEGIN
268#define MAKI_DETAIL_ARG_entry_actions new_entry_actions
269 MAKI_DETAIL_MAKE_STATE_CONF_COPY_END
270#undef MAKI_DETAIL_ARG_entry_actions
273 template<action_signature Sig,
class EventTypeSet,
class Action>
274 [[nodiscard]]
constexpr auto internal_action(
const Action& action)
const
276 const auto new_internal_actions = append
278 impl_.internal_actions,
279 detail::make_event_action<Sig, EventTypeSet>(action)
constexpr state_mold< IMPLEMENTATION_DETAIL > transition_tables(const TransitionTables &... tables) const
Specifies the list of transition tables. One region per transition table is created.
Definition state_mold.hpp:198
constexpr state_mold< IMPLEMENTATION_DETAIL > context_lifetime(const state_context_lifetime value) const
Sets the lifetime of the context.
Definition state_mold.hpp:105
constexpr state_mold< IMPLEMENTATION_DETAIL > pretty_name(const std::string_view value) const
Forces the value returned by maki::state::pretty_name().
Definition state_mold.hpp:185