| <html><head> |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
| <title>Front-end</title><link rel="stylesheet" href="boostbook.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2"><link rel="home" href="index.html" title="Meta State Machine (MSM) V2.12"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="re02.html" title="Back-end"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Front-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re02.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="refentry" title="Front-end"><a name="d0e4989"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Front-end — The front-end headers</p></div><div class="refsect1" title="msm/front/common_states.hpp"><a name="d0e4995"></a><h2>msm/front/common_states.hpp</h2><p>This header contains the predefined types to serve as base for states or state machines:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>default_base_state: non-polymorphic empty type.</p></li><li class="listitem"><p>polymorphic_state: type with a virtual destructor, which makes all |
| states polymorphic.</p></li></ul></div></div><div class="refsect1" title="msm/front/completion_event.hpp"><a name="d0e5007"></a><h2>msm/front/completion_event.hpp</h2><p>This header contains one type, <code class="code">none</code>. This type has several |
| meanings inside a transition table:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>as action or guard: that there is no action or guard</p></li><li class="listitem"><p>as target state: that the transition is an internal |
| transition</p></li><li class="listitem"><p>as event: the transition is an anonymous (completion) |
| transition</p></li></ul></div></div><div class="refsect1" title="msm/front/functor_row.hpp"><a name="d0e5025"></a><h2>msm/front/functor_row.hpp</h2><p>This header implements the functor front-end's transitions and helpers.</p><div class="refsect2" title="Row"><a name="d0e5030"></a><h3>Row</h3><div class="refsect3" title="definition"><a name="d0e5033"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Source,class Event,class Target,class |
| Action,class Guard> Row</span></span> {<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5040"></a><h4>tags</h4><p>row_type_tag is defined differently for every specialization:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>all 5 template parameters means a normal transition with |
| action and guard: <code class="code">typedef row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,Target,none,none> a normal transition |
| without action or guard: <code class="code">typedef _row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,Target,Action,none> a normal |
| transition without guard: <code class="code">typedef a_row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,Target,none,Guard> a normal transition |
| without action: <code class="code">typedef g_row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,none,Action,none> an internal |
| transition without guard: <code class="code">typedef a_irow_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,none,none,Guard> an internal |
| transition without action: <code class="code">typedef g_irow_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,none,none,Guard> an internal |
| transition with action and guard: <code class="code">typedef irow_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,none,none,none> an internal transition |
| without action or guard: <code class="code">typedef _irow_tag |
| row_type_tag;</code></p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5086"></a><h4>methods</h4><p>Like any other front-end, Row implements the two necessary static |
| functions for action and guard call. Each function receives as parameter |
| the (deepest-level) state machine processsing the event, the event |
| itself, the source and target states and all the states contained in a |
| state machine.</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static void action_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="Internal"><a name="d0e5109"></a><h3>Internal</h3><div class="refsect3" title="definition"><a name="d0e5112"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Event,class Action,class Guard> |
| Internal</span></span> {<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5119"></a><h4>tags</h4><p>row_type_tag is defined differently for every specialization:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>all 3 template parameters means an internal transition |
| with action and guard: <code class="code">typedef sm_i_row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Internal<Event,none,none> an internal transition |
| without action or guard: <code class="code">typedef sm__i_row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Internal<Event,Action,none> an internal transition |
| without guard: <code class="code">typedef sm_a_i_row_tag |
| row_type_tag;</code></p></li><li class="listitem"><p>Internal<Event,none,Guard> an internal transition |
| without action: <code class="code">typedef sm_g_i_row_tag |
| row_type_tag;</code></p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5145"></a><h4>methods</h4><p>Like any other front-end, Internal implements the two necessary static |
| functions for action and guard call. Each function receives as parameter |
| the (deepest-level) state machine processsing the event, the event |
| itself, the source and target states and all the states contained in a |
| state machine.</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static void action_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="ActionSequence_"><a name="d0e5168"></a><h3>ActionSequence_</h3><p>This functor calls every element of the template Sequence (which are also |
| callable functors) in turn. It is also the underlying implementation of the |
| eUML sequence grammar (action1,action2,...).</p><div class="refsect3" title="definition"><a name="d0e5173"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Sequence> ActionSequence_</span></span> {<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5180"></a><h4>methods</h4><p>This helper functor is made for use in a transition table and in a |
| state behavior and therefore implements an operator() with 3 and with 4 |
| arguments:</p><p> |
| </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Evt,class Fsm,class |
| SourceState,class TargetState> operator()(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Evt const& ,Fsm& ,SourceState& |
| ,TargetState& </code>;</div><div class="funcprototype-spacer"> </div></div><p> |
| </p><p> |
| </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Evt,class Fsm,class State> |
| operator()(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Evt const&, Fsm&, State&</code>;</div><div class="funcprototype-spacer"> </div></div><p> |
| </p></div></div><div class="refsect2" title="Defer"><a name="d0e5203"></a><h3>Defer</h3><div class="refsect3" title="definition"><a name="d0e5206"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">Defer</span></span> {<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5213"></a><h4>methods</h4><p>This helper functor is made for use in a transition table and |
| therefore implements an operator() with 4 arguments:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Evt,class Fsm,class SourceState,class |
| TargetState> operator()(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Evt const&, Fsm& , SourceState&, |
| TargetState&</code>;</div><div class="funcprototype-spacer"> </div></div></div></div></div><div class="refsect1" title="msm/front/internal_row.hpp"><a name="d0e5224"></a><h2>msm/front/internal_row.hpp</h2><p>This header implements the internal transition rows for use inside an |
| internal_transition_table. All these row types have no source or target state, |
| as the backend will recognize internal transitions from this |
| internal_transition_table.</p><div class="refsect2" title="methods"><a name="d0e5229"></a><h3>methods</h3><p>Like any other front-end, the following transition row types implements |
| the two necessary static functions for action and guard call. Each function |
| receives as parameter the (deepest-level) state machine processsing the |
| event, the event itself, the source and target states and all the states |
| contained in a state machine.</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static void action_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect2" title="a_internal"><a name="d0e5252"></a><h3>a_internal</h3><div class="refsect3" title="definition"><a name="d0e5255"></a><h4>definition</h4><p>This is an internal transition with an action called during the |
| transition.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForAction, void |
| (CalledForAction::*action)(Event const&)> |
| a_internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5264"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the internal |
| transition.</p></li><li class="listitem"><p>CalledForAction: the type on which the action method will |
| be called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>action: a pointer to the method which CalledForAction |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="g_internal"><a name="d0e5280"></a><h3>g_internal</h3><p>This is an internal transition with a guard called before the transition |
| and allowing the transition if returning true.</p><div class="refsect3" title="definition"><a name="d0e5285"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForGuard, bool |
| (CalledForGuard::*guard)(Event const&)> |
| g_internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5292"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the internal |
| transition.</p></li><li class="listitem"><p>CalledForGuard: the type on which the guard method will be |
| called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>guard: a pointer to the method which CalledForGuard |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="internal"><a name="d0e5308"></a><h3>internal</h3><p>This is an internal transition with a guard called before the transition |
| and allowing the transition if returning true. It also calls an action |
| called during the transition.</p><div class="refsect3" title="definition"><a name="d0e5313"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForAction, void |
| (CalledForAction::*action)(Event const&), class |
| CalledForGuard, bool (CalledForGuard::*guard)(Event const&)> |
| internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5320"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the internal transition</p></li><li class="listitem"><p>CalledForAction: the type on which the action method will |
| be called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>action: a pointer to the method which CalledForAction |
| provides.</p></li><li class="listitem"><p>CalledForGuard: the type on which the guard method will be |
| called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>guard: a pointer to the method which CalledForGuard |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="_internal"><a name="d0e5342"></a><h3>_internal</h3><p>This is an internal transition without action or guard. This is equivalent |
| to an explicit "ignore event".</p><div class="refsect3" title="definition"><a name="d0e5347"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event > _internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5354"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the internal |
| transition.</p></li></ul></div><p> |
| </p></div></div></div><div class="refsect1" title="msm/front/row2.hpp"><a name="d0e5364"></a><h2>msm/front/row2.hpp</h2><p>This header contains the variants of row2, which are an extension of the |
| standard row transitions for use in the transition table. They offer the |
| possibility to define action and guard not only in the state machine, but in any |
| state of the state machine. They can also be used in internal transition tables |
| through their irow2 variants.</p><div class="refsect2" title="methods"><a name="d0e5369"></a><h3>methods</h3><p>Like any other front-end, the following transition row types implements |
| the two necessary static functions for action and guard call. Each function |
| receives as parameter the (deepest-level) state machine processsing the |
| event, the event itself, the source and target states and all the states |
| contained in a state machine.</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static void action_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect2" title="_row2"><a name="d0e5392"></a><h3>_row2</h3><p>This is a transition without action or guard. The state machine only |
| changes active state.</p><div class="refsect3" title="definition"><a name="d0e5397"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target > |
| _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5404"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="a_row2"><a name="d0e5420"></a><h3>a_row2</h3><p>This is a transition with action and without guard.</p><div class="refsect3" title="definition"><a name="d0e5425"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target, |
| </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void |
| (CalledForAction::*action)(Event const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5436"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>CalledForAction: the type on which the action method will |
| be called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>action: a pointer to the method which CalledForAction |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="g_row2"><a name="d0e5458"></a><h3>g_row2</h3><p>This is a transition with guard and without action.</p><div class="refsect3" title="definition"><a name="d0e5463"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target, |
| </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event |
| const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5474"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>CalledForGuard: the type on which the guard method will be |
| called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>guard: a pointer to the method which CalledForGuard |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="row2"><a name="d0e5496"></a><h3>row2</h3><p>This is a transition with guard and action.</p><div class="refsect3" title="definition"><a name="d0e5501"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target, |
| </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void |
| (CalledForAction::*action)(Event const&), </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event |
| const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5516"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>CalledForAction: the type on which the action method will |
| be called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>action: a pointer to the method which CalledForAction |
| provides.</p></li><li class="listitem"><p>CalledForGuard: the type on which the guard method will be |
| called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>guard: a pointer to the method which CalledForGuard |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="a_irow2"><a name="d0e5544"></a><h3>a_irow2</h3><p>This is an internal transition for use inside a transition table, with |
| action and without guard.</p><div class="refsect3" title="definition"><a name="d0e5549"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void |
| (CalledForAction::*action)(Event const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5560"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>CalledForAction: the type on which the action method will |
| be called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>action: a pointer to the method which CalledForAction |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="g_irow2"><a name="d0e5579"></a><h3>g_irow2</h3><p>This is an internal transition for use inside a transition table, with |
| guard and without action.</p><div class="refsect3" title="definition"><a name="d0e5584"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event |
| const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5595"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>CalledForGuard: the type on which the guard method will be |
| called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>guard: a pointer to the method which CalledForGuard |
| provides.</p></li></ul></div><p> |
| </p></div></div><div class="refsect2" title="irow2"><a name="d0e5614"></a><h3>irow2</h3><p>This is an internal transition for use inside a transition table, with |
| guard and action.</p><div class="refsect3" title="definition"><a name="d0e5619"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void |
| (CalledForAction::*action)(Event const&), </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event |
| const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5634"></a><h4>template parameters</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>CalledForAction: the type on which the action method will |
| be called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>action: a pointer to the method which CalledForAction |
| provides.</p></li><li class="listitem"><p>CalledForGuard: the type on which the guard method will be |
| called. It can be either a state of the containing state |
| machine or the state machine itself.</p></li><li class="listitem"><p>guard: a pointer to the method which CalledForGuard |
| provides.</p></li></ul></div><p> |
| </p></div></div></div><div class="refsect1" title="msm/front/state_machine_def.hpp"><a name="d0e5659"></a><h2>msm/front/state_machine_def.hpp</h2><p>This header provides the implementation of the <span class="command"><strong><a class="command" href="ch03s02.html#basic-front-end">basic front-end</a></strong></span>. It contains one |
| type, <code class="code">state_machine_def</code></p><div class="refsect2" title="state_machine_def definition"><a name="d0e5669"></a><h3>state_machine_def definition</h3><p>This type is the basic class for a basic (or possibly any other) |
| front-end. It provides the standard row types (which includes internal |
| transitions) and a default implementation of the required methods and |
| typedefs.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Derived,class BaseState = |
| default_base_state> state_machine_def</span></span> {<br>}</pre><div class="refsect3" title="typedefs"><a name="d0e5678"></a><h4>typedefs</h4><p> |
| </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>flag_list: by default, no flag is set in the state |
| machine</p></li><li class="listitem"><p>deferred_events: by default, no event is deferred.</p></li><li class="listitem"><p>configuration: by default, no configuration customization |
| is done.</p></li></ul></div><p> |
| </p></div><div class="refsect3" title="row methods"><a name="d0e5694"></a><h4>row methods</h4><p>Like any other front-end, the following transition row types |
| implements the two necessary static functions for action and guard call. |
| Each function receives as parameter the (deepest-level) state machine |
| processsing the event, the event itself, the source and target states |
| and all the states contained in a state machine (ignored).</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static void action_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class SourceState,class TargetState, |
| class AllStates> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Fsm& fsm,Event const& |
| evt,SourceState&,TargetState,AllStates&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="a_row"><a name="d0e5717"></a><h4>a_row</h4><p>This is a transition with action and without guard.</p><p><code class="classname">template< class Source, class Event, class Target, |
| void (Derived::*action)(Event const&) > a_row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_row"><a name="d0e5742"></a><h4>g_row</h4><p>This is a transition with guard and without action.</p><p><code class="classname">template< class Source, class Event, class Target, |
| bool (Derived::*guard)(Event const&) > g_row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="row"><a name="d0e5767"></a><h4>row</h4><p>This is a transition with guard and action.</p><p><code class="classname">template< class Source, class Event, class Target, |
| void (Derived::*action)(Event const&), bool |
| (Derived::*guard)(Event const&) > row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="_row"><a name="d0e5798"></a><h4>_row</h4><p>This is a transition without action or guard. The state machine only |
| changes active state.</p><p><code class="classname">template< class Source, class Event, class Target > |
| _row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li></ul></div></div><div class="refsect3" title="a_irow"><a name="d0e5817"></a><h4>a_irow</h4><p>This is an internal transition for use inside a transition table, with |
| action and without guard.</p><p><code class="classname">template< class Source, class Event, void |
| (Derived::*action)(Event const&) > a_irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_irow"><a name="d0e5839"></a><h4>g_irow</h4><p>This is an internal transition for use inside a transition table, with |
| guard and without action.</p><p><code class="classname">template< class Source, class Event, bool |
| (Derived::*guard)(Event const&) > g_irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="irow"><a name="d0e5861"></a><h4>irow</h4><p>This is an internal transition for use inside a transition table, with |
| guard and action.</p><p><code class="classname">template< class Source, class Event, void |
| (Derived::*action)(Event const&), bool |
| (Derived::*guard)(Event const&) > irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete |
| front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="_irow"><a name="d0e5889"></a><h4>_irow</h4><p>This is an internal transition without action or guard. As it does |
| nothing, it means "ignore event".</p><p><code class="classname">template< class Source, class Event > |
| _irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5905"></a><h4>methods</h4><p><code class="code">state_machine_def</code> provides a default implementation in |
| case of an event which cannot be processed by a state machine (no |
| transition found). The implementation is using a |
| <code class="code">BOOST_ASSERT</code> so that the error will only be noticed in |
| debug mode. Overwrite this method in your implementation to change the |
| behavior.</p><p> |
| </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class Event> static void |
| no_transition(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Event const& ,Fsm&, int |
| state<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><p> |
| </p><p><code class="code">state_machine_def</code> provides a default implementation in |
| case an exception is thrown by a state (entry/exit) or transition |
| (action/guard) behavior. The implementation is using a |
| <code class="code">BOOST_ASSERT</code> so that the error will only be noticed in |
| debug mode. Overwrite this method in your implementation to change the |
| behavior. This method will be called only if exception handling is not |
| deactivated (default) by defining |
| <code class="code">has_no_message_queue</code>.</p><p> |
| </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Fsm,class Event> static void |
| exception_caught(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code> |
| <code>(</code>Event const& ,Fsm&, |
| std::exception&<code>)</code> |
| </code>;</div><div class="funcprototype-spacer"> </div></div><p> |
| </p></div></div></div><div class="refsect1" title="msm/front/states.hpp"><a name="d0e5949"></a><h2>msm/front/states.hpp </h2><p>This header provides the different states (except state machines) for the |
| basic front-end (or mixed with other front-ends).</p><div class="refsect2" title="types"><a name="d0e5954"></a><h3>types</h3><p>This header provides the following types:</p><div class="refsect3" title="no_sm_ptr"><a name="d0e5959"></a><h4>no_sm_ptr</h4><p>deprecated: default policy for states. It means that states do not |
| need to save a pointer to their containing state machine.</p></div><div class="refsect3" title="sm_ptr"><a name="d0e5964"></a><h4>sm_ptr</h4><p>deprecated: state policy. It means that states need to save a pointer |
| to their containing state machine. When seeing this flag, the back-end |
| will call set_sm_ptr(fsm*) and give itself as argument.</p></div><div class="refsect3" title="state"><a name="d0e5969"></a><h4>state</h4><p>Basic type for simple states. Inherit from this type to define a |
| simple state. The first argument is needed if you want your state (and |
| all others used in a concrete state machine) to inherit a basic type for |
| logging or providing a common behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class Base = default_base_state,class |
| SMPtrPolicy = no_sm_ptr> state</span></span> {<br>}</pre></div><div class="refsect3" title="terminate_state"><a name="d0e5978"></a><h4>terminate_state</h4><p>Basic type for terminate states. Inherit from this type to define a |
| terminate state. The first argument is needed if you want your state |
| (and all others used in a concrete state machine) to inherit a basic |
| type for logging or providing a common behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class Base = default_base_state,class |
| SMPtrPolicy = no_sm_ptr> terminate_state</span></span> {<br>}</pre></div><div class="refsect3" title="interrupt_state"><a name="d0e5987"></a><h4>interrupt_state</h4><p>Basic type for interrupt states. Interrupt states prevent any further |
| event handling until EndInterruptEvent is sent. Inherit from this type |
| to define a terminate state. The first argument is the name of the event |
| ending the interrupt. The second argument is needed if you want your |
| state (and all others used in a concrete state machine) to inherit a |
| basic type for logging or providing a common behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class EndInterruptEvent,class Base = |
| default_base_state,</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr> |
| interrupt_state</span></span> {<br>}</pre></div><div class="refsect3" title="explicit_entry"><a name="d0e6000"></a><h4>explicit_entry</h4><p>Inherit from this type <span class="underline">in |
| addition</span> to the desired state type to enable this state |
| for direct entering. The template parameter gives the region id of the |
| state (regions are numbered in the order of the |
| <code class="code">initial_state</code> typedef).</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <int ZoneIndex=-1> explicit_entry</span></span> {<br>}</pre></div><div class="refsect3" title="entry_pseudo_state"><a name="d0e6015"></a><h4>entry_pseudo_state</h4><p>Basic type for entry pseudo states. Entry pseudo states are an |
| predefined entry into a submachine and connect two transitions. The |
| first argument is the id of the region entered by this state (regions |
| are numbered in the order of the <code class="code">initial_state</code> typedef). |
| The second argument is needed if you want your state (and all others |
| used in a concrete state machine) to inherit a basic type for logging or |
| providing a common behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<int RegionIndex=-1,class Base = |
| default_base_state,</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr> |
| entry_pseudo_state</span></span> {<br>}</pre></div><div class="refsect3" title="exit_pseudo_state"><a name="d0e6031"></a><h4>exit_pseudo_state</h4><p>Basic type for exit pseudo states. Exit pseudo states are an |
| predefined exit from a submachine and connect two transitions. The first |
| argument is the name of the event which will be "thrown" out of the exit |
| point. This event does not need to be the same as the one sent by the |
| inner region but must be convertible from it. The second argument is |
| needed if you want your state (and all others used in a concrete state |
| machine) to inherit a basic type for logging or providing a common |
| behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class Event,class Base = |
| default_base_state,</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr> |
| exit_pseudo_state</span></span> {<br>}</pre></div></div></div><div class="refsect1" title="msm/front/euml/euml.hpp"><a name="d0e6044"></a><h2>msm/front/euml/euml.hpp</h2><p>This header includes all of eUML except the STL functors.</p></div><div class="refsect1" title="msm/front/euml/stl.hpp"><a name="d0e6049"></a><h2>msm/front/euml/stl.hpp</h2><p>This header includes all the functors for STL support in eUML. These <span class="command"><strong><a class="command" href="ch10.html#eUML-STL-all">tables</a></strong></span> show a full description.</p></div><div class="refsect1" title="msm/front/euml/algorithm.hpp"><a name="d0e6057"></a><h2>msm/front/euml/algorithm.hpp</h2><p>This header includes all the functors for STL algorithms support in eUML. |
| These <span class="command"><strong><a class="command" href="ch10.html#eUML-STL-all">tables</a></strong></span> show a full |
| description.</p></div><div class="refsect1" title="msm/front/euml/iteration.hpp"><a name="d0e6065"></a><h2>msm/front/euml/iteration.hpp</h2><p>This header includes iteration functors for STL support in eUML. This <span class="command"><strong><a class="command" href="ch10.html#eUML-STL-iteration">tables</a></strong></span> shows a full |
| description.</p></div><div class="refsect1" title="msm/front/euml/querying.hpp"><a name="d0e6073"></a><h2>msm/front/euml/querying.hpp</h2><p>This header includes querying functors for STL support in eUML. This <span class="command"><strong><a class="command" href="ch10.html#eUML-STL-querying">tables</a></strong></span> shows a full |
| description.</p></div><div class="refsect1" title="msm/front/euml/transformation.hpp"><a name="d0e6081"></a><h2>msm/front/euml/transformation.hpp</h2><p>This header includes transformation functors for STL support in eUML. This |
| <span class="command"><strong><a class="command" href="ch10.html#eUML-STL-transformation">tables</a></strong></span> shows a full |
| description.</p></div><div class="refsect1" title="msm/front/euml/container.hpp"><a name="d0e6089"></a><h2>msm/front/euml/container.hpp</h2><p>This header includes container functors for STL support in eUML (functors |
| calling container methods). This <span class="command"><strong><a class="command" href="ch10.html#eUML-STL-container">tables</a></strong></span> shows a full description. It also provides npos for |
| strings.</p><div class="refsect2" title="Npos_<container type>"><a name="d0e6097"></a><h3>Npos_<container type></h3><p>Functor returning npos for transition or state behaviors. Like all |
| constants, only the functor form exists, so parenthesis are necessary. |
| Example:</p><p><code class="code">string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != |
| Npos_<string>() // compare result of string::find with |
| npos</code></p></div></div><div class="refsect1" title="msm/front/euml/stt_grammar.hpp"><a name="d0e6105"></a><h2>msm/front/euml/stt_grammar.hpp</h2><p>This header provides the transition table grammars. This includes internal |
| transition tables.</p><div class="refsect2" title="functions"><a name="d0e6110"></a><h3>functions</h3><div class="refsect3" title="build_stt"><a name="d0e6113"></a><h4>build_stt</h4><p>The function build_stt evaluates the grammar-conform expression as |
| parameter. It returns a transition table, which is a mpl::vector of |
| transitions (rows) or, if the expression is ill-formed (does not match |
| the grammar), the type <code class="code">invalid_type</code>, which will lead to a |
| compile-time static assertion when this transition table is passed to a |
| state machine. </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template<class Expr> [mpl::vector<...> / |
| msm::front::euml::invalid_type] build_stt(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr const& expr</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="build_internal_stt"><a name="d0e6127"></a><h4>build_internal_stt</h4><p>The function build_internal_stt evaluates the grammar-conform |
| expression as parameter. It returns a transition table, which is a |
| mpl::vector of transitions (rows) or, if the expression is ill-formed |
| (does not match the grammar), the type <code class="code">invalid_type</code>, which |
| will lead to a compile-time static assertion when this transition table |
| is passed to a state machine. </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template<class Expr> [mpl::vector<...> / |
| msm::front::euml::invalid_type] build_internal_stt(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr const& expr</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="grammars"><a name="d0e6141"></a><h3>grammars</h3><div class="refsect3" title="transition table"><a name="d0e6144"></a><h4><span class="command"><strong><a name="reference-stt-grammar"></a>transition |
| table</strong></span></h4><p>The transition table accepts the following grammar:</p><pre class="programlisting">Stt := Row | (Stt ',' Stt) |
| Row := (Target '==' (SourcePlusEvent)) /* first syntax*/ |
| | ( (SourcePlusEvent) '==' Target ) /* second syntax*/ |
| | (SourcePlusEvent) /* internal transitions */ |
| SourcePlusEvent := (BuildSource '+' BuildEvent)/* standard transition*/ |
| | (BuildSource) /* anonymous transition */ |
| BuildSource := state_tag | (state_tag '/' Action) | (state_tag '[' Guard ']') |
| | (state_tag '[' Guard ']' '/' Action) |
| BuildEvent := event_tag | (event_tag '/' Action) | (event_tag '[' Guard ']') |
| | (event_tag '[' Guard ']' '/' Action)</pre><p>The grammars Action and Guard are defined in state_grammar.hpp and |
| guard_grammar.hpp respectively. state_tag and event_tag are inherited |
| from euml_state (or other state variants) and euml_event respectively. |
| For example, following declarations are possible:</p><pre class="programlisting">target == source + event [guard] / action, |
| source + event [guard] / action == target, |
| source + event [guard] / (action1,action2) == target, |
| target == source + event [guard] / (action1,action2), |
| target == source + event, |
| source + event == target, |
| target == source + event [guard], |
| source + event [guard] == target, |
| target == source + event / action, |
| source + event /action == target, |
| source / action == target, /*anonymous transition*/ |
| target == source / action, /*anonymous transition*/ |
| source + event /action, /* internal transition*/</pre></div><div class="refsect3" title="internal transition table"><a name="d0e6156"></a><h4>internal transition table</h4><p>The internal transition table accepts the following grammar:</p><pre class="programlisting">IStt := BuildEvent | (IStt ',' IStt)</pre><p>BuildEvent being defined for both internal and standard transition |
| tables.</p></div></div></div><div class="refsect1" title="msm/front/euml/guard_grammar.hpp"><a name="d0e6165"></a><h2>msm/front/euml/guard_grammar.hpp</h2><p>This header contains the <code class="code">Guard</code> grammar used in the previous |
| section. This grammar is long but pretty simple:</p><pre class="programlisting">Guard := action_tag | (Guard '&&' Guard) |
| | (Guard '||' Guard) | ... /* operators*/ |
| | (if_then_else_(Guard,Guard,Guard)) | (function (Action,...Action))</pre><p>Most C++ operators are supported (address-of is not). With |
| <code class="code">function</code> is meant any eUML predefined function or any self-made |
| (using <code class="code">MSM_EUML_METHOD</code> or <code class="code">MSM_EUML_FUNCTION</code>). Action |
| is a grammar defined in state_grammar.hpp.</p></div><div class="refsect1" title="msm/front/euml/state_grammar.hpp"><a name="d0e6186"></a><h2>msm/front/euml/state_grammar.hpp</h2><p>This header provides the grammar for actions and the different grammars and |
| functions to build states using eUML.</p><div class="refsect2" title="action grammar"><a name="d0e6191"></a><h3>action grammar</h3><p>Like the guard grammar, this grammar supports relevant C++ operators and |
| eUML functions:</p><pre class="programlisting">Action := action_tag | (Action '+' Action) |
| | ('--' Action) | ... /* operators*/ |
| | if_then_else_(Guard,Action,Action) | if_then_(Action) |
| | while_(Guard,Action) |
| | do_while_(Guard,Action) | for_(Action,Guard,Action,Action) |
| | (function(Action,...Action)) |
| ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: ++ (post/pre), -- (post/pre), dereferencing, + |
| (unary/binary), - (unary/binary), *, /, %, &(bitwise), | (bitwise), |
| ^(bitwise), +=, -=, *=, /=, %=, <<=, >>=, <<, >>, =, [].</p></div><div class="refsect2" title="attributes"><a name="d0e6200"></a><h3>attributes</h3><p>This grammar is used to add attributes to states (or state machines) or |
| events: It evaluates to a fusion::map. You can use two forms:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">attributes_ << no_attributes_</code></p></li><li class="listitem"><p><code class="code">attributes_ << attribute_1 << ... << |
| attribute_n</code></p></li></ul></div><p>Attributes can be of any default-constructible type (fusion |
| requirement).</p></div><div class="refsect2" title="configure"><a name="d0e6216"></a><h3>configure</h3><p>This grammar also has two forms:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">configure_ << no_configure_</code></p></li><li class="listitem"><p><code class="code">configure_ << type_1 << ... << |
| type_n</code></p></li></ul></div><p>This grammar is used to create inside one syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>flags: <code class="code">configure_ << some_flag</code> where |
| some_flag inherits from <code class="code">euml_flag<some_flag></code> or |
| is defined using BOOST_MSM_EUML_FLAG.</p></li><li class="listitem"><p>deferred events: <code class="code">configure_ << some_event</code> |
| where some_event inherits from |
| <code class="code">euml_event<some_event></code> or is defined using |
| BOOST_MSM_EUML_EVENT or |
| BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES.</p></li><li class="listitem"><p>configuration (message queue, manual deferring, exception |
| handling): <code class="code">configure_ << some_config</code> where |
| some_config inherits from |
| <code class="code">euml_config<some_config></code>. At the moment, |
| three predefined objects exist (in msm//front/euml/common.hpp):</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>no_exception: disable catching exceptions</p></li><li class="listitem"><p>no_msg_queue: disable message queue</p></li><li class="listitem"><p>deferred_events: manually enable handling of |
| deferred events</p></li></ul></div></li></ul></div></div><div class="refsect2" title="initial states"><a name="d0e6270"></a><h3>initial states</h3><p>The grammar to define initial states for a state machine is: <code class="code">init_ |
| << state_1 << ... << state_n</code> where |
| state_1...state_n inherit from euml_state or is defined using |
| BOOST_MSM_EUML_STATE, BOOST_MSM_EUML_INTERRUPT_STATE, |
| BOOST_MSM_EUML_TERMINATE_STATE, BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE, |
| BOOST_MSM_EUML_ENTRY_STATE or BOOST_MSM_EUML_EXIT_STATE.</p></div><div class="refsect2" title="functions"><a name="d0e6278"></a><h3>functions</h3><div class="refsect3" title="build_sm"><a name="d0e6281"></a><h4>build_sm</h4><p>This function has several overloads. The return type is not relevant |
| to you as only decltype (return type) is what one needs.</p><p>Defines a state machine without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init> |
| func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class |
| Expr1> func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class |
| Expr1, class Expr2> func_state_machine<...> |
| build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&,Expr2 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry, exit behaviors and |
| attributes:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class |
| Expr1, class Expr2, class Attributes> func_state_machine<...> |
| build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&, Expr2 const&, Attributes |
| const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry, exit behaviors, attributes and |
| configuration (deferred events, flags):</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class |
| Expr1, class Expr2, class Attributes, class Configure> |
| func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&, Expr2 const&, Attributes |
| const&, Configure const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry, exit behaviors, attributes, |
| configuration (deferred events, flags) and a base state:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class |
| Expr1, class Expr2, class Attributes, class Configure, class |
| Base> func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&, Expr2 const&, Attributes |
| const&, Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class |
| StateNameTag to disambiguate state machines having the same parameters |
| but still being different.</p></div><div class="refsect3" title="build_state"><a name="d0e6336"></a><h4>build_state</h4><p>This function has several overloads. The return type is not relevant |
| to you as only decltype (return type) is what one needs.</p><p>Defines a simple state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">func_state<class StateNameTag,...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code></code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1> |
| func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1, class Expr2> |
| func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&,Expr2 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry, exit behaviors and |
| attributes:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1, class Expr2, |
| class Attributes> func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes |
| const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry, exit behaviors, attributes and |
| configuration (deferred events, flags):</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1, class Expr2, |
| class Attributes, class Configure> func_state<...> |
| build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes const&, |
| Configure const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry, exit behaviors, attributes, |
| configuration (deferred events, flags) and a base state:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1, class Expr2, |
| class Attributes, class Configure, class Base> |
| func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes const&, |
| Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class |
| StateNameTag to disambiguate states having the same parameters but still |
| being different.</p></div><div class="refsect3" title="build_terminate_state"><a name="d0e6390"></a><h4>build_terminate_state</h4><p>This function has the same overloads as build_state.</p></div><div class="refsect3" title="build_interrupt_state"><a name="d0e6395"></a><h4>build_interrupt_state</h4><p>This function has several overloads. The return type is not relevant |
| to you as only decltype (return type) is what one needs.</p><p>Defines an interrupt state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class EndInterruptEvent> |
| func_state<...> build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an interrupt state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class |
| EndInterruptEvent,class Expr1> func_state<...> |
| build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&,Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an interrupt state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class |
| EndInterruptEvent,class Expr1, class Expr2> func_state<...> |
| build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&,Expr1 const&,Expr2 |
| const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an interrupt state with entry, exit behaviors and |
| attributes:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class |
| EndInterruptEvent,class Expr1, class Expr2, class Attributes> |
| func_state<...> build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&,Expr1 const&, Expr2 |
| const&, Attributes const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an interrupt state with entry, exit behaviors, attributes and |
| configuration (deferred events, flags):</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class |
| EndInterruptEvent,class Expr1, class Expr2, class Attributes, |
| class Configure> func_state<...> |
| build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&,Expr1 const&, Expr2 |
| const&, Attributes const&, Configure |
| const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an interrupt state with entry, exit behaviors, attributes, |
| configuration (deferred events, flags) and a base state:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class |
| EndInterruptEvent,class Expr1, class Expr2, class Attributes, |
| class Configure, class Base> func_state<...> |
| build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&,Expr1 const&, Expr2 |
| const&, Attributes const&, Configure const&, |
| Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class |
| StateNameTag to disambiguate states having the same parameters but still |
| being different.</p></div><div class="refsect3" title="build_entry_state"><a name="d0e6450"></a><h4>build_entry_state</h4><p>This function has several overloads. The return type is not relevant |
| to you as only decltype (return type) is what one needs.</p><p>Defines an entry pseudo state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex> |
| entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code></code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class |
| Expr1> entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class |
| Expr1, class Expr2> entry_func_state<...> |
| build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&,Expr2 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry, exit behaviors and |
| attributes:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class |
| Expr1, class Expr2, class Attributes> entry_func_state<...> |
| build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes |
| const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry, exit behaviors, attributes |
| and configuration (deferred events, flags):</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class |
| Expr1, class Expr2, class Attributes, class Configure> |
| entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes const&, |
| Configure const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry, exit behaviors, attributes, |
| configuration (deferred events, flags) and a base state:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class |
| Expr1, class Expr2, class Attributes, class Configure, class |
| Base> entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes const&, |
| Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class |
| StateNameTag to disambiguate states having the same parameters but still |
| being different.</p></div><div class="refsect3" title="build_exit_state"><a name="d0e6504"></a><h4>build_exit_state</h4><p>This function has several overloads. The return type is not relevant |
| to you as only decltype (return type) is what one needs.</p><p>Defines an exit pseudo state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event> |
| exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1> |
| exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1, |
| class Expr2> exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&,Expr2 |
| const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry, exit behaviors and |
| attributes:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1, |
| class Expr2, class Attributes> exit_func_state<...> |
| build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&, Expr2 const&, |
| Attributes const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry, exit behaviors, attributes |
| and configuration (deferred events, flags):</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1, |
| class Expr2, class Attributes, class Configure> |
| exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&, Expr2 const&, |
| Attributes const&, Configure const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry, exit behaviors, attributes, |
| configuration (deferred events, flags) and a base state:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1, |
| class Expr2, class Attributes, class Configure, class Base> |
| exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&, Expr2 const&, |
| Attributes const&, Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class |
| StateNameTag to disambiguate states having the same parameters but still |
| being different.</p></div><div class="refsect3" title="build_explicit_entry_state"><a name="d0e6559"></a><h4>build_explicit_entry_state</h4><p>This function has the same overloads as build_entry_state and |
| explicit_entry_func_state as return type.</p></div></div></div><div class="refsect1" title="msm/front/euml/common.hpp"><a name="d0e6564"></a><h2>msm/front/euml/common.hpp</h2><div class="refsect2" title="types"><a name="d0e6567"></a><h3>types</h3><div class="refsect3" title="euml_event"><a name="d0e6570"></a><h4>euml_event</h4><p>The basic type for events with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class EventName> euml_event;</span></span> {<br>}</pre><pre class="programlisting">struct play : euml_event<play>{};</pre></div><div class="refsect3" title="euml_state"><a name="d0e6581"></a><h4>euml_state</h4><p>The basic type for states with eUML. You will usually not use this |
| type directly as it is easier to use BOOST_MSM_EUML_STATE, |
| BOOST_MSM_EUML_INTERRUPT_STATE, BOOST_MSM_EUML_TERMINATE_STATE, |
| BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE, BOOST_MSM_EUML_ENTRY_STATE or |
| BOOST_MSM_EUML_EXIT_STATE.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class StateName> euml_state;</span></span> {<br>}</pre><p>You can however use this type directly if you want to provide your |
| state with extra functions or provide entry or exit behaviors without |
| functors, for example:</p><pre class="programlisting">struct Empty : public msm::front::state<> , public euml_state<Empty> |
| { |
| void foo() {...} |
| template <class Event,class Fsm> |
| void on_entry(Event const& evt,Fsm& fsm){...} |
| };</pre></div><div class="refsect3" title="euml_flag"><a name="d0e6594"></a><h4>euml_flag</h4><p>The basic type for flags with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class FlagName> euml_flag;</span></span> {<br>}</pre><pre class="programlisting">struct PlayingPaused: euml_flag<PlayingPaused>{};</pre></div><div class="refsect3" title="euml_action"><a name="d0e6605"></a><h4>euml_action</h4><p>The basic type for state or transition behaviors and guards with |
| eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class AcionName> euml_action;</span></span> {<br>}</pre><pre class="programlisting">struct close_drawer : euml_action<close_drawer> |
| { |
| template <class Fsm,class Evt,class SourceState,class TargetState> |
| void operator()(Evt const& , Fsm&, SourceState& ,TargetState& ) {...} |
| };</pre><p>Or, as state entry or exit behavior:</p><pre class="programlisting">struct Playing_Entry : euml_action<Playing_Entry> |
| { |
| template <class Event,class Fsm,class State> |
| void operator()(Event const&,Fsm& fsm,State& ){...} |
| };</pre></div><div class="refsect3" title="euml_config"><a name="d0e6620"></a><h4>euml_config</h4><p>The basic type for configuration possibilities with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class ConfigName> euml_config;</span></span> {<br>}</pre><p>You normally do not use this type directly but instead the instances |
| of predefined configuration:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>no_exception: disable catching exceptions</p></li><li class="listitem"><p>no_msg_queue: disable message queue. The message queue |
| allows you to send an event for procesing while in an event |
| processing.</p></li><li class="listitem"><p>deferred_events: manually enable handling of deferred |
| events</p></li></ul></div></div><div class="refsect3" title="invalid_type"><a name="d0e6641"></a><h4>invalid_type</h4><p>Type returned by grammar parsers if the grammar is invalid. Seeing |
| this type will result in a static assertion.</p></div><div class="refsect3" title="no_action"><a name="d0e6646"></a><h4>no_action</h4><p>Placeholder type for use in entry/exit or transition behaviors, which |
| does absolutely nothing.</p></div><div class="refsect3" title="source_"><a name="d0e6651"></a><h4>source_</h4><p>Generic object or function for the source state of a given transition:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>as object: returns by reference the source state of a |
| transition, usually to be used by another function (usually |
| one created by MSM_EUML_METHOD or MSM_EUML_FUNCTION).</p><p>Example: |
| </p><pre class="programlisting">some_user_function_(source_)</pre></li><li class="listitem"><p>as function: returns by reference the attribute passed as |
| parameter.</p><p>Example: |
| </p><pre class="programlisting">source_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="target_"><a name="d0e6671"></a><h4>target_</h4><p>Generic object or function for the target state of a given transition:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>as object: returns by reference the target state of a |
| transition, usually to be used by another function (usually |
| one created by MSM_EUML_METHOD or MSM_EUML_FUNCTION).</p><p>Example: |
| </p><pre class="programlisting">some_user_function_(target_)</pre></li><li class="listitem"><p>as function: returns by reference the attribute passed as |
| parameter.</p><p>Example: |
| </p><pre class="programlisting">target_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="state_"><a name="d0e6691"></a><h4>state_</h4><p>Generic object or function for the state of a given entry / exit |
| behavior. state_ means source_ while in the context of an exit behavior |
| and target_ in the context of an entry behavior:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>as object: returns by reference the current state, usually |
| to be used by another function (usually one created by |
| MSM_EUML_METHOD or MSM_EUML_FUNCTION).</p><p>Example: |
| </p><pre class="programlisting">some_user_function_(state_) // calls some_user_function on the current state</pre></li><li class="listitem"><p>as function: returns by reference the attribute passed as |
| parameter.</p><p>Example: |
| </p><pre class="programlisting">state_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="event_"><a name="d0e6711"></a><h4>event_</h4><p>Generic object or function for the event triggering a given transition |
| (valid in a transition behavior, as well as in state entry/exit behaviors):</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>as object: returns by reference the event of a transition, |
| usually to be used by another function (usually one created |
| by MSM_EUML_METHOD or MSM_EUML_FUNCTION).</p><p>Example: |
| </p><pre class="programlisting">some_user_function_(event_)</pre></li><li class="listitem"><p>as function: returns by reference the attribute passed as |
| parameter.</p><p>Example: |
| </p><pre class="programlisting">event_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="fsm_"><a name="d0e6731"></a><h4>fsm_</h4><p>Generic object or function for the state machine containing a given transition:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>as object: returns by reference the event of a transition, |
| usually to be used by another function (usually one created |
| by MSM_EUML_METHOD or MSM_EUML_FUNCTION).</p><p>Example: |
| </p><pre class="programlisting">some_user_function_(fsm_)</pre></li><li class="listitem"><p>as function: returns by reference the attribute passed as |
| parameter.</p><p>Example: |
| </p><pre class="programlisting">fsm_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="substate_"><a name="d0e6751"></a><h4>substate_</h4><p>Generic object or function returning a state of a given state machine:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>with 1 parameter: returns by reference the state passed as |
| parameter, usually to be used by another function (usually |
| one created by MSM_EUML_METHOD or MSM_EUML_FUNCTION).</p><p>Example: |
| </p><pre class="programlisting">some_user_function_(substate_(my_state))</pre></li><li class="listitem"><p>with 2 parameters: returns by reference the state passed |
| as first parameter from the state machine passed as second |
| parameter, usually to be used by another function (usually |
| one created by MSM_EUML_METHOD or MSM_EUML_FUNCTION). This |
| makes sense when used in combination with attribute_.</p><p>Example (equivalent to the previous example): |
| </p><pre class="programlisting">some_user_function_(substate_(my_state,fsm_))</pre></li></ul></div></div><div class="refsect3" title="attribute_"><a name="d0e6771"></a><h4>attribute_</h4><p>Generic object or function returning the attribute passed (by name) as |
| second parameter of the thing passed as first (a state, event or state |
| machine). Example: </p><p> |
| </p><pre class="programlisting">attribute_(substate_(my_state),cd_name_attribute)++</pre><p> |
| </p></div><div class="refsect3" title="True_"><a name="d0e6781"></a><h4>True_</h4><p>Functor returning true for transition or state behaviors. Like all |
| constants, only the functor form exists, so parenthesis are necessary. |
| Example:</p><p> |
| </p><pre class="programlisting">if_then_(True_(),/* some action always called*/)</pre><p> |
| </p></div><div class="refsect3" title="False_"><a name="d0e6791"></a><h4>False_</h4><p>Functor returning false for transition or state behaviors. Like all |
| constants, only the functor form exists, so parenthesis are necessary. |
| Example:</p><p> |
| </p><pre class="programlisting">if_then_(False_(),/* some action never called */)</pre><p> |
| </p></div><div class="refsect3" title="Int_<int value>"><a name="d0e6801"></a><h4>Int_<int value></h4><p>Functor returning an integer value for transition or state behaviors. |
| Like all constants, only the functor form exists, so parenthesis are |
| necessary. Example:</p><p> |
| </p><pre class="programlisting">target_(m_ringing_cpt) = Int_<RINGING_TIME>() // RINGING_TIME is a constant</pre><p> |
| </p></div><div class="refsect3" title="Char_<char value>"><a name="d0e6811"></a><h4>Char_<char value></h4><p>Functor returning a char value for transition or state behaviors. Like |
| all constants, only the functor form exists, so parenthesis are |
| necessary. Example:</p><p> |
| </p><pre class="programlisting">// look for 'S' in event.m_song |
| [string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != Npos_<string>()]</pre><p> |
| </p></div><div class="refsect3" title="Size_t_<size_t value>"><a name="d0e6821"></a><h4>Size_t_<size_t value></h4><p>Functor returning a size_t value for transition or state behaviors. |
| Like all constants, only the functor form exists, so parenthesis are |
| necessary. Example:</p><p> |
| </p><pre class="programlisting">substr_(event_(m_song),Size_t_<1>()) // returns a substring of event.m_song</pre><p> |
| </p></div><div class="refsect3" title="String_ < mpl::string >"><a name="d0e6831"></a><h4>String_ < mpl::string ></h4><p>Functor returning a string for transition or state behaviors. Like all |
| constants, only the functor form exists, so parenthesis are necessary. |
| Requires boost >= 1.40 for mpl::string.</p><p>Example:</p><p> |
| </p><pre class="programlisting">// adds "Let it be" to fsm.m_src_container |
| push_back_(fsm_(m_src_container), String_<mpl::string<'Let','it ','be'> >())</pre><p> |
| </p></div><div class="refsect3" title="Predicate_ < some_stl_compatible_functor >"><a name="d0e6843"></a><h4>Predicate_ < some_stl_compatible_functor ></h4><p>This functor eUML-enables a STL functor (for use in an algorithm). |
| This is necessary because all what is in the transition table must be a |
| eUML terminal.</p><p>Example:</p><pre class="programlisting">//equivalent to: |
| //std::accumulate(fsm.m_vec.begin(),fsm.m_vec.end(),1,std::plus<int>())== 1 |
| accumulate_(begin_(fsm_(m_vec)),end_(fsm_(m_vec)),Int_<1>(), |
| Predicate_<std::plus<int> >()) == Int_<1>())</pre></div><div class="refsect3" title="process_"><a name="d0e6852"></a><h4>process_</h4><p>This function sends an event to up to 4 state machines by calling |
| <code class="code">process_event</code> on them:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">process_(some_event)</code> : processes an event in |
| the current (containing) state machine.</p></li><li class="listitem"><p><code class="code">process_(some_event [,fsm1...fsm4] )</code> : |
| processes the same event in the 1-4 state machines passed as |
| argument.</p></li></ul></div></div><div class="refsect3" title="process2_"><a name="d0e6871"></a><h4>process2_</h4><p>This function sends an event to up to 3 state machines by calling |
| <code class="code">process_event</code> on them and copy-constructing the event |
| from the data passed as second parameter:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">process2_(some_event, some_data)</code> : processes |
| an event in the current (containing) state machine.</p></li><li class="listitem"><p><code class="code">process2_(some_event, some_data [,fsm1...fsm3] |
| )</code> : processes the same event in the 1-3 state |
| machines passed as argument.</p></li></ul></div><p>Example: </p><p> |
| </p><pre class="programlisting">// processes NotFound on current state machine, |
| // copy-constructed with event.m_song |
| process2_(NotFound,event_(m_song))</pre><p> |
| </p><p>With the following definitions:</p><pre class="programlisting">BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)//declaration of m_song |
| NotFound (const string& data) // copy-constructor of NotFound</pre></div><div class="refsect3" title="is_flag_"><a name="d0e6901"></a><h4>is_flag_</h4><p>This function tells if a flag is active by calling |
| <code class="code">is_flag_active</code> on the current state machine or one |
| passed as parameter:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">is_flag_(some_flag)</code> : calls |
| <code class="code">is_flag_active</code> on the current (containing) |
| state machine.</p></li><li class="listitem"><p><code class="code">is_flag_(some_flag, some_fsm)</code> :calls |
| <code class="code">is_flag_active</code> on the state machine.passed |
| as argument.</p></li></ul></div></div><div class="refsect3" title="defer_"><a name="d0e6926"></a><h4>defer_</h4><p>This object defers the current event by calling |
| <code class="code">defer_event</code> on the current state machine. |
| Example:</p><pre class="programlisting">Empty() + play() / defer_</pre></div><div class="refsect3" title="explicit_(submachine-name,state-name)"><a name="d0e6936"></a><h4>explicit_(submachine-name,state-name)</h4><p>Used as transition's target, causes an explicit entry into the given |
| state from the given submachine. Several explicit_ as targets, separated |
| by commas, means a fork. The state must have been declared as such using |
| BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE.</p></div><div class="refsect3" title="entry_pt_(submachine-name,state-name)"><a name="d0e6941"></a><h4>entry_pt_(submachine-name,state-name)</h4><p>Used as transition's target from a containing state machine, causes |
| submachine-name to be entered using the given entry pseudo-state. This |
| state must have been declared as pseudo entry using |
| BOOST_MSM_EUML_ENTRY_STATE.</p></div><div class="refsect3" title="exit_pt_(submachine-name,state-name)"><a name="d0e6946"></a><h4>exit_pt_(submachine-name,state-name)</h4><p>Used as transition's source from a containing state machine, causes |
| submachine-name to be left using the given exit pseudo-state. This state |
| must have been declared as pseudo exit using |
| BOOST_MSM_EUML_EXIT_STATE.</p></div><div class="refsect3" title="MSM_EUML_FUNCTION"><a name="d0e6951"></a><h4>MSM_EUML_FUNCTION</h4><p>This macro creates a eUML function and a functor for use with the |
| functor front-end, based on a free function:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>first parameter: the name of the functor</p></li><li class="listitem"><p>second parameter: the underlying function</p></li><li class="listitem"><p>third parameter: the eUML function name</p></li><li class="listitem"><p>fourth parameter: the return type if used in a transition |
| behavior</p></li><li class="listitem"><p>fifth parameter: the return type if used in a state |
| behavior (entry/exit)</p></li></ul></div><p> Note that the function itself can take up to 5 |
| arguments.</p><p>Example:</p><p> |
| </p><pre class="programlisting">MSM_EUML_FUNCTION(BinarySearch_,std::binary_search,binary_search_,bool,bool)</pre><p> |
| </p><p>Can be used like:</p><p> |
| </p><pre class="programlisting">binary_search_(begin_(fsm_(m_var)),end_(fsm_(m_var)),Int_<9>())</pre><p> |
| </p></div><div class="refsect3" title="MSM_EUML_METHOD"><a name="d0e6987"></a><h4>MSM_EUML_METHOD</h4><p>This macro creates a eUML function and a functor for use with the |
| functor front-end, based on a method:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>first parameter: the name of the functor</p></li><li class="listitem"><p>second parameter: the underlying function</p></li><li class="listitem"><p>third parameter: the eUML function name</p></li><li class="listitem"><p>fourth parameter: the return type if used in a transition |
| behavior</p></li><li class="listitem"><p>fifth parameter: the return type if used in a state |
| behavior (entry/exit)</p></li></ul></div><p> Note that the method itself can take up to 4 arguments |
| (5 like for a free function - 1 for the object on which the method is |
| called).</p><p>Example:</p><pre class="programlisting">struct Empty : public msm::front::state<> , public euml_state<Empty> |
| { |
| void activate_empty() {std::cout << "switching to Empty " << std::endl;} |
| ... |
| }; |
| MSM_EUML_METHOD(ActivateEmpty_,activate_empty,activate_empty_,void,void)</pre><p>Can be used like:</p><p> |
| </p><pre class="programlisting">Empty == Open + open_close / (close_drawer , activate_empty_(target_))</pre><p> |
| </p></div><div class="refsect3" title="BOOST_MSM_EUML_ACTION(action-instance-name)"><a name="d0e7020"></a><h4>BOOST_MSM_EUML_ACTION(action-instance-name)</h4><p>This macro declares a behavior type and a const instance for use in |
| state or transition behaviors. The action implementation itself follows |
| the macro declaration, for example:</p><pre class="programlisting">BOOST_MSM_EUML_ACTION(good_disk_format) |
| { |
| template <class Fsm,class Evt,class SourceState,class TargetState> |
| void/bool operator()(Evt const& evt,Fsm&,SourceState& ,TargetState& ){...} |
| };</pre></div><div class="refsect3" title="BOOST_MSM_EUML_FLAG(flag-instance-name)"><a name="d0e7027"></a><h4>BOOST_MSM_EUML_FLAG(flag-instance-name)</h4><p>This macro declares a flag type and a const instance for use in |
| behaviors.</p></div><div class="refsect3" title="BOOST_MSM_EUML_FLAG_NAME(flag-instance-name)"><a name="d0e7032"></a><h4>BOOST_MSM_EUML_FLAG_NAME(flag-instance-name)</h4><p>This macro returns the name of the flag type generated by |
| BOOST_MSM_EUML_FLAG. You need this where the type is required (usually |
| with the back-end method is_flag_active). For example:</p><pre class="programlisting">fsm.is_flag_active<BOOST_MSM_EUML_FLAG_NAME(CDLoaded)>()</pre></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)"><a name="d0e7039"></a><h4>BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)</h4><p>This macro declares an attribute called event-name of type event-type. |
| This attribute can then be made part of an attribute list using |
| BOOST_MSM_EUML_ATTRIBUTES.</p></div><div class="refsect3" title="BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)"><a name="d0e7044"></a><h4>BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)</h4><p>This macro declares an attribute list called attributes-name based on |
| the expression as first argument. These attributes can then be made part |
| of an event using BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES, of a state as |
| 3rd parameter of BOOST_MSM_EUML_STATE or of a state machine as 5th |
| parameter of BOOST_MSM_EUML_DECLARE_STATE_MACHINE.</p><p>Attributes are added using left-shift, for example:</p><pre class="programlisting">// m_song is of type std::string |
| BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song) |
| // contains one attribute, m_song |
| BOOST_MSM_EUML_ATTRIBUTES((attributes_ << m_song ), FoundDef)</pre></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT(event-instance name)"><a name="d0e7053"></a><h4>BOOST_MSM_EUML_EVENT(event-instance name)</h4><p>This macro defines an event type (event-instance-name_helper) and |
| declares a const instance of this event type called event-instance-name |
| for use in a transition table or state behaviors.</p></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(event-instance-name,attributes)"><a name="d0e7058"></a><h4>BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(event-instance-name,attributes)</h4><p>This macro defines an event type (event-instance-name_helper) and |
| declares a const instance of this event type called event-instance-name |
| for use in a transition table or state behaviors. The event will have as |
| attributes the ones passed by the second argument:</p><p><code class="code">BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(Found,FoundDef)</code> |
| </p><p>The created event instance supports operator()(attributes) so that |
| </p><pre class="programlisting">my_back_end.process_event(Found(some_string))</pre><p> |
| is possible.</p></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT_NAME(event-instance-name)"><a name="d0e7072"></a><h4>BOOST_MSM_EUML_EVENT_NAME(event-instance-name)</h4><p>This macro returns the name of the event type generated by |
| BOOST_MSM_EUML_EVENT or BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES. You need |
| this where the type is required (usually inside a back-end definition). |
| For example:</p><p> |
| </p><pre class="programlisting">typedef msm::back::state_machine<Playing_, |
| msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause) |
| > > > Playing_type;</pre><p> |
| </p></div><div class="refsect3" title="BOOST_MSM_EUML_STATE(build-expression,state-instance-name)"><a name="d0e7082"></a><h4>BOOST_MSM_EUML_STATE(build-expression,state-instance-name)</h4><p>This macro defines a state type (state-instance-name_helper) and |
| declares a const instance of this state type called state-instance-name |
| for use in a transition table or state behaviors.</p><p>There are several possibilitites for the expression syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>(): state without entry or exit action.</p></li><li class="listitem"><p>(Expr1): state with entry but no exit action.</p></li><li class="listitem"><p>(Expr1,Expr2): state with entry and exit action.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes): state with entry and exit |
| action, defining some attributes.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure): state with entry and |
| exit action, defining some attributes and flags (standard |
| MSM flags) or deferred events (standard MSM deferred |
| events).</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure,Base): state with entry |
| and exit action, defining some attributes, flags and |
| deferred events (plain msm deferred events) and a |
| non-default base state (as defined in standard MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_INTERRUPT_STATE(build-expression,state-instance-name)"><a name="d0e7108"></a><h4>BOOST_MSM_EUML_INTERRUPT_STATE(build-expression,state-instance-name)</h4><p>This macro defines an interrupt state type |
| (state-instance-name_helper) and declares a const instance of this state |
| type called state-instance-name for use in a transition table or state |
| behaviors.</p><p>There are several possibilitites for the expression syntax. In all of |
| them, the first argument is the name of the event (generated by one of |
| the previous macros) ending the interrupt:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>(end_interrupt_event): interrupt state without entry or |
| exit action.</p></li><li class="listitem"><p>(end_interrupt_event,Expr1): interrupt state with entry |
| but no exit action.</p></li><li class="listitem"><p>(end_interrupt_event,Expr1,Expr2): interrupt state with |
| entry and exit action.</p></li><li class="listitem"><p>(end_interrupt_event,Expr1,Expr2,Attributes): interrupt |
| state with entry and exit action, defining some |
| attributes.</p></li><li class="listitem"><p>(end_interrupt_event,Expr1,Expr2,Attributes,Configure): |
| interrupt state with entry and exit action, defining some |
| attributes and flags (standard MSM flags) or deferred events |
| (standard MSM deferred events).</p></li><li class="listitem"><p>(end_interrupt_event,Expr1,Expr2,Attributes,Configure,Base): |
| interrupt state with entry and exit action, defining some |
| attributes, flags and deferred events (plain msm deferred |
| events) and a non-default base state (as defined in standard |
| MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_TERMINATE_STATE(build-expression,state-instance-name)"><a name="d0e7134"></a><h4>BOOST_MSM_EUML_TERMINATE_STATE(build-expression,state-instance-name)</h4><p>This macro defines a terminate pseudo-state type |
| (state-instance-name_helper) and declares a const instance of this state |
| type called state-instance-name for use in a transition table or state |
| behaviors.</p><p>There are several possibilitites for the expression syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>(): terminate pseudo-state without entry or exit |
| action.</p></li><li class="listitem"><p>(Expr1): terminate pseudo-state with entry but no exit |
| action.</p></li><li class="listitem"><p>(Expr1,Expr2): terminate pseudo-state with entry and exit |
| action.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes): terminate pseudo-state with |
| entry and exit action, defining some attributes.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure): terminate pseudo-state |
| with entry and exit action, defining some attributes and |
| flags (standard MSM flags) or deferred events (standard MSM |
| deferred events).</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure,Base): terminate |
| pseudo-state with entry and exit action, defining some |
| attributes, flags and deferred events (plain msm deferred |
| events) and a non-default base state (as defined in standard |
| MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_EXIT_STATE(build-expression,state-instance-name)"><a name="d0e7160"></a><h4>BOOST_MSM_EUML_EXIT_STATE(build-expression,state-instance-name)</h4><p>This macro defines an exit pseudo-state type |
| (state-instance-name_helper) and declares a const instance of this state |
| type called state-instance-name for use in a transition table or state |
| behaviors.</p><p>There are several possibilitites for the expression syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>(forwarded_event):exit pseudo-state without entry or exit |
| action.</p></li><li class="listitem"><p>(forwarded_event,Expr1): exit pseudo-state with entry but |
| no exit action.</p></li><li class="listitem"><p>(forwarded_event,Expr1,Expr2): exit pseudo-state with |
| entry and exit action.</p></li><li class="listitem"><p>(forwarded_event,Expr1,Expr2,Attributes): exit |
| pseudo-state with entry and exit action, defining some |
| attributes.</p></li><li class="listitem"><p>(forwarded_event,Expr1,Expr2,Attributes,Configure): exit |
| pseudo-state with entry and exit action, defining some |
| attributes and flags (standard MSM flags) or deferred events |
| (standard MSM deferred events).</p></li><li class="listitem"><p>(forwarded_event,Expr1,Expr2,Attributes,Configure,Base): |
| exit pseudo-state with entry and exit action, defining some |
| attributes, flags and deferred events (plain msm deferred |
| events) and a non-default base state (as defined in standard |
| MSM).</p></li></ul></div><p>Note that the forwarded_event must be constructible from the event |
| sent by the submachine containing the exit point.</p></div><div class="refsect3" title="BOOST_MSM_EUML_ENTRY_STATE(int region-index,build-expression,state-instance-name)"><a name="d0e7188"></a><h4>BOOST_MSM_EUML_ENTRY_STATE(int |
| region-index,build-expression,state-instance-name)</h4><p>This macro defines an entry pseudo-state type |
| (state-instance-name_helper) and declares a const instance of this state |
| type called state-instance-name for use in a transition table or state |
| behaviors.</p><p>There are several possibilitites for the expression syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>(): entry pseudo-state without entry or exit |
| action.</p></li><li class="listitem"><p>(Expr1): entry pseudo-state with entry but no exit |
| action.</p></li><li class="listitem"><p>(Expr1,Expr2): entry pseudo-state with entry and exit |
| action.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes): entry pseudo-state with entry |
| and exit action, defining some attributes.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure): entry pseudo-state |
| with entry and exit action, defining some attributes and |
| flags (standard MSM flags) or deferred events (standard MSM |
| deferred events).</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure,Base): entry |
| pseudo-state with entry and exit action, defining some |
| attributes, flags and deferred events (plain msm deferred |
| events) and a non-default base state (as defined in standard |
| MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE(int region-index,build-expression,state-instance-name)"><a name="d0e7214"></a><h4>BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE(int |
| region-index,build-expression,state-instance-name)</h4><p>This macro defines a submachine's substate type |
| (state-instance-name_helper), which can be explicitly entered and also |
| declares a const instance of this state type called state-instance-name |
| for use in a transition table or state behaviors.</p><p>There are several possibilitites for the expression syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>(): state without entry or exit action.</p></li><li class="listitem"><p>(Expr1): state with entry but no exit action.</p></li><li class="listitem"><p>(Expr1,Expr2): state with entry and exit action.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes): state with entry and exit |
| action, defining some attributes.</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure): state with entry and |
| exit action, defining some attributes and flags (standard |
| MSM flags) or deferred events (standard MSM deferred |
| events).</p></li><li class="listitem"><p>(Expr1,Expr2,Attributes,Configure,Base): state with entry |
| and exit action, defining some attributes, flags and |
| deferred events (plain msm deferred events) and a |
| non-default base state (as defined in standard MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_STATE_NAME(state-instance-name)"><a name="d0e7240"></a><h4>BOOST_MSM_EUML_STATE_NAME(state-instance-name)</h4><p>This macro returns the name of the state type generated by |
| BOOST_MSM_EUML_STATE or other state macros. You need this where the type |
| is required (usually using a backend function). For example:</p><p> |
| </p><pre class="programlisting">fsm.get_state<BOOST_MSM_EUML_STATE_NAME(StringFind)&>().some_state_function();</pre><p> |
| </p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)"><a name="d0e7250"></a><h4>BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)</h4><p>Like BOOST_MSM_EUML_STATE but does not provide an instance, simply a |
| type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_INTERRUPT_STATE(build-expression,state-instance-name)"><a name="d0e7255"></a><h4>BOOST_MSM_EUML_DECLARE_INTERRUPT_STATE(build-expression,state-instance-name)</h4><p>Like BOOST_MSM_EUML_INTERRUPT_STATE but does not provide an instance, |
| simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_TERMINATE_STATE(build-expression,state-instance-name)"><a name="d0e7260"></a><h4>BOOST_MSM_EUML_DECLARE_TERMINATE_STATE(build-expression,state-instance-name)</h4><p>Like BOOST_MSM_EUML_TERMINATE_STATE but does not provide an instance, |
| simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_EXIT_STATE(build-expression,state-instance-name)"><a name="d0e7265"></a><h4>BOOST_MSM_EUML_DECLARE_EXIT_STATE(build-expression,state-instance-name)</h4><p>Like BOOST_MSM_EUML_EXIT_STATE but does not provide an instance, |
| simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_ENTRY_STATE(int region-index,build-expression,state-instance-name)"><a name="d0e7270"></a><h4>BOOST_MSM_EUML_DECLARE_ENTRY_STATE(int |
| region-index,build-expression,state-instance-name)</h4><p>Like BOOST_MSM_EUML_ENTRY_STATE but does not provide an instance, |
| simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_EXPLICIT_ENTRY_STATE(int region-index,build-expression,state-instance-name)"><a name="d0e7275"></a><h4>BOOST_MSM_EUML_DECLARE_EXPLICIT_ENTRY_STATE(int |
| region-index,build-expression,state-instance-name)</h4><p>Like BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE but does not provide an |
| instance, simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_TRANSITION_TABLE(expression, table-instance-name)"><a name="d0e7280"></a><h4>BOOST_MSM_EUML_TRANSITION_TABLE(expression, |
| table-instance-name)</h4><p>This macro declares a transition table type and also declares a const |
| instance of the table which can then be used in a state machine |
| declaration (see BOOST_MSM_EUML_DECLARE_STATE_MACHINE).The expression |
| must follow the <span class="command"><strong><a class="command" href="re03.html#reference-stt-grammar">transition |
| table grammar</a></strong></span>.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(iexpression,table-instance-name)"><a name="d0e7288"></a><h4>BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(iexpression,table-instance-name)</h4><p>Like BOOST_MSM_EUML_TRANSITION_TABLE but does not provide an instance, |
| simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expression, table-instance-name)"><a name="d0e7293"></a><h4>BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expression, |
| table-instance-name)</h4><p>This macro declares a transition table type and also declares a const |
| instance of the table.The expression must follow the <span class="command"><strong><a class="command" href="re03.html#reference-stt-grammar">transition table |
| grammar</a></strong></span>. For the moment, this macro is not used.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(iexpression,table-instance-name)"><a name="d0e7301"></a><h4>BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(iexpression,table-instance-name)</h4><p>Like BOOST_MSM_EUML_TRANSITION_TABLE but does not provide an instance, |
| simply a type declaration. This is currently the only way to declare an |
| internal transition table with eUML. For example:</p><pre class="programlisting">BOOST_MSM_EUML_DECLARE_STATE((Open_Entry,Open_Exit),Open_def) |
| struct Open_impl : public Open_def |
| { |
| BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(( |
| open_close [internal_guard1] / internal_action1 , |
| open_close [internal_guard2] / internal_action2 |
| )) |
| }; </pre></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="re02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Back-end </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> |