Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
Transition.hpp
Go to the documentation of this file.
1
7#pragma once
8
9#include <tuple>
10#include <utility>
11
12namespace corium::fsm {
13
15struct Always {
16 template <typename... Args>
17 constexpr bool operator()(Args&&...) const noexcept { return true; }
18};
19
21struct NoAction {
22 template <typename... Args>
23 constexpr void operator()(Args&&...) const noexcept {}
24};
25
32template <
33 typename From,
34 typename Event,
35 typename To,
36 typename Guard = Always,
37 typename Action = NoAction
38>
39struct Transition {
40 using FromState = From;
42 using ToState = To;
43 using GuardType = Guard;
44 using ActionType = Action;
45 static constexpr bool is_internal = false;
46
47 [[no_unique_address]] GuardType guard{};
48 [[no_unique_address]] ActionType action{};
49
50 constexpr Transition() = default;
51 constexpr explicit Transition(GuardType g, ActionType a = ActionType{})
52 : guard(std::move(g)), action(std::move(a))
53 {}
54};
55
57template <
58 typename State,
59 typename Event,
60 typename Guard = Always,
61 typename Action = NoAction
62>
64 using FromState = State;
66 using ToState = State;
67 using GuardType = Guard;
68 using ActionType = Action;
69 static constexpr bool is_internal = true;
70
71 [[no_unique_address]] GuardType guard{};
72 [[no_unique_address]] ActionType action{};
73
74 constexpr InternalTransition() = default;
76 : guard(std::move(g)), action(std::move(a))
77 {}
78};
79
80namespace detail {
81template <typename Action, typename From, typename Event, typename To>
82constexpr void execute_action(const Action& action, From& from, const Event& e, To& to);
83}
84
86template <typename... Actions>
87struct ActionList {
88 std::tuple<Actions...> actions{};
89
90 constexpr ActionList() = default;
91 constexpr explicit ActionList(Actions... a) : actions(std::move(a)...) {}
92
93 template <typename From, typename Event, typename To>
94 constexpr void operator()(From& from, const Event& event, To& to) const {
95 std::apply([&](const auto&... act) {
96 (detail::execute_action(act, from, event, to), ...);
97 }, actions);
98 }
99};
100
102template <typename... Transitions>
104 using TransitionsTuple = std::tuple<Transitions...>;
105};
106
107} // namespace corium::fsm
constexpr void execute_action(const Action &action, From &from, const Event &e, To &to)
Definition StateMachine.hpp:51
Definition HistoryState.hpp:9
DefaultEvents Event
Alias for DefaultEvents.
Definition Events.hpp:65
Sequential composition of multiple transition actions.
Definition Transition.hpp:87
std::tuple< Actions... > actions
Definition Transition.hpp:88
constexpr ActionList()=default
constexpr void operator()(From &from, const Event &event, To &to) const
Definition Transition.hpp:94
constexpr ActionList(Actions... a)
Definition Transition.hpp:91
Default always-true guard for state machine transitions.
Definition Transition.hpp:15
constexpr bool operator()(Args &&...) const noexcept
Definition Transition.hpp:17
Compile-time internal transition rule (executes action without exiting or re-entering state).
Definition Transition.hpp:63
State FromState
Definition Transition.hpp:64
Guard GuardType
Definition Transition.hpp:67
Event EventType
Definition Transition.hpp:65
constexpr InternalTransition()=default
GuardType guard
Definition Transition.hpp:71
static constexpr bool is_internal
Definition Transition.hpp:69
Action ActionType
Definition Transition.hpp:68
ActionType action
Definition Transition.hpp:72
State ToState
Definition Transition.hpp:66
constexpr InternalTransition(GuardType g, ActionType a=ActionType{})
Definition Transition.hpp:75
Default no-op action for state machine transitions.
Definition Transition.hpp:21
constexpr void operator()(Args &&...) const noexcept
Definition Transition.hpp:23
Compile-time table containing all valid state transitions.
Definition Transition.hpp:103
std::tuple< Transitions... > TransitionsTuple
Definition Transition.hpp:104
Compile-time transition rule definition.
Definition Transition.hpp:39
ActionType action
Definition Transition.hpp:48
constexpr Transition(GuardType g, ActionType a=ActionType{})
Definition Transition.hpp:51
To ToState
Definition Transition.hpp:42
Event EventType
Definition Transition.hpp:41
From FromState
Definition Transition.hpp:40
constexpr Transition()=default
Guard GuardType
Definition Transition.hpp:43
static constexpr bool is_internal
Definition Transition.hpp:45
Action ActionType
Definition Transition.hpp:44
GuardType guard
Definition Transition.hpp:47