From b48873074f1d513794a2456e085189c775ac4375 Mon Sep 17 00:00:00 2001 From: Andrew Gresyk Date: Fri, 22 Sep 2023 23:11:24 +0300 Subject: [PATCH] 2.3.1 * fixed `FullControlT<>::updatePlan()` * renamed `Status` to `TaskStatus` --- .../ffsm2/detail/containers/bit_array.hpp | 8 + .../ffsm2/detail/containers/bit_array.inl | 33 +- .../ffsm2/detail/containers/task_list.hpp | 4 +- development/ffsm2/detail/root/control.hpp | 12 +- development/ffsm2/detail/root/control.inl | 57 ++- development/ffsm2/detail/root/plan_data.hpp | 18 +- development/ffsm2/detail/root/plan_data.inl | 26 +- .../ffsm2/detail/structure/composite.hpp | 46 +-- .../ffsm2/detail/structure/composite.inl | 14 +- .../ffsm2/detail/structure/composite_sub.hpp | 56 +-- .../detail/structure/composite_sub_1.inl | 14 +- .../detail/structure/composite_sub_2.inl | 14 +- development/ffsm2/detail/structure/state.hpp | 32 +- development/ffsm2/detail/structure/state.inl | 32 +- development/ffsm2/machine_dev.hpp | 4 +- include/ffsm2/machine.hpp | 364 ++++++++++-------- 16 files changed, 420 insertions(+), 314 deletions(-) diff --git a/development/ffsm2/detail/containers/bit_array.hpp b/development/ffsm2/detail/containers/bit_array.hpp index e86386b..8ba8999 100644 --- a/development/ffsm2/detail/containers/bit_array.hpp +++ b/development/ffsm2/detail/containers/bit_array.hpp @@ -13,9 +13,13 @@ class BitArrayT final { static constexpr Index CAPACITY = NCapacity; static constexpr Index UNIT_COUNT = contain(CAPACITY, 8); + using BitArray = BitArrayT; + public: FFSM2_CONSTEXPR(14) BitArrayT() noexcept { clear(); } + FFSM2_CONSTEXPR(14) void set() noexcept; + FFSM2_CONSTEXPR(14) void clear() noexcept; FFSM2_CONSTEXPR(14) bool empty() const noexcept; @@ -29,6 +33,10 @@ class BitArrayT final { template FFSM2_CONSTEXPR(14) void clear(const TIndex index) noexcept; + FFSM2_CONSTEXPR(14) bool operator & (const BitArray& other) const noexcept; + + FFSM2_CONSTEXPR(14) void operator &= (const BitArray& other) noexcept; + private: uint8_t _storage[UNIT_COUNT] {}; }; diff --git a/development/ffsm2/detail/containers/bit_array.inl b/development/ffsm2/detail/containers/bit_array.inl index 3698f5c..6094042 100644 --- a/development/ffsm2/detail/containers/bit_array.inl +++ b/development/ffsm2/detail/containers/bit_array.inl @@ -17,6 +17,14 @@ namespace detail { //////////////////////////////////////////////////////////////////////////////// // COMMON +template +FFSM2_CONSTEXPR(14) +void +BitArrayT::set() noexcept { + for (uint8_t& unit : _storage) + unit = UINT8_MAX; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template @@ -59,7 +67,7 @@ BitArrayT::get(const TIndex index) const noexcept { return (_storage[unit] & mask) != 0; } -//------------------------------------------------------------------------------ +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template template @@ -75,7 +83,7 @@ BitArrayT::set(const TIndex index) noexcept { _storage[unit] |= mask; } -//------------------------------------------------------------------------------ +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template template @@ -92,7 +100,28 @@ BitArrayT::clear(const TIndex index) noexcept { } //------------------------------------------------------------------------------ + +template +FFSM2_CONSTEXPR(14) +bool +BitArrayT::operator & (const BitArray& other) const noexcept { + for (Index i = 0; i < UNIT_COUNT; ++i) + if ((_storage[i] & other._storage[i]) == 0) + return false; + + return true; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +template +FFSM2_CONSTEXPR(14) +void +BitArrayT::operator &= (const BitArray& other) noexcept { + for (Index i = 0; i < UNIT_COUNT; ++i) + _storage[i] &= other._storage[i]; +} + //------------------------------------------------------------------------------ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //------------------------------------------------------------------------------ diff --git a/development/ffsm2/detail/containers/task_list.hpp b/development/ffsm2/detail/containers/task_list.hpp index abf431b..6a524ec 100644 --- a/development/ffsm2/detail/containers/task_list.hpp +++ b/development/ffsm2/detail/containers/task_list.hpp @@ -8,6 +8,8 @@ namespace detail { #pragma pack(push, 1) struct TaskBase { + static_assert(sizeof(Long) == sizeof(StateID), ""); + FFSM2_CONSTEXPR(11) TaskBase() noexcept {} FFSM2_CONSTEXPR(11) TaskBase(const StateID origin_, @@ -16,7 +18,7 @@ struct TaskBase { , destination{destination_} {} - static_assert(sizeof(Long) == sizeof(StateID), ""); + FFSM2_CONSTEXPR(11) bool cyclic() const noexcept { return origin == destination; } union { StateID origin = INVALID_STATE_ID; diff --git a/development/ffsm2/detail/root/control.hpp b/development/ffsm2/detail/root/control.hpp index 3246478..ec1f1d7 100644 --- a/development/ffsm2/detail/root/control.hpp +++ b/development/ffsm2/detail/root/control.hpp @@ -342,7 +342,7 @@ class PlanControlT using Control::_core; const Transition& _currentTransition; - Status _status; + TaskStatus _taskStatus; }; //------------------------------------------------------------------------------ @@ -442,7 +442,7 @@ class FullControlBaseT using PlanControl::_core; using PlanControl::_originId; - using PlanControl::_status; + using PlanControl::_taskStatus; bool _locked = false; }; @@ -514,7 +514,7 @@ class FullControlT FFSM2_CONSTEXPR(14) void updatePlan(TState& headState, - const Status subStatus) noexcept; + const TaskStatus subStatus) noexcept; #endif @@ -553,7 +553,7 @@ class FullControlT FFSM2_CONSTEXPR(14) void updatePlan(TState& headState, - const Status subStatus) noexcept; + const TaskStatus subStatus) noexcept; #endif @@ -628,7 +628,7 @@ class FullControlT::resetRegion() noexcept { - _status.clear(); + _taskStatus.clear(); } //////////////////////////////////////////////////////////////////////////////// @@ -124,7 +124,7 @@ template FFSM2_CONSTEXPR(14) void FullControlBaseT::succeed(const StateID stateId_) noexcept { - _status.result = Status::Result::SUCCESS; + _taskStatus.result = TaskStatus::SUCCESS; _core.planData.tasksSuccesses.set(stateId_); @@ -137,7 +137,7 @@ template FFSM2_CONSTEXPR(14) void FullControlBaseT::fail(const StateID stateId_) noexcept { - _status.result = Status::Result::FAILURE; + _taskStatus.result = TaskStatus::FAILURE; _core.planData.tasksFailures.set(stateId_); @@ -155,37 +155,44 @@ template FFSM2_CONSTEXPR(14) void FullControlT>::updatePlan(TState& headState, - const Status subStatus) noexcept + const TaskStatus subStatus) noexcept { FFSM2_ASSERT(subStatus); - if (subStatus.result == Status::Result::FAILURE) { - _status.result = Status::Result::FAILURE; + if (subStatus.result == TaskStatus::FAILURE) { + _taskStatus.result = TaskStatus::FAILURE; headState.wrapPlanFailed(*this); plan().clear(); - } else if (subStatus.result == Status::Result::SUCCESS) { + } else if (subStatus.result == TaskStatus::SUCCESS) { if (Plan p = plan()) { + TasksBits successesToClear; + successesToClear.set(); + for (auto it = p.first(); it && isActive(it->origin); ++it) { if (_core.planData.tasksSuccesses.get(it->origin)) { - Origin origin{*this, it->origin}; + Origin origin{*this, it->origin}; // SPECIFIC if (const Payload* const payload = it->payload()) changeWith(it->destination, *it->payload()); else changeTo (it->destination); - _core.planData.tasksSuccesses.clear(it->origin); - it.remove(); + if (it->cyclic()) + _core.planData.tasksSuccesses.clear(it->origin); // SPECIFIC + else + successesToClear.clear(it->origin); - break; + it.remove(); } } + + _core.planData.tasksSuccesses &= successesToClear; } else { - _status.result = Status::Result::SUCCESS; + _taskStatus.result = TaskStatus::SUCCESS; headState.wrapPlanSucceeded(*this); plan().clear(); @@ -225,33 +232,41 @@ template FFSM2_CONSTEXPR(14) void FullControlT>::updatePlan(TState& headState, - const Status subStatus) noexcept + const TaskStatus subStatus) noexcept { FFSM2_ASSERT(subStatus); - if (subStatus.result == Status::Result::FAILURE) { - _status.result = Status::Result::FAILURE; + if (subStatus.result == TaskStatus::FAILURE) { + _taskStatus.result = TaskStatus::FAILURE; headState.wrapPlanFailed(*this); plan().clear(); - } else if (subStatus.result == Status::Result::SUCCESS) { + } else if (subStatus.result == TaskStatus::SUCCESS) { if (Plan p = plan()) { + TasksBits successesToClear; + successesToClear.set(); + for (auto it = p.first(); it && isActive(it->origin); ++it) { if (_core.planData.tasksSuccesses.get(it->origin)) { - Origin origin{*this, it->origin}; + Origin origin{*this, it->origin}; // SPECIFIC + changeTo(it->destination); - _core.planData.tasksSuccesses.clear(it->origin); - it.remove(); + if (it->cyclic()) + _core.planData.tasksSuccesses.clear(it->origin); // SPECIFIC + else + successesToClear.clear(it->origin); - break; + it.remove(); } } + + _core.planData.tasksSuccesses &= successesToClear; } else { - _status.result = Status::Result::SUCCESS; + _taskStatus.result = TaskStatus::SUCCESS; headState.wrapPlanSucceeded(*this); plan().clear(); diff --git a/development/ffsm2/detail/root/plan_data.hpp b/development/ffsm2/detail/root/plan_data.hpp index af6244c..2ca0c95 100644 --- a/development/ffsm2/detail/root/plan_data.hpp +++ b/development/ffsm2/detail/root/plan_data.hpp @@ -5,8 +5,8 @@ namespace detail { #pragma pack(push, 1) -struct Status final { - enum class Result { +struct TaskStatus final { + enum Result { NONE, SUCCESS, FAILURE @@ -14,7 +14,7 @@ struct Status final { Result result = Result::NONE; - FFSM2_CONSTEXPR(11) Status(const Result result_ = Result::NONE) noexcept; + FFSM2_CONSTEXPR(11) TaskStatus(const Result result_ = Result::NONE) noexcept; FFSM2_CONSTEXPR(11) explicit operator bool() const noexcept; @@ -25,8 +25,8 @@ struct Status final { //------------------------------------------------------------------------------ -FFSM2_CONSTEXPR(14) Status operator | (Status& lhs, const Status rhs) noexcept; -FFSM2_CONSTEXPR(14) Status& operator |= (Status& lhs, const Status rhs) noexcept; +FFSM2_CONSTEXPR(14) TaskStatus operator | (TaskStatus& l, const TaskStatus r) noexcept; +FFSM2_CONSTEXPR(14) TaskStatus& operator |= (TaskStatus& l, const TaskStatus r) noexcept; //////////////////////////////////////////////////////////////////////////////// @@ -103,8 +103,8 @@ struct PlanDataT rhs.result ? + const TaskStatus::Result result = lhs.result > rhs.result ? lhs.result : rhs.result; - return Status{result}; + return TaskStatus{result}; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) -Status& -operator |= (Status& lhs, - const Status rhs) noexcept +TaskStatus& +operator |= (TaskStatus& lhs, + const TaskStatus rhs) noexcept { - const Status::Result result = lhs.result > rhs.result ? + const TaskStatus::Result result = lhs.result > rhs.result ? lhs.result : rhs.result; - lhs = Status{result}; + lhs = TaskStatus{result}; return lhs; } diff --git a/development/ffsm2/detail/structure/composite.hpp b/development/ffsm2/detail/structure/composite.hpp index ec4467e..0ccb1dc 100644 --- a/development/ffsm2/detail/structure/composite.hpp +++ b/development/ffsm2/detail/structure/composite.hpp @@ -48,52 +48,52 @@ struct FFSM2_EMPTY_BASES C_ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(11) static Short& compoRequested ( Control& control) noexcept { return control._core.registry.requested; } + FFSM2_CONSTEXPR(11) static Short& compoRequested ( Control& control) noexcept { return control._core.registry.requested; } - FFSM2_CONSTEXPR(11) static Short& compoActive ( Control& control) noexcept { return control._core.registry.active; } - FFSM2_CONSTEXPR(11) static Short compoActive (ConstControl& control) noexcept { return control._core.registry.active; } + FFSM2_CONSTEXPR(11) static Short& compoActive ( Control& control) noexcept { return control._core.registry.active; } + FFSM2_CONSTEXPR(11) static Short compoActive (ConstControl& control) noexcept { return control._core.registry.active; } #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(11) static Status& headStatus ( Control& control) noexcept { return control._core.planData.headStatus; } - FFSM2_CONSTEXPR(11) static Status& subStatus ( Control& control) noexcept { return control._core.planData.subStatus; } + FFSM2_CONSTEXPR(11) static TaskStatus& headStatus ( Control& control) noexcept { return control._core.planData.headStatus; } + FFSM2_CONSTEXPR(11) static TaskStatus& subStatus ( Control& control) noexcept { return control._core.planData.subStatus; } #endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) bool deepForwardEntryGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepForwardEntryGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepPreUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepPostUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepPreUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepPostUpdate ( FullControl& control ) noexcept; template - FFSM2_CONSTEXPR(14) void deepPreReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) void deepPreReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) void deepReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepPostReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) void deepPostReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; + FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) void deepUpdatePlans ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepUpdatePlans ( FullControl& control ) noexcept; #endif - FFSM2_CONSTEXPR(14) bool deepForwardExitGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepForwardExitGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) void deepChangeToRequested ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepChangeToRequested ( PlanControl& control ) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -101,8 +101,8 @@ struct FFSM2_EMPTY_BASES C_ using WriteStream = typename Args::WriteStream; using ReadStream = typename Args::ReadStream; - FFSM2_CONSTEXPR(14) void deepSaveActive (const Registry& registry, WriteStream& stream) const noexcept; - FFSM2_CONSTEXPR(14) void deepLoadRequested ( Registry& registry, ReadStream& stream) const noexcept; + FFSM2_CONSTEXPR(14) void deepSaveActive (const Registry& registry, WriteStream& stream) const noexcept; + FFSM2_CONSTEXPR(14) void deepLoadRequested ( Registry& registry, ReadStream& stream) const noexcept; #endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/development/ffsm2/detail/structure/composite.inl b/development/ffsm2/detail/structure/composite.inl index 6515f93..4e336f8 100644 --- a/development/ffsm2/detail/structure/composite.inl +++ b/development/ffsm2/detail/structure/composite.inl @@ -75,7 +75,7 @@ C_::deepPreUpdate(FullControl& control) noexcept { ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPreUpdate(control); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -96,7 +96,7 @@ C_::deepUpdate(FullControl& control) noexcept { ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepUpdate(control); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -120,7 +120,7 @@ C_::deepPostUpdate(FullControl& control) noexcept { FFSM2_IF_PLANS(subStatus(control) |=) SubStates::widePostUpdate(control, active); - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPostUpdate(control); FFSM2_IF_PLANS(headStatus(control) |= h); } @@ -141,7 +141,7 @@ C_::deepPreReact(FullControl& control, ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPreReact(control, event); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -165,7 +165,7 @@ C_::deepReact(FullControl& control, ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepReact(control, event); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -192,7 +192,7 @@ C_::deepPostReact(FullControl& control, FFSM2_IF_PLANS(subStatus(control) |=) SubStates::widePostReact(control, event, active); - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPostReact(control, event); FFSM2_IF_PLANS(headStatus(control) |= h); } @@ -226,7 +226,7 @@ C_::deepUpdatePlans(FullControl& control) noexcept { const Short active = compoActive(control); FFSM2_ASSERT(active < WIDTH); - const Status s = subStatus(control) | + const TaskStatus s = subStatus(control) | SubStates::wideUpdatePlans(control, active); const bool planExists = control._core.planData.planExists; diff --git a/development/ffsm2/detail/structure/composite_sub.hpp b/development/ffsm2/detail/structure/composite_sub.hpp index 6c393c4..e9713dd 100644 --- a/development/ffsm2/detail/structure/composite_sub.hpp +++ b/development/ffsm2/detail/structure/composite_sub.hpp @@ -50,38 +50,38 @@ struct FFSM2_EMPTY_BASES CS_ - FFSM2_CONSTEXPR(14) Status widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; + FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) Status wideUpdatePlans ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideUpdatePlans ( FullControl& control, const Short prong) noexcept; #endif - FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }; @@ -119,38 +119,38 @@ struct CS_ - FFSM2_CONSTEXPR(14) Status widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; + FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) Status wideUpdatePlans ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideUpdatePlans ( FullControl& control, const Short prong) noexcept; #endif - FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }; diff --git a/development/ffsm2/detail/structure/composite_sub_1.inl b/development/ffsm2/detail/structure/composite_sub_1.inl index bb2cad1..7b64372 100644 --- a/development/ffsm2/detail/structure/composite_sub_1.inl +++ b/development/ffsm2/detail/structure/composite_sub_1.inl @@ -54,7 +54,7 @@ CS_>::wideReenter(PlanControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreUpdate(FullControl& control, const Short prong) noexcept { @@ -69,7 +69,7 @@ CS_>::widePreUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdate(FullControl& control, const Short prong) noexcept { @@ -84,7 +84,7 @@ CS_>::wideUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostUpdate(FullControl& control, const Short prong) noexcept { @@ -100,7 +100,7 @@ CS_>::widePostUpdate(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreReact(FullControl& control, const TEvent& event, const Short prong) noexcept @@ -117,7 +117,7 @@ CS_>::widePreReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideReact(FullControl& control, const TEvent& event, const Short prong) noexcept @@ -134,7 +134,7 @@ CS_>::wideReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostReact(FullControl& control, const TEvent& event, const Short prong) noexcept @@ -169,7 +169,7 @@ CS_>::wideQuery(ConstControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdatePlans(FullControl& control, const Short prong) noexcept { diff --git a/development/ffsm2/detail/structure/composite_sub_2.inl b/development/ffsm2/detail/structure/composite_sub_2.inl index 51ef488..48bcc93 100644 --- a/development/ffsm2/detail/structure/composite_sub_2.inl +++ b/development/ffsm2/detail/structure/composite_sub_2.inl @@ -45,7 +45,7 @@ CS_>::wideReenter(PlanControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreUpdate(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -58,7 +58,7 @@ CS_>::widePreUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdate(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -71,7 +71,7 @@ CS_>::wideUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostUpdate(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -85,7 +85,7 @@ CS_>::widePostUpdate(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreReact(FullControl& control, const TEvent& event, const Short FFSM2_IF_ASSERT(prong)) noexcept @@ -100,7 +100,7 @@ CS_>::widePreReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideReact(FullControl& control, const TEvent& event, const Short FFSM2_IF_ASSERT(prong)) noexcept @@ -115,7 +115,7 @@ CS_>::wideReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostReact(FullControl& control, const TEvent& event, const Short FFSM2_IF_ASSERT(prong)) noexcept @@ -146,7 +146,7 @@ CS_>::wideQuery(ConstControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdatePlans(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { diff --git a/development/ffsm2/detail/structure/state.hpp b/development/ffsm2/detail/structure/state.hpp index d68198b..9c6ab12 100644 --- a/development/ffsm2/detail/structure/state.hpp +++ b/development/ffsm2/detail/structure/state.hpp @@ -42,47 +42,47 @@ struct S_ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) Status deepPreUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) Status deepUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) Status deepPostUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPreUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPostUpdate ( FullControl& control ) noexcept; template - FFSM2_CONSTEXPR(14) Status deepPreReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPreReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) Status deepReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) Status deepPostReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPostReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; + FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) Status deepUpdatePlans ( FullControl& control) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepUpdatePlans ( FullControl& control) noexcept; #endif - FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) void wrapPlanSucceeded ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void wrapPlanFailed ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void wrapPlanSucceeded ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void wrapPlanFailed ( FullControl& control ) noexcept; #endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FFSM2_CONSTEXPR(14) void deepChangeToRequested( Control& ) noexcept {} + FFSM2_CONSTEXPR(14) void deepChangeToRequested( Control& ) noexcept {} // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/development/ffsm2/detail/structure/state.inl b/development/ffsm2/detail/structure/state.inl index b488189..fbd51fa 100644 --- a/development/ffsm2/detail/structure/state.inl +++ b/development/ffsm2/detail/structure/state.inl @@ -57,7 +57,7 @@ S_::deepReenter(PlanControl& control) noexcept { template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPreUpdate(FullControl& control) noexcept { FFSM2_LOG_STATE_METHOD(&Head::preUpdate, Method::PRE_UPDATE); @@ -67,14 +67,14 @@ S_::deepPreUpdate(FullControl& control) noexcept { Head::widePreUpdate(control); Head:: preUpdate(control); - return control._status; + return control._taskStatus; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepUpdate(FullControl& control) noexcept { FFSM2_LOG_STATE_METHOD(&Head::update, Method::UPDATE); @@ -84,14 +84,14 @@ S_::deepUpdate(FullControl& control) noexcept { Head::wideUpdate(control); Head:: update(control); - return control._status; + return control._taskStatus; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPostUpdate(FullControl& control) noexcept { FFSM2_LOG_STATE_METHOD(&Head::postUpdate, Method::POST_UPDATE); @@ -101,7 +101,7 @@ S_::deepPostUpdate(FullControl& control) noexcept { Head:: postUpdate(control); Head::widePostUpdate(control); - return control._status; + return control._taskStatus; } //------------------------------------------------------------------------------ @@ -109,7 +109,7 @@ S_::deepPostUpdate(FullControl& control) noexcept { template template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPreReact(FullControl& control, const TEvent& event) noexcept { @@ -123,7 +123,7 @@ S_::deepPreReact(FullControl& control, Head::widePreReact(event, control); (this->*method) (event, control); - return control._status; + return control._taskStatus; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -131,7 +131,7 @@ S_::deepPreReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepReact(FullControl& control, const TEvent& event) noexcept { @@ -145,7 +145,7 @@ S_::deepReact(FullControl& control, Head::wideReact(event, control); (this->*method)(event, control); - return control._status; + return control._taskStatus; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -153,7 +153,7 @@ S_::deepReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPostReact(FullControl& control, const TEvent& event) noexcept { @@ -167,7 +167,7 @@ S_::deepPostReact(FullControl& control, (this->*method) (event, control); Head::widePostReact(event, control); - return control._status; + return control._taskStatus; } //------------------------------------------------------------------------------ @@ -196,15 +196,15 @@ S_::deepQuery(ConstControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepUpdatePlans(FullControl& control) noexcept { if (control._core.planData.tasksFailures .get(STATE_ID)) - return Status{Status::Result::FAILURE}; + return TaskStatus{TaskStatus::FAILURE}; else if (control._core.planData.tasksSuccesses.get(STATE_ID)) - return Status{Status::Result::SUCCESS}; + return TaskStatus{TaskStatus::SUCCESS}; else - return Status{}; + return TaskStatus{}; } #endif diff --git a/development/ffsm2/machine_dev.hpp b/development/ffsm2/machine_dev.hpp index cce4864..cd99ef5 100644 --- a/development/ffsm2/machine_dev.hpp +++ b/development/ffsm2/machine_dev.hpp @@ -1,5 +1,5 @@ // FFSM2 (flat state machine for games and interactive applications) -// 2.3.0 (2023-06-08) +// 2.3.1 (2023-09-23) // // Created by Andrew Gresyk // @@ -33,7 +33,7 @@ #define FFSM2_VERSION_MAJOR 2 #define FFSM2_VERSION_MINOR 3 -#define FFSM2_VERSION_PATCH 0 +#define FFSM2_VERSION_PATCH 1 #define FFSM2_VERSION (10000 * FFSM2_VERSION_MAJOR + 100 * FFSM2_VERSION_MINOR + FFSM2_VERSION_PATCH) diff --git a/include/ffsm2/machine.hpp b/include/ffsm2/machine.hpp index 84d80ba..7901222 100644 --- a/include/ffsm2/machine.hpp +++ b/include/ffsm2/machine.hpp @@ -1,5 +1,5 @@ // FFSM2 (flat state machine for games and interactive applications) -// 2.3.0 (2023-06-08) +// 2.3.1 (2023-09-23) // // Created by Andrew Gresyk // @@ -33,7 +33,7 @@ #define FFSM2_VERSION_MAJOR 2 #define FFSM2_VERSION_MINOR 3 -#define FFSM2_VERSION_PATCH 0 +#define FFSM2_VERSION_PATCH 1 #define FFSM2_VERSION (10000 * FFSM2_VERSION_MAJOR + 100 * FFSM2_VERSION_MINOR + FFSM2_VERSION_PATCH) @@ -1525,9 +1525,13 @@ class BitArrayT final { static constexpr Index CAPACITY = NCapacity; static constexpr Index UNIT_COUNT = contain(CAPACITY, 8); + using BitArray = BitArrayT; + public: FFSM2_CONSTEXPR(14) BitArrayT() noexcept { clear(); } + FFSM2_CONSTEXPR(14) void set() noexcept; + FFSM2_CONSTEXPR(14) void clear() noexcept; FFSM2_CONSTEXPR(14) bool empty() const noexcept; @@ -1541,6 +1545,10 @@ class BitArrayT final { template FFSM2_CONSTEXPR(14) void clear(const TIndex index) noexcept; + FFSM2_CONSTEXPR(14) bool operator & (const BitArray& other) const noexcept; + + FFSM2_CONSTEXPR(14) void operator &= (const BitArray& other) noexcept; + private: uint8_t _storage[UNIT_COUNT] {}; }; @@ -1564,6 +1572,14 @@ class BitArrayT<0> final { namespace ffsm2 { namespace detail { +template +FFSM2_CONSTEXPR(14) +void +BitArrayT::set() noexcept { + for (uint8_t& unit : _storage) + unit = UINT8_MAX; +} + template FFSM2_CONSTEXPR(14) void @@ -1625,6 +1641,25 @@ BitArrayT::clear(const TIndex index) noexcept { _storage[unit] &= ~mask; } +template +FFSM2_CONSTEXPR(14) +bool +BitArrayT::operator & (const BitArray& other) const noexcept { + for (Index i = 0; i < UNIT_COUNT; ++i) + if ((_storage[i] & other._storage[i]) == 0) + return false; + + return true; +} + +template +FFSM2_CONSTEXPR(14) +void +BitArrayT::operator &= (const BitArray& other) noexcept { + for (Index i = 0; i < UNIT_COUNT; ++i) + _storage[i] &= other._storage[i]; +} + } } @@ -1638,6 +1673,8 @@ namespace detail { #pragma pack(push, 1) struct TaskBase { + static_assert(sizeof(Long) == sizeof(StateID), ""); + FFSM2_CONSTEXPR(11) TaskBase() noexcept {} FFSM2_CONSTEXPR(11) TaskBase(const StateID origin_, @@ -1646,7 +1683,7 @@ struct TaskBase { , destination{destination_} {} - static_assert(sizeof(Long) == sizeof(StateID), ""); + FFSM2_CONSTEXPR(11) bool cyclic() const noexcept { return origin == destination; } union { StateID origin = INVALID_STATE_ID; @@ -1975,8 +2012,8 @@ namespace detail { #pragma pack(push, 1) -struct Status final { - enum class Result { +struct TaskStatus final { + enum Result { NONE, SUCCESS, FAILURE @@ -1984,7 +2021,7 @@ struct Status final { Result result = Result::NONE; - FFSM2_CONSTEXPR(11) Status(const Result result_ = Result::NONE) noexcept; + FFSM2_CONSTEXPR(11) TaskStatus(const Result result_ = Result::NONE) noexcept; FFSM2_CONSTEXPR(11) explicit operator bool() const noexcept; @@ -1993,8 +2030,8 @@ struct Status final { #pragma pack(pop) -FFSM2_CONSTEXPR(14) Status operator | (Status& lhs, const Status rhs) noexcept; -FFSM2_CONSTEXPR(14) Status& operator |= (Status& lhs, const Status rhs) noexcept; +FFSM2_CONSTEXPR(14) TaskStatus operator | (TaskStatus& l, const TaskStatus r) noexcept; +FFSM2_CONSTEXPR(14) TaskStatus& operator |= (TaskStatus& l, const TaskStatus r) noexcept; #if FFSM2_PLANS_AVAILABLE() @@ -2063,8 +2100,8 @@ struct PlanDataT rhs.result ? + const TaskStatus::Result result = lhs.result > rhs.result ? lhs.result : rhs.result; - return Status{result}; + return TaskStatus{result}; } FFSM2_CONSTEXPR(14) -Status& -operator |= (Status& lhs, - const Status rhs) noexcept +TaskStatus& +operator |= (TaskStatus& lhs, + const TaskStatus rhs) noexcept { - const Status::Result result = lhs.result > rhs.result ? + const TaskStatus::Result result = lhs.result > rhs.result ? lhs.result : rhs.result; - lhs = Status{result}; + lhs = TaskStatus{result}; return lhs; } @@ -3372,7 +3409,7 @@ class PlanControlT using Control::_core; const Transition& _currentTransition; - Status _status; + TaskStatus _taskStatus; }; template @@ -3456,7 +3493,7 @@ class FullControlBaseT using PlanControl::_core; using PlanControl::_originId; - using PlanControl::_status; + using PlanControl::_taskStatus; bool _locked = false; }; @@ -3522,7 +3559,7 @@ class FullControlT FFSM2_CONSTEXPR(14) void updatePlan(TState& headState, - const Status subStatus) noexcept; + const TaskStatus subStatus) noexcept; #endif @@ -3553,7 +3590,7 @@ class FullControlT FFSM2_CONSTEXPR(14) void updatePlan(TState& headState, - const Status subStatus) noexcept; + const TaskStatus subStatus) noexcept; #endif @@ -3624,7 +3661,7 @@ class FullControlT @@ -3748,7 +3785,7 @@ FFSM2_CONSTEXPR(14) void PlanControlT::resetRegion() noexcept { - _status.clear(); + _taskStatus.clear(); } template @@ -3784,7 +3821,7 @@ template FFSM2_CONSTEXPR(14) void FullControlBaseT::succeed(const StateID stateId_) noexcept { - _status.result = Status::Result::SUCCESS; + _taskStatus.result = TaskStatus::SUCCESS; _core.planData.tasksSuccesses.set(stateId_); @@ -3795,7 +3832,7 @@ template FFSM2_CONSTEXPR(14) void FullControlBaseT::fail(const StateID stateId_) noexcept { - _status.result = Status::Result::FAILURE; + _taskStatus.result = TaskStatus::FAILURE; _core.planData.tasksFailures.set(stateId_); @@ -3811,37 +3848,44 @@ template FFSM2_CONSTEXPR(14) void FullControlT>::updatePlan(TState& headState, - const Status subStatus) noexcept + const TaskStatus subStatus) noexcept { FFSM2_ASSERT(subStatus); - if (subStatus.result == Status::Result::FAILURE) { - _status.result = Status::Result::FAILURE; + if (subStatus.result == TaskStatus::FAILURE) { + _taskStatus.result = TaskStatus::FAILURE; headState.wrapPlanFailed(*this); plan().clear(); - } else if (subStatus.result == Status::Result::SUCCESS) { + } else if (subStatus.result == TaskStatus::SUCCESS) { if (Plan p = plan()) { + TasksBits successesToClear; + successesToClear.set(); + for (auto it = p.first(); it && isActive(it->origin); ++it) { if (_core.planData.tasksSuccesses.get(it->origin)) { - Origin origin{*this, it->origin}; + Origin origin{*this, it->origin}; // SPECIFIC if (const Payload* const payload = it->payload()) changeWith(it->destination, *it->payload()); else changeTo (it->destination); - _core.planData.tasksSuccesses.clear(it->origin); - it.remove(); + if (it->cyclic()) + _core.planData.tasksSuccesses.clear(it->origin); // SPECIFIC + else + successesToClear.clear(it->origin); - break; + it.remove(); } } + + _core.planData.tasksSuccesses &= successesToClear; } else { - _status.result = Status::Result::SUCCESS; + _taskStatus.result = TaskStatus::SUCCESS; headState.wrapPlanSucceeded(*this); plan().clear(); @@ -3871,33 +3915,41 @@ template FFSM2_CONSTEXPR(14) void FullControlT>::updatePlan(TState& headState, - const Status subStatus) noexcept + const TaskStatus subStatus) noexcept { FFSM2_ASSERT(subStatus); - if (subStatus.result == Status::Result::FAILURE) { - _status.result = Status::Result::FAILURE; + if (subStatus.result == TaskStatus::FAILURE) { + _taskStatus.result = TaskStatus::FAILURE; headState.wrapPlanFailed(*this); plan().clear(); - } else if (subStatus.result == Status::Result::SUCCESS) { + } else if (subStatus.result == TaskStatus::SUCCESS) { if (Plan p = plan()) { + TasksBits successesToClear; + successesToClear.set(); + for (auto it = p.first(); it && isActive(it->origin); ++it) { if (_core.planData.tasksSuccesses.get(it->origin)) { - Origin origin{*this, it->origin}; + Origin origin{*this, it->origin}; // SPECIFIC + changeTo(it->destination); - _core.planData.tasksSuccesses.clear(it->origin); - it.remove(); + if (it->cyclic()) + _core.planData.tasksSuccesses.clear(it->origin); // SPECIFIC + else + successesToClear.clear(it->origin); - break; + it.remove(); } } + + _core.planData.tasksSuccesses &= successesToClear; } else { - _status.result = Status::Result::SUCCESS; + _taskStatus.result = TaskStatus::SUCCESS; headState.wrapPlanSucceeded(*this); plan().clear(); @@ -4382,41 +4434,41 @@ struct S_ using Head = THead; - FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) Status deepPreUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) Status deepUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) Status deepPostUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPreUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPostUpdate ( FullControl& control ) noexcept; template - FFSM2_CONSTEXPR(14) Status deepPreReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPreReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) Status deepReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) Status deepPostReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepPostReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; + FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) Status deepUpdatePlans ( FullControl& control) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus deepUpdatePlans ( FullControl& control) noexcept; #endif - FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) void wrapPlanSucceeded ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void wrapPlanFailed ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void wrapPlanSucceeded ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void wrapPlanFailed ( FullControl& control ) noexcept; #endif - FFSM2_CONSTEXPR(14) void deepChangeToRequested( Control& ) noexcept {} + FFSM2_CONSTEXPR(14) void deepChangeToRequested( Control& ) noexcept {} #if FFSM2_DEBUG_STATE_TYPE_AVAILABLE() || FFSM2_STRUCTURE_REPORT_AVAILABLE() || FFSM2_LOG_INTERFACE_AVAILABLE() @@ -4524,7 +4576,7 @@ S_::deepReenter(PlanControl& control) noexcept { template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPreUpdate(FullControl& control) noexcept { FFSM2_LOG_STATE_METHOD(&Head::preUpdate, Method::PRE_UPDATE); @@ -4534,12 +4586,12 @@ S_::deepPreUpdate(FullControl& control) noexcept { Head::widePreUpdate(control); Head:: preUpdate(control); - return control._status; + return control._taskStatus; } template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepUpdate(FullControl& control) noexcept { FFSM2_LOG_STATE_METHOD(&Head::update, Method::UPDATE); @@ -4549,12 +4601,12 @@ S_::deepUpdate(FullControl& control) noexcept { Head::wideUpdate(control); Head:: update(control); - return control._status; + return control._taskStatus; } template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPostUpdate(FullControl& control) noexcept { FFSM2_LOG_STATE_METHOD(&Head::postUpdate, Method::POST_UPDATE); @@ -4564,13 +4616,13 @@ S_::deepPostUpdate(FullControl& control) noexcept { Head:: postUpdate(control); Head::widePostUpdate(control); - return control._status; + return control._taskStatus; } template template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPreReact(FullControl& control, const TEvent& event) noexcept { @@ -4584,13 +4636,13 @@ S_::deepPreReact(FullControl& control, Head::widePreReact(event, control); (this->*method) (event, control); - return control._status; + return control._taskStatus; } template template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepReact(FullControl& control, const TEvent& event) noexcept { @@ -4604,13 +4656,13 @@ S_::deepReact(FullControl& control, Head::wideReact(event, control); (this->*method)(event, control); - return control._status; + return control._taskStatus; } template template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepPostReact(FullControl& control, const TEvent& event) noexcept { @@ -4624,7 +4676,7 @@ S_::deepPostReact(FullControl& control, (this->*method) (event, control); Head::widePostReact(event, control); - return control._status; + return control._taskStatus; } template @@ -4649,15 +4701,15 @@ S_::deepQuery(ConstControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus S_::deepUpdatePlans(FullControl& control) noexcept { if (control._core.planData.tasksFailures .get(STATE_ID)) - return Status{Status::Result::FAILURE}; + return TaskStatus{TaskStatus::FAILURE}; else if (control._core.planData.tasksSuccesses.get(STATE_ID)) - return Status{Status::Result::SUCCESS}; + return TaskStatus{TaskStatus::SUCCESS}; else - return Status{}; + return TaskStatus{}; } #endif @@ -5011,36 +5063,36 @@ struct FFSM2_EMPTY_BASES CS_; - FFSM2_CONSTEXPR(14) bool wideEntryGuard (GuardControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) bool wideEntryGuard (GuardControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideEnter ( PlanControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideReenter ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideEnter ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideReenter ( PlanControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) Status widePreUpdate ( FullControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) Status wideUpdate ( FullControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) Status widePostUpdate ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePreUpdate ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideUpdate ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePostUpdate ( FullControl& control, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; + FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) Status wideUpdatePlans ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideUpdatePlans ( FullControl& control, const Short prong) noexcept; #endif - FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; }; @@ -5072,36 +5124,36 @@ struct CS_; - FFSM2_CONSTEXPR(14) bool wideEntryGuard (GuardControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) bool wideEntryGuard (GuardControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideEnter ( PlanControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideReenter ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideEnter ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideReenter ( PlanControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) Status widePreUpdate ( FullControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) Status wideUpdate ( FullControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) Status widePostUpdate ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePreUpdate ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideUpdate ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePostUpdate ( FullControl& control, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePreReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) Status widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus widePostReact ( FullControl& control, const TEvent& event, const Short prong) noexcept; template - FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; + FFSM2_CONSTEXPR(14) void wideQuery (ConstControl& control, TEvent& event, const Short prong) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) Status wideUpdatePlans ( FullControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) TaskStatus wideUpdatePlans ( FullControl& control, const Short prong) noexcept; #endif - FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) bool wideExitGuard (GuardControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideExit ( PlanControl& control, const Short prong) noexcept; - FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; + FFSM2_CONSTEXPR(14) void wideChangeToRequested( PlanControl& control, const Short prong) noexcept; }; @@ -5156,7 +5208,7 @@ CS_>::wideReenter(PlanControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreUpdate(FullControl& control, const Short prong) noexcept { @@ -5169,7 +5221,7 @@ CS_>::widePreUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdate(FullControl& control, const Short prong) noexcept { @@ -5182,7 +5234,7 @@ CS_>::wideUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostUpdate(FullControl& control, const Short prong) noexcept { @@ -5196,7 +5248,7 @@ CS_>::widePostUpdate(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreReact(FullControl& control, const TEvent& event, const Short prong) noexcept @@ -5211,7 +5263,7 @@ CS_>::widePreReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideReact(FullControl& control, const TEvent& event, const Short prong) noexcept @@ -5226,7 +5278,7 @@ CS_>::wideReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostReact(FullControl& control, const TEvent& event, const Short prong) noexcept @@ -5257,7 +5309,7 @@ CS_>::wideQuery(ConstControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdatePlans(FullControl& control, const Short prong) noexcept { @@ -5353,7 +5405,7 @@ CS_>::wideReenter(PlanControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreUpdate(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -5364,7 +5416,7 @@ CS_>::widePreUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdate(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -5375,7 +5427,7 @@ CS_>::wideUpdate(FullControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostUpdate(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -5387,7 +5439,7 @@ CS_>::widePostUpdate(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePreReact(FullControl& control, const TEvent& event, const Short FFSM2_IF_ASSERT(prong)) noexcept @@ -5400,7 +5452,7 @@ CS_>::widePreReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideReact(FullControl& control, const TEvent& event, const Short FFSM2_IF_ASSERT(prong)) noexcept @@ -5413,7 +5465,7 @@ CS_>::wideReact(FullControl& control, template template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::widePostReact(FullControl& control, const TEvent& event, const Short FFSM2_IF_ASSERT(prong)) noexcept @@ -5440,7 +5492,7 @@ CS_>::wideQuery(ConstControl& control, template FFSM2_CONSTEXPR(14) -Status +TaskStatus CS_>::wideUpdatePlans(FullControl& control, const Short FFSM2_IF_ASSERT(prong)) noexcept { @@ -5522,55 +5574,55 @@ struct FFSM2_EMPTY_BASES C_ static constexpr Short WIDTH_BITS = Info::WIDTH_BITS; #endif - FFSM2_CONSTEXPR(11) static Short& compoRequested ( Control& control) noexcept { return control._core.registry.requested; } + FFSM2_CONSTEXPR(11) static Short& compoRequested ( Control& control) noexcept { return control._core.registry.requested; } - FFSM2_CONSTEXPR(11) static Short& compoActive ( Control& control) noexcept { return control._core.registry.active; } - FFSM2_CONSTEXPR(11) static Short compoActive (ConstControl& control) noexcept { return control._core.registry.active; } + FFSM2_CONSTEXPR(11) static Short& compoActive ( Control& control) noexcept { return control._core.registry.active; } + FFSM2_CONSTEXPR(11) static Short compoActive (ConstControl& control) noexcept { return control._core.registry.active; } #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(11) static Status& headStatus ( Control& control) noexcept { return control._core.planData.headStatus; } - FFSM2_CONSTEXPR(11) static Status& subStatus ( Control& control) noexcept { return control._core.planData.subStatus; } + FFSM2_CONSTEXPR(11) static TaskStatus& headStatus ( Control& control) noexcept { return control._core.planData.headStatus; } + FFSM2_CONSTEXPR(11) static TaskStatus& subStatus ( Control& control) noexcept { return control._core.planData.subStatus; } #endif - FFSM2_CONSTEXPR(14) bool deepForwardEntryGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepForwardEntryGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepEntryGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepEnter ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepReenter ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepPreUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepUpdate ( FullControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepPostUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepPreUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepUpdate ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepPostUpdate ( FullControl& control ) noexcept; template - FFSM2_CONSTEXPR(14) void deepPreReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) void deepPreReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) void deepReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepPostReact ( FullControl& control, const TEvent& event) noexcept; + FFSM2_CONSTEXPR(14) void deepPostReact ( FullControl& control, const TEvent& event) noexcept; template - FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; + FFSM2_CONSTEXPR(14) void deepQuery (ConstControl& control, TEvent& event) const noexcept; #if FFSM2_PLANS_AVAILABLE() - FFSM2_CONSTEXPR(14) void deepUpdatePlans ( FullControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepUpdatePlans ( FullControl& control ) noexcept; #endif - FFSM2_CONSTEXPR(14) bool deepForwardExitGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepForwardExitGuard (GuardControl& control ) noexcept; + FFSM2_CONSTEXPR(14) bool deepExitGuard (GuardControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepExit ( PlanControl& control ) noexcept; - FFSM2_CONSTEXPR(14) void deepChangeToRequested ( PlanControl& control ) noexcept; + FFSM2_CONSTEXPR(14) void deepChangeToRequested ( PlanControl& control ) noexcept; #if FFSM2_SERIALIZATION_AVAILABLE() using WriteStream = typename Args::WriteStream; using ReadStream = typename Args::ReadStream; - FFSM2_CONSTEXPR(14) void deepSaveActive (const Registry& registry, WriteStream& stream) const noexcept; - FFSM2_CONSTEXPR(14) void deepLoadRequested ( Registry& registry, ReadStream& stream) const noexcept; + FFSM2_CONSTEXPR(14) void deepSaveActive (const Registry& registry, WriteStream& stream) const noexcept; + FFSM2_CONSTEXPR(14) void deepLoadRequested ( Registry& registry, ReadStream& stream) const noexcept; #endif }; @@ -5642,7 +5694,7 @@ C_::deepPreUpdate(FullControl& control) noexcept { ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPreUpdate(control); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -5661,7 +5713,7 @@ C_::deepUpdate(FullControl& control) noexcept { ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepUpdate(control); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -5683,7 +5735,7 @@ C_::deepPostUpdate(FullControl& control) noexcept { FFSM2_IF_PLANS(subStatus(control) |=) SubStates::widePostUpdate(control, active); - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPostUpdate(control); FFSM2_IF_PLANS(headStatus(control) |= h); } @@ -5702,7 +5754,7 @@ C_::deepPreReact(FullControl& control, ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPreReact(control, event); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -5724,7 +5776,7 @@ C_::deepReact(FullControl& control, ScopedRegion region{control}; - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepReact(control, event); FFSM2_IF_PLANS(headStatus(control) |= h); @@ -5749,7 +5801,7 @@ C_::deepPostReact(FullControl& control, FFSM2_IF_PLANS(subStatus(control) |=) SubStates::widePostReact(control, event, active); - FFSM2_IF_PLANS(const Status h =) + FFSM2_IF_PLANS(const TaskStatus h =) HeadState::deepPostReact(control, event); FFSM2_IF_PLANS(headStatus(control) |= h); } @@ -5779,7 +5831,7 @@ C_::deepUpdatePlans(FullControl& control) noexcept { const Short active = compoActive(control); FFSM2_ASSERT(active < WIDTH); - const Status s = subStatus(control) | + const TaskStatus s = subStatus(control) | SubStates::wideUpdatePlans(control, active); const bool planExists = control._core.planData.planExists;