Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r62154 - sandbox/msm/boost/msm/back
From: christophe.j.henry_at_[hidden]
Date: 2010-05-22 15:38:30


Author: chenry
Date: 2010-05-22 15:38:30 EDT (Sat, 22 May 2010)
New Revision: 62154
URL: http://svn.boost.org/trac/boost/changeset/62154

Log:
corrected bug: the fsm parameter of a submachine now is the containing state machine
Text files modified:
   sandbox/msm/boost/msm/back/state_machine.hpp | 42 ++++++++++++++++++++--------------------
   1 files changed, 21 insertions(+), 21 deletions(-)

Modified: sandbox/msm/boost/msm/back/state_machine.hpp
==============================================================================
--- sandbox/msm/boost/msm/back/state_machine.hpp (original)
+++ sandbox/msm/boost/msm/back/state_machine.hpp 2010-05-22 15:38:30 EDT (Sat, 22 May 2010)
@@ -1852,16 +1852,16 @@
      {
          direct_event_start_helper(library_sm* self_):self(self_){}
          // this variant is for the standard case, entry due to activation of the containing FSM
- template <class EventType>
+ template <class EventType,class FsmType>
          typename ::boost::disable_if<typename has_direct_entry<EventType>::type,void>::type
- operator()(EventType const& evt, ::boost::msm::back::dummy<0> = 0)
+ operator()(EventType const& evt,FsmType& fsm, ::boost::msm::back::dummy<0> = 0)
          {
- (static_cast<Derived*>(self))->on_entry(evt,*self);
+ (static_cast<Derived*>(self))->on_entry(evt,fsm);
              self->start(evt);
          }
 
          // this variant is for the direct entry case (just one entry, not a sequence of entries)
- template <class EventType>
+ template <class EventType,class FsmType>
          typename ::boost::enable_if<
              typename ::boost::mpl::and_<
                         typename ::boost::mpl::not_< typename is_pseudo_entry<
@@ -1871,9 +1871,9 @@
                                                             <typename EventType::active_state>::type >::type
>::type>::type,void
>::type
- operator()(EventType const& evt, ::boost::msm::back::dummy<1> = 0)
+ operator()(EventType const& evt,FsmType& fsm, ::boost::msm::back::dummy<1> = 0)
          {
- (static_cast<Derived*>(self))->on_entry(evt,*self);
+ (static_cast<Derived*>(self))->on_entry(evt,fsm);
              int state_id = get_state_id<stt,typename EventType::active_state>::value;
              BOOST_STATIC_ASSERT(EventType::active_state::zone_index >= 0);
              BOOST_STATIC_ASSERT(EventType::active_state::zone_index <= nr_regions::value);
@@ -1883,7 +1883,7 @@
          }
 
          // this variant is for the fork entry case (a sequence on entries)
- template <class EventType>
+ template <class EventType,class FsmType>
          typename ::boost::enable_if<
              typename ::boost::mpl::and_<
                     typename ::boost::mpl::not_<
@@ -1893,9 +1893,9 @@
                                                                 typename EventType::active_state>::type
>::type>::type,void
>::type
- operator()(EventType const& evt, ::boost::msm::back::dummy<2> = 0)
+ operator()(EventType const& evt,FsmType& fsm, ::boost::msm::back::dummy<2> = 0)
          {
- (static_cast<Derived*>(self))->on_entry(evt,*self);
+ (static_cast<Derived*>(self))->on_entry(evt,fsm);
              ::boost::mpl::for_each<typename EventType::active_state,
                                     ::boost::msm::wrap< ::boost::mpl::placeholders::_1> >
                                                         (fork_helper<EventType>(self,evt));
@@ -1904,14 +1904,14 @@
          }
 
          // this variant is for the pseudo state entry case
- template <class EventType>
+ template <class EventType,class FsmType>
          typename ::boost::enable_if<
              typename is_pseudo_entry<typename EventType::active_state >::type,void
>::type
- operator()(EventType const& evt, ::boost::msm::back::dummy<3> = 0)
+ operator()(EventType const& evt,FsmType& fsm, ::boost::msm::back::dummy<3> = 0)
          {
              // entry on the FSM
- (static_cast<Derived*>(self))->on_entry(evt,*self);
+ (static_cast<Derived*>(self))->on_entry(evt,fsm);
              int state_id = get_state_id<stt,typename EventType::active_state>::value;
              // given region starts with the entry pseudo state as active state
              self->m_states[EventType::active_state::zone_index] = state_id;
@@ -1973,27 +1973,27 @@
          static void do_exit(library_sm*,Event const& ){}
      };
      // entry/exit for states machines which are themselves embedded in other state machines (composites)
- template <class Event>
- void do_entry(Event const& incomingEvent)
+ template <class Event,class FsmType>
+ void do_entry(Event const& incomingEvent,FsmType& fsm)
      {
         // by default we activate the history/init states, can be overwritten by direct_event_start_helper
         region_entry_exit_helper< ::boost::mpl::int_<0> >::template do_entry(this,incomingEvent);
         // block immediate handling of events
         m_event_processing = true;
         // if the event is generating a direct entry/fork, set the current state(s) to the direct state(s)
- direct_event_start_helper(this)(incomingEvent);
+ direct_event_start_helper(this)(incomingEvent,fsm);
         // handle messages which were generated and blocked in the init calls
         m_event_processing = false;
         process_message_queue(this);
      }
- template <class Event>
- void do_exit(Event const& incomingEvent)
+ template <class Event,class FsmType>
+ void do_exit(Event const& incomingEvent,FsmType& fsm)
      {
         // first recursively exit the sub machines
         // forward the event for handling by sub state machines
         region_entry_exit_helper< ::boost::mpl::int_<0> >::template do_exit(this,incomingEvent);
         // then call our own exit
- (static_cast<Derived*>(this))->on_exit(incomingEvent,*this);
+ (static_cast<Derived*>(this))->on_exit(incomingEvent,fsm);
         // give the history a chance to handle this (or not).
         m_history.history_exit(this->m_states);
      }
@@ -2052,7 +2052,7 @@
         execute_entry(StateType& astate,EventType const& evt,FsmType& fsm,boost::msm::back::dummy<0> = 0)
     {
         // calls on_entry on the fsm then handles direct entries, fork, entry pseudo state
- astate.do_entry(evt);
+ astate.do_entry(evt,fsm);
     }
     // variant for states
     template <class StateType,class EventType,class FsmType>
@@ -2079,9 +2079,9 @@
     template <class StateType,class EventType,class FsmType>
     static
         typename ::boost::enable_if<typename is_composite_state<StateType>::type,void >::type
- execute_exit(StateType& astate,EventType const& evt,FsmType& , ::boost::msm::back::dummy<0> = 0)
+ execute_exit(StateType& astate,EventType const& evt,FsmType& fsm, ::boost::msm::back::dummy<0> = 0)
     {
- astate.do_exit(evt);
+ astate.do_exit(evt,fsm);
     }
     template <class StateType,class EventType,class FsmType>
     static


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