|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r70956 - trunk/boost/msm/back
From: christophe.j.henry_at_[hidden]
Date: 2011-04-03 14:53:26
Author: chenry
Date: 2011-04-03 14:53:26 EDT (Sun, 03 Apr 2011)
New Revision: 70956
URL: http://svn.boost.org/trac/boost/changeset/70956
Log:
added stop() in state_machine
Text files modified:
trunk/boost/msm/back/metafunctions.hpp | 6 ++++++
trunk/boost/msm/back/state_machine.hpp | 13 +++++++++++++
2 files changed, 19 insertions(+), 0 deletions(-)
Modified: trunk/boost/msm/back/metafunctions.hpp
==============================================================================
--- trunk/boost/msm/back/metafunctions.hpp (original)
+++ trunk/boost/msm/back/metafunctions.hpp 2011-04-03 14:53:26 EDT (Sun, 03 Apr 2011)
@@ -647,6 +647,12 @@
typedef typename StateType::initial_event type;
};
+template <class StateType>
+struct get_final_event
+{
+ typedef typename StateType::final_event type;
+};
+
template <class TransitionTable, class InitState>
struct build_one_orthogonal_region
{
Modified: trunk/boost/msm/back/state_machine.hpp
==============================================================================
--- trunk/boost/msm/back/state_machine.hpp (original)
+++ trunk/boost/msm/back/state_machine.hpp 2011-04-03 14:53:26 EDT (Sun, 03 Apr 2011)
@@ -67,6 +67,7 @@
BOOST_MPL_HAS_XXX_TRAIT_DEF(non_forwarding_flag)
BOOST_MPL_HAS_XXX_TRAIT_DEF(direct_entry)
BOOST_MPL_HAS_XXX_TRAIT_DEF(initial_event)
+BOOST_MPL_HAS_XXX_TRAIT_DEF(final_event)
BOOST_MPL_HAS_XXX_TRAIT_DEF(do_serialize)
BOOST_MPL_HAS_XXX_TRAIT_DEF(history_policy)
BOOST_MPL_HAS_XXX_TRAIT_DEF(fsm_check)
@@ -257,6 +258,7 @@
typedef HistoryPolicy history_policy;
struct InitEvent { };
+ struct ExitEvent { };
// flag handling
struct Flag_AND
{
@@ -276,6 +278,12 @@
::boost::mpl::identity<InitEvent>
>::type fsm_initial_event;
+ // if the front-end fsm provides an exit_event typedef, replace ExitEvent by this one
+ typedef typename ::boost::mpl::eval_if<
+ typename has_final_event<Derived>::type,
+ get_final_event<Derived>,
+ ::boost::mpl::identity<ExitEvent>
+ >::type fsm_final_event;
template <class ExitPoint>
struct exit_pt : public ExitPoint
@@ -1034,7 +1042,12 @@
// give a chance to handle an anonymous (eventless) transition
handle_eventless_transitions_helper<library_sm> eventless_helper(this,true);
eventless_helper.process_completion_event();
+ }
+ // stop the state machine (calls exit of the current state)
+ void stop()
+ {
+ do_exit(fsm_final_event(),*this);
}
// Main function used by clients of the derived FSM to make
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk