Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r50737 - sandbox/msm/boost/msm
From: christophe.j.henry_at_[hidden]
Date: 2009-01-22 18:23:04


Author: chenry
Date: 2009-01-22 18:23:03 EST (Thu, 22 Jan 2009)
New Revision: 50737
URL: http://svn.boost.org/trac/boost/changeset/50737

Log:
added possibility to make polymorphic states
Text files modified:
   sandbox/msm/boost/msm/state_machine.hpp | 35 +++++++++++++++++++++++++++++++++++
   1 files changed, 35 insertions(+), 0 deletions(-)

Modified: sandbox/msm/boost/msm/state_machine.hpp
==============================================================================
--- sandbox/msm/boost/msm/state_machine.hpp (original)
+++ sandbox/msm/boost/msm/state_machine.hpp 2009-01-22 18:23:03 EST (Thu, 22 Jan 2009)
@@ -110,6 +110,13 @@
     typedef mpl::vector<> flag_list;
     //default: no deferred events
     typedef mpl::vector<> deferred_events;
+ // by default are states not polymorphic. Define this symbol to make them polymorphic
+ // for example if you need to use a pointer to a state_base in typeid
+#ifdef POLYMORPHIC_STATES
+ virtual ~state() {}
+#else
+ ~state() {}
+#endif
 };
 
 // flags used internally to handle terminate / interrupt states
@@ -128,6 +135,13 @@
     typedef mpl::vector<boost::msm::TerminateFlag> flag_list;
     //default: no deferred events
     typedef mpl::vector<> deferred_events;
+ // by default are states not polymorphic. Define this symbol to make them polymorphic
+ // for example if you need to use a pointer to a state_base in typeid
+#ifdef POLYMORPHIC_STATES
+ virtual ~terminate_state() {}
+#else
+ ~terminate_state() {}
+#endif
 };
 
 // terminate state simply defines the InterruptedFlag and EndInterruptFlag<EndInterruptEvent> flags
@@ -143,6 +157,13 @@
                                                     flag_list;
     //default: no deferred events
     typedef mpl::vector<> deferred_events;
+ // by default are states not polymorphic. Define this symbol to make them polymorphic
+ // for example if you need to use a pointer to a state_base in typeid
+#ifdef POLYMORPHIC_STATES
+ virtual ~interrupt_state() {}
+#else
+ ~interrupt_state() {}
+#endif
 };
 
 // not a state but a bunch of extra typedefs to handle direct entry into a composite state. To be derived from
@@ -178,6 +199,13 @@
     typedef mpl::vector<> flag_list;
     //default: no deferred events
     typedef mpl::vector<> deferred_events;
+ // by default are states not polymorphic. Define this symbol to make them polymorphic
+ // for example if you need to use a pointer to a state_base in typeid
+#ifdef POLYMORPHIC_STATES
+ virtual ~entry_pseudo_state() {}
+#else
+ ~entry_pseudo_state() {}
+#endif
 };
 
 // to be derived from. Makes a state an exit (pseudo) state. Actually an almost full-fledged state
@@ -205,6 +233,13 @@
     //default: no deferred events
     typedef mpl::vector<> deferred_events;
 
+ // by default are states not polymorphic. Define this symbol to make them polymorphic
+ // for example if you need to use a pointer to a state_base in typeid
+#ifdef POLYMORPHIC_STATES
+ virtual ~exit_pseudo_state() {}
+#else
+ ~exit_pseudo_state() {}
+#endif
     // forward event to the higher-level FSM
     template <class ForwardEvent>
     void forward_event(ForwardEvent const& incomingEvent)


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