@@ -915,7 +915,11 @@ template <class TSM>
915915struct transitions_sub <sm<TSM>> {
916916 template <class TEvent , class SM , class TDeps , class TSubs >
917917 static bool execute (const TEvent &event, SM &, TDeps &deps, TSubs &subs, typename SM::state_t &) {
918- return sub_sm<sm_impl<TSM>>::get (&subs).template process_event <TEvent>(event, deps, subs);
918+ return sub_sm<sm_impl<TSM>>::get (&subs).process_event (event, deps, subs);
919+ }
920+ template <class , class SM , class TDeps , class TSubs >
921+ static bool execute (const anonymous &, SM &, TDeps &, TSubs &, typename SM::state_t &) {
922+ return false ;
919923 }
920924};
921925} // namespace back
@@ -1336,14 +1340,7 @@ struct sm_impl : aux::conditional_t<aux::is_empty<typename TSM::sm>::value, aux:
13361340 }
13371341 template <class TEvent , class TDeps , class TSubs >
13381342 bool process_event (const TEvent &event, TDeps &deps, TSubs &subs) {
1339- policies::log_process_event<sm_t >(aux::type<logger_t >{}, deps, event);
1340- #if BOOST_SML_DISABLE_EXCEPTIONS
1341- const auto handled = process_event_impl<get_event_mapping_t <get_generic_t <TEvent>, mappings>>(
1342- event, deps, subs, states_t {}, aux::make_index_sequence<regions>{});
1343- #else
1344- const auto handled =
1345- process_event_noexcept<get_event_mapping_t <get_generic_t <TEvent>, mappings>>(event, deps, subs, has_exceptions{});
1346- #endif
1343+ bool handled = process_internal_events (event, deps, subs);
13471344 do {
13481345 do {
13491346 while (process_internal_events (anonymous{}, deps, subs)) {
@@ -1368,13 +1365,7 @@ struct sm_impl : aux::conditional_t<aux::is_empty<typename TSM::sm>::value, aux:
13681365 }
13691366 template <class TDeps , class TSubs >
13701367 void start (TDeps &deps, TSubs &subs) {
1371- process_internal_events (on_entry<_, initial>{}, deps, subs);
1372- do {
1373- while (process_internal_events (anonymous{}, deps, subs)) {
1374- }
1375- process_defer_events (deps, subs, true , aux::type<defer_queue_t <initial>>{}, events_t {});
1376- } while (process_queued_events (deps, subs, aux::type<process_queue_t <initial>>{}, events_t {}) ||
1377- process_internal_events (anonymous{}, deps, subs));
1368+ process_event (on_entry<_, initial>{}, deps, subs);
13781369 }
13791370 template <class TEvent , class TDeps , class TSubs , class ... Ts,
13801371 __BOOST_SML_REQUIRES (!aux::is_base_of<get_generic_t <TEvent>, events_ids_t >::value &&
@@ -1458,15 +1449,15 @@ struct sm_impl : aux::conditional_t<aux::is_empty<typename TSM::sm>::value, aux:
14581449 aux::index_sequence<Ns...>) {
14591450 const auto lock = thread_safety_.create_lock ();
14601451 (void )lock;
1452+ auto handled = false ;
14611453#if defined(__cpp_fold_expressions)
1462- return (( dispatch_t ::template dispatch<0 , TMappings>(*this , current_state_[Ns], event, deps, subs, states)), ...);
1454+ ((handled |= dispatch_t ::template dispatch<0 , TMappings>(*this , current_state_[Ns], event, deps, subs, states)), ...);
14631455#else
1464- auto handled = false ;
14651456 (void )aux::swallow{
14661457 0 ,
14671458 (handled |= dispatch_t ::template dispatch<0 , TMappings>(*this , current_state_[Ns], event, deps, subs, states), 0 )...};
1468- return handled;
14691459#endif
1460+ return handled;
14701461 }
14711462 template <class TMappings , class TEvent , class TDeps , class TSubs , class ... TStates>
14721463 bool process_event_impl (const TEvent &event, TDeps &deps, TSubs &subs, const aux::type_list<TStates...> &states,
@@ -1522,13 +1513,7 @@ struct sm_impl : aux::conditional_t<aux::is_empty<typename TSM::sm>::value, aux:
15221513 template <class TDeps , class TSubs , class TEvent >
15231514 bool process_event_no_defer (TDeps &deps, TSubs &subs, const void *data) {
15241515 const auto &event = *static_cast <const TEvent *>(data);
1525- policies::log_process_event<sm_t >(aux::type<logger_t >{}, deps, event);
1526- #if BOOST_SML_DISABLE_EXCEPTIONS
1527- const auto handled = process_event_impl<get_event_mapping_t <TEvent, mappings>>(event, deps, subs, states_t {},
1528- aux::make_index_sequence<regions>{});
1529- #else
1530- const auto handled = process_event_noexcept<get_event_mapping_t <TEvent, mappings>>(event, deps, subs, has_exceptions{});
1531- #endif
1516+ bool handled = process_internal_events (event, deps, subs);
15321517 if (handled && defer_again_) {
15331518 ++defer_it_;
15341519 return false ;
@@ -2404,14 +2389,6 @@ void update_current_state(SM &, TDeps &deps, TSubs &subs, typename SM::state_t &
24042389 update_composite_states<back::sm_impl<T>>(subs, typename back::sm_impl<T>::has_history_states{},
24052390 typename back::sm_impl<T>::history_states_t {});
24062391}
2407- template <class TDeps , class TSubs , class TDstState >
2408- void process_internal_transitions (TDeps &, TSubs &, const TDstState &) {}
2409- template <class TDeps , class TSubs , class T >
2410- void process_internal_transitions (TDeps &deps, TSubs &subs, const state<back::sm<T>> &) {
2411- auto &sm = back::sub_sm<back::sm_impl<T>>::get (&subs);
2412- while (sm.process_internal_events (back::anonymous{}, deps, subs)) {
2413- }
2414- }
24152392template <class S1 , class S2 , class E , class G , class A >
24162393struct transition <state<S1>, state<S2>, front::event<E>, G, A> {
24172394 static constexpr auto initial = state<S2>::initial;
@@ -2432,7 +2409,6 @@ struct transition<state<S1>, state<S2>, front::event<E>, G, A> {
24322409 state<dst_state>{});
24332410 call<TEvent, args_t <A, TEvent>, typename SM::logger_t >::execute (a, event, sm, deps, subs);
24342411 sm.process_internal_event (back::on_entry<back::_, TEvent>{event}, deps, subs, current_state);
2435- process_internal_transitions (deps, subs, state<dst_state>{});
24362412 return true ;
24372413 }
24382414 return false ;
@@ -2444,7 +2420,6 @@ struct transition<state<S1>, state<S2>, front::event<E>, G, A> {
24442420 aux::get_id<typename SM::state_t , dst_state>((typename SM::states_ids_t *)0 ), state<src_state>{},
24452421 state<dst_state>{});
24462422 call<TEvent, args_t <A, TEvent>, typename SM::logger_t >::execute (a, event, sm, deps, subs);
2447- process_internal_transitions (deps, subs, state<dst_state>{});
24482423 return true ;
24492424 }
24502425 return false ;
@@ -2493,7 +2468,6 @@ struct transition<state<S1>, state<S2>, front::event<E>, always, A> {
24932468 state<dst_state>{});
24942469 call<TEvent, args_t <A, TEvent>, typename SM::logger_t >::execute (a, event, sm, deps, subs);
24952470 sm.process_internal_event (back::on_entry<back::_, TEvent>{event}, deps, subs, current_state);
2496- process_internal_transitions (deps, subs, state<dst_state>{});
24972471 return true ;
24982472 }
24992473 template <class TEvent , class SM , class TDeps , class TSubs >
@@ -2502,7 +2476,6 @@ struct transition<state<S1>, state<S2>, front::event<E>, always, A> {
25022476 aux::get_id<typename SM::state_t , dst_state>((typename SM::states_ids_t *)0 ), state<src_state>{},
25032477 state<dst_state>{});
25042478 call<TEvent, args_t <A, TEvent>, typename SM::logger_t >::execute (a, event, sm, deps, subs);
2505- process_internal_transitions (deps, subs, state<dst_state>{});
25062479 return true ;
25072480 }
25082481 A a;
@@ -2544,7 +2517,6 @@ struct transition<state<S1>, state<S2>, front::event<E>, G, none> {
25442517 aux::get_id<typename SM::state_t , dst_state>((typename SM::states_ids_t *)0 ), state<src_state>{},
25452518 state<dst_state>{});
25462519 sm.process_internal_event (back::on_entry<back::_, TEvent>{event}, deps, subs, current_state);
2547- process_internal_transitions (deps, subs, state<dst_state>{});
25482520 return true ;
25492521 }
25502522 return false ;
@@ -2555,7 +2527,6 @@ struct transition<state<S1>, state<S2>, front::event<E>, G, none> {
25552527 update_current_state (sm, deps, subs, current_state,
25562528 aux::get_id<typename SM::state_t , dst_state>((typename SM::states_ids_t *)0 ), state<src_state>{},
25572529 state<dst_state>{});
2558- process_internal_transitions (deps, subs, state<dst_state>{});
25592530 return true ;
25602531 }
25612532 return false ;
@@ -2597,15 +2568,13 @@ struct transition<state<S1>, state<S2>, front::event<E>, always, none> {
25972568 aux::get_id<typename SM::state_t , dst_state>((typename SM::states_ids_t *)0 ), state<src_state>{},
25982569 state<dst_state>{});
25992570 sm.process_internal_event (back::on_entry<back::_, TEvent>{event}, deps, subs, current_state);
2600- process_internal_transitions (deps, subs, state<dst_state>{});
26012571 return true ;
26022572 }
26032573 template <class TEvent , class SM , class TDeps , class TSubs >
26042574 bool execute (const TEvent &, SM &sm, TDeps &deps, TSubs &subs, typename SM::state_t ¤t_state, aux::false_type) {
26052575 update_current_state (sm, deps, subs, current_state,
26062576 aux::get_id<typename SM::state_t , dst_state>((typename SM::states_ids_t *)0 ), state<src_state>{},
26072577 state<dst_state>{});
2608- process_internal_transitions (deps, subs, state<dst_state>{});
26092578 return true ;
26102579 }
26112580 __BOOST_SML_ZERO_SIZE_ARRAY (aux::byte);
0 commit comments