Skip to content

Commit c4779e2

Browse files
committed
Breaking change: Pass event to entry/exit functions, too
1 parent 58165a0 commit c4779e2

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

examples/interface/Fsm.hxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public:
1111
static const State kState1;
1212
static const State kState2;
1313

14-
inline void Start()
14+
void Start()
1515
{
1616
FsmBase::Start(&kState1);
1717
}

include/cpp_event_framework/Statemachine.hxx

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ public:
261261
/**
262262
* @brief Type of on_entry / on_exit handler
263263
*/
264-
using EntryExitType = void (Impl::*)();
264+
using EntryExitType = void (Impl::*)(Event);
265265
/**
266266
* @brief Type of event handler
267267
*/
@@ -511,7 +511,7 @@ public:
511511
AssertionProviderType::Assert(impl_ != nullptr); // Most probably you forgot to call Init()
512512
current_state_ = &kInTransition;
513513
initial_.clear();
514-
EnterStatesFromDownTo(nullptr, initial);
514+
EnterStatesFromDownTo(nullptr, initial, {});
515515
}
516516

517517
/**
@@ -562,9 +562,9 @@ public:
562562
on_state_change_(*this, event, *old_state, *transition.target_);
563563
}
564564

565-
ExitStatesFromUpTo(old_state, common_parent);
565+
ExitStatesFromUpTo(old_state, common_parent, event);
566566
transition.ExecuteActions(impl_, event);
567-
EnterStatesFromDownTo(common_parent, transition.target_);
567+
EnterStatesFromDownTo(common_parent, transition.target_, event);
568568
}
569569
else
570570
{
@@ -775,7 +775,7 @@ private:
775775
return state->initial_;
776776
}
777777

778-
void ExitState(StatePtr state)
778+
void ExitState(StatePtr state, Event event)
779779
{
780780
if (on_state_exit_ != nullptr)
781781
{
@@ -784,17 +784,17 @@ private:
784784

785785
for (const auto& on_ex : state->on_exit_)
786786
{
787-
(impl_->*on_ex)();
787+
(impl_->*on_ex)(event);
788788
}
789789
}
790790

791-
void ExitStatesFromUpTo(StatePtr from, StatePtr top)
791+
void ExitStatesFromUpTo(StatePtr from, StatePtr top, Event event)
792792
{
793793
const auto* state = from;
794794

795795
if (state == top)
796796
{
797-
ExitState(state);
797+
ExitState(state, event);
798798
}
799799
else
800800
{
@@ -809,14 +809,14 @@ private:
809809
}
810810
}
811811

812-
ExitState(state);
812+
ExitState(state, event);
813813

814814
state = state->parent_;
815815
}
816816
}
817817
}
818818

819-
void EnterState(StateRef state) const
819+
void EnterState(StateRef state, Event event) const
820820
{
821821
if (on_state_entry_ != nullptr)
822822
{
@@ -825,37 +825,37 @@ private:
825825

826826
for (const auto& on_en : state.on_entry_)
827827
{
828-
(impl_->*on_en)();
828+
(impl_->*on_en)(event);
829829
}
830830
}
831831

832-
void EnterStatesFromDownToRecursive(StatePtr top, StatePtr target)
832+
void EnterStatesFromDownToRecursive(StatePtr top, StatePtr target, Event event)
833833
{
834834
// Don't enter topmost state
835835
if ((target != nullptr) && (top != target))
836836
{
837-
EnterStatesFromDownToRecursive(top, target->parent_);
838-
EnterState(*target);
837+
EnterStatesFromDownToRecursive(top, target->parent_, event);
838+
EnterState(*target, event);
839839
}
840840
}
841841

842-
void EnterStatesFromDownTo(StatePtr top, StatePtr target)
842+
void EnterStatesFromDownTo(StatePtr top, StatePtr target, Event event)
843843
{
844844
// Enter all states up to parent
845845
if (top != target)
846846
{
847-
EnterStatesFromDownToRecursive(top, target->parent_);
847+
EnterStatesFromDownToRecursive(top, target->parent_, event);
848848
}
849849

850850
// Alywas enter target state (we may have exited it, possibly a self transition)
851-
EnterState(*target);
851+
EnterState(*target, event);
852852

853853
// Is target a hierarchical state? If so, enter initial state
854854
const auto* state = GetInitialState(target);
855855
while (state != nullptr)
856856
{
857857
target = state;
858-
EnterState(*state);
858+
EnterState(*state, event);
859859
state = GetInitialState(target);
860860
}
861861

test/Statemachine_unittest.cxx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,36 +129,36 @@ class StatemachineImpl
129129
assert(on_recall_event_called_ == false);
130130
}
131131

132-
void FsmOffEntry()
132+
void FsmOffEntry(Fsm::Event /*event*/)
133133
{
134134
off_entry_called_ = true;
135135
std::cout << "Off entry\n";
136136
}
137-
void FsmOffEntry2()
137+
void FsmOffEntry2(Fsm::Event /*event*/)
138138
{
139139
off_entry2_called_ = true;
140140
std::cout << "Off entry2\n";
141141
}
142142

143-
void FsmOffExit()
143+
void FsmOffExit(Fsm::Event /*event*/)
144144
{
145145
off_exit_called_ = true;
146146
fsm_.RecallEvents();
147147
std::cout << "Off exit\n";
148148
}
149-
void FsmOffExit2()
149+
void FsmOffExit2(Fsm::Event /*event*/)
150150
{
151151
off_exit2_called_ = true;
152152
std::cout << "Off exit2\n";
153153
}
154154

155-
void FsmOnEntry()
155+
void FsmOnEntry(Fsm::Event /*event*/)
156156
{
157157
on_entry_called_ = true;
158158
std::cout << "On entry\n";
159159
}
160160

161-
void FsmOnExit()
161+
void FsmOnExit(Fsm::Event /*event*/)
162162
{
163163
on_exit_called_ = true;
164164
std::cout << "On exit\n";

0 commit comments

Comments
 (0)