FSMgine
High-performance finite state machine library for C++17 with single-threaded and multi-threaded variants
Loading...
Searching...
No Matches
Transition.hpp
Go to the documentation of this file.
1
4
5#pragma once
6
7#include <functional>
8#include <vector>
9#include <string_view>
10
13
14namespace fsmgine {
15
16// Forward declaration
17template<typename TEvent>
18class TransitionBuilder;
19
40template<typename TEvent>
42public:
44 using Predicate = std::function<bool(const TEvent&)>;
45
47 using Action = std::function<void(const TEvent&)>;
48
50 Transition() = default;
51
52 Transition(const Transition&) = delete;
53 Transition& operator=(const Transition&) = delete;
54
56 Transition(Transition&&) = default;
57
60
66 void addPredicate(Predicate pred);
67
73 void addAction(Action action);
74
79 void setTargetState(std::string_view state);
80
84 bool predicatesPass(const TEvent& event) const;
85
89 void executeActions(const TEvent& event) const;
90
93 std::string_view getTargetState() const;
94
97 const std::vector<Action>& getActions() const;
98
101 bool hasPredicates() const;
102
105 bool hasActions() const;
106
109 bool hasTargetState() const;
110
111private:
112 // Friend declaration for builder access
113 friend class TransitionBuilder<TEvent>;
114
115 std::vector<Predicate> predicates_;
116 std::vector<Action> actions_;
117 std::string_view target_state_;
118};
119
120// --- Implementation ---
121
122template<typename TEvent>
123bool Transition<TEvent>::predicatesPass(const TEvent& event) const {
124 if (predicates_.empty()) {
125 return true;
126 }
127
128 for (const auto& pred : predicates_) {
129 if (!pred(event)) {
130 return false;
131 }
132 }
133 return true;
134}
135
136template<typename TEvent>
137void Transition<TEvent>::executeActions(const TEvent& event) const {
138 for (const auto& action : actions_) {
139 action(event);
140 }
141}
142
143template<typename TEvent>
144std::string_view Transition<TEvent>::getTargetState() const {
145 return target_state_;
146}
147
148template<typename TEvent>
149const std::vector<typename Transition<TEvent>::Action>& Transition<TEvent>::getActions() const {
150 return actions_;
151}
152
153template<typename TEvent>
155 return !predicates_.empty();
156}
157
158template<typename TEvent>
160 return !actions_.empty();
161}
162
163template<typename TEvent>
165 return !target_state_.empty();
166}
167
168template<typename TEvent>
170 if (pred) {
171 predicates_.push_back(std::move(pred));
172 }
173}
174
175template<typename TEvent>
177 if (action) {
178 actions_.push_back(std::move(action));
179 }
180}
181
182template<typename TEvent>
183void Transition<TEvent>::setTargetState(std::string_view state) {
184 target_state_ = state;
185}
186
187} // namespace fsmgine
Builder for creating transitions with a fluent interface.
Definition FSMBuilder.hpp:37
Represents a transition between states in a finite state machine.
Definition Transition.hpp:41
const std::vector< Action > & getActions() const
Gets all actions associated with this transition.
Definition Transition.hpp:149
Transition(Transition &&)=default
Move constructor (defaulted)
bool hasPredicates() const
Checks if this transition has any predicates.
Definition Transition.hpp:154
bool predicatesPass(const TEvent &event) const
Evaluates all predicates for this transition.
Definition Transition.hpp:123
Transition()=default
Default constructor.
std::string_view getTargetState() const
Gets the target state for this transition.
Definition Transition.hpp:144
std::function< bool(const TEvent &)> Predicate
Type alias for transition guard predicates.
Definition Transition.hpp:44
bool hasActions() const
Checks if this transition has any actions.
Definition Transition.hpp:159
void addPredicate(Predicate pred)
Adds a predicate (guard condition) to this transition.
Definition Transition.hpp:169
std::function< void(const TEvent &)> Action
Type alias for transition actions.
Definition Transition.hpp:47
Transition & operator=(Transition &&)=default
Move assignment operator (defaulted)
bool hasTargetState() const
Checks if this transition has a target state.
Definition Transition.hpp:164
void addAction(Action action)
Adds an action to execute when this transition occurs.
Definition Transition.hpp:176
void setTargetState(std::string_view state)
Sets the target state for this transition.
Definition Transition.hpp:183
void executeActions(const TEvent &event) const
Executes all actions associated with this transition.
Definition Transition.hpp:137
Main namespace for the FSMgine library.
Definition FSM.hpp:23