Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r72032 - in trunk/libs/msm/doc: HTML HTML/examples PDF PDF/examples
From: christophe.j.henry_at_[hidden]
Date: 2011-05-18 17:05:58


Author: chenry
Date: 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
New Revision: 72032
URL: http://svn.boost.org/trac/boost/changeset/72032

Log:
new version for 1.47
Added:
   trunk/libs/msm/doc/HTML/ch08s04.html (contents, props changed)
   trunk/libs/msm/doc/HTML/examples/ExampleCircularBuffer.cpp (contents, props changed)
   trunk/libs/msm/doc/PDF/examples/ExampleCircularBuffer.cpp (contents, props changed)
Binary files modified:
   trunk/libs/msm/doc/PDF/msm.pdf
Text files modified:
   trunk/libs/msm/doc/HTML/ch03.html | 13
   trunk/libs/msm/doc/HTML/ch03s02.html | 48 ++++--
   trunk/libs/msm/doc/HTML/ch03s03.html | 23 ++
   trunk/libs/msm/doc/HTML/ch03s04.html | 49 ++++--
   trunk/libs/msm/doc/HTML/ch03s05.html | 36 ++--
   trunk/libs/msm/doc/HTML/ch04.html | 4
   trunk/libs/msm/doc/HTML/ch04s02.html | 2
   trunk/libs/msm/doc/HTML/ch04s03.html | 2
   trunk/libs/msm/doc/HTML/ch04s04.html | 2
   trunk/libs/msm/doc/HTML/ch04s05.html | 2
   trunk/libs/msm/doc/HTML/ch05.html | 2
   trunk/libs/msm/doc/HTML/ch06.html | 4
   trunk/libs/msm/doc/HTML/ch06s02.html | 2
   trunk/libs/msm/doc/HTML/ch06s03.html | 2
   trunk/libs/msm/doc/HTML/ch06s04.html | 2
   trunk/libs/msm/doc/HTML/ch07.html | 5
   trunk/libs/msm/doc/HTML/ch07s02.html | 2
   trunk/libs/msm/doc/HTML/ch08.html | 15 -
   trunk/libs/msm/doc/HTML/ch08s02.html | 17 +
   trunk/libs/msm/doc/HTML/ch08s03.html | 14
   trunk/libs/msm/doc/HTML/ch09.html | 4
   trunk/libs/msm/doc/HTML/ch10.html | 18 +-
   trunk/libs/msm/doc/HTML/examples/CompositeTutorial.cpp | 11 +
   trunk/libs/msm/doc/HTML/examples/Orthogonal-deferred.cpp | 12 +
   trunk/libs/msm/doc/HTML/examples/SimpleTutorial.cpp | 27 ++
   trunk/libs/msm/doc/HTML/examples/SimpleTutorial2.cpp | 14 +
   trunk/libs/msm/doc/HTML/examples/SimpleTutorialEuml.cpp | 11 +
   trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors.cpp | 14 +
   trunk/libs/msm/doc/HTML/index.html | 17 +-
   trunk/libs/msm/doc/HTML/pt01.html | 15 +
   trunk/libs/msm/doc/HTML/pt02.html | 4
   trunk/libs/msm/doc/HTML/re01.html | 4
   trunk/libs/msm/doc/HTML/re02.html | 76 +++++-----
   trunk/libs/msm/doc/HTML/re03.html | 282 ++++++++++++++++++++--------------------
   trunk/libs/msm/doc/PDF/examples/CompositeTutorial.cpp | 11 +
   trunk/libs/msm/doc/PDF/examples/Orthogonal-deferred.cpp | 12 +
   trunk/libs/msm/doc/PDF/examples/SimpleTutorial.cpp | 27 ++
   trunk/libs/msm/doc/PDF/examples/SimpleTutorial2.cpp | 14 +
   trunk/libs/msm/doc/PDF/examples/SimpleTutorialEuml.cpp | 11 +
   trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors.cpp | 14 +
   40 files changed, 518 insertions(+), 326 deletions(-)

Modified: trunk/libs/msm/doc/HTML/ch03.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch03.html (original)
+++ trunk/libs/msm/doc/HTML/ch03.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,12 +1,13 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;3.&nbsp;Tutorial</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch02s03.html" title="State machine glossary"><link rel="next" href="ch03s02.html" title="Basic front-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">Chapter&nbsp;3.&nbsp;Tutorial</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;3.&nbsp;Tutorial"><div class="titlep
age"><div><div><h2 class="title"><a name="d0e402"></a>Chapter&nbsp;3.&nbsp;Tutorial</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">Design</span></dt><dt><span class="sect1">Basic front-end</span></dt><dd><dl><dt><span class="sect2">A simple example</span></dt><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2">Orthogonal regions, terminate state, event deferring</spa
n></dt><dt><span class="sect2">History</span></dt><dt><span class="sect2">Completion (anonymous) transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">more row types</span></dt><dt><span class="sect2">Explicit entry / entry and exit pseudo-state / fork</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Event Hierarchy</span></dt><dt><span class="sect2">Customizing a state machine / Getting more speed</span></dt><dt><span class="sect2">Choosing the initial event</span></dt><dt><span class="sect2"> Containing state machine (deprecated)</span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.ht
ml">Functor front-end</a></span></dt><dd><dl><dt><span class="sect2"> Transition table </span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards (Part 2)?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Anonymous transitions</span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1380">Internal
- transitions</a></span></dt></dl></dd><dt><span class="sect1">eUML (experimental)</span></dt><dd><dl><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">A simple example: rewriting only our transition table</span></dt><dt><span class="sect2">Defining events, actions and states with entry/exit actions</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1699">
- Attributes / Function call</a></span></dt><dt><span class="sect2">Orthogonal regions, flags, event deferring</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1911">
+ <title>Chapter&nbsp;3.&nbsp;Tutorial</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch02s03.html" title="State machine glossary"><link rel="next" href="ch03s02.html" title="Basic front-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">Chapter&nbsp;3.&nbsp;Tutorial</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;3.&nbsp;Tutorial"><div class="titlep
age"><div><div><h2 class="title"><a name="d0e402"></a>Chapter&nbsp;3.&nbsp;Tutorial</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">Design</span></dt><dt><span class="sect1">Basic front-end</span></dt><dd><dl><dt><span class="sect2">A simple example</span></dt><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2">Orthogonal regions, terminate state, event deferring</spa
n></dt><dt><span class="sect2">History</span></dt><dt><span class="sect2">Completion (anonymous) transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">more row types</span></dt><dt><span class="sect2">Explicit entry / entry and exit pseudo-state / fork</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Event Hierarchy</span></dt><dt><span class="sect2">Customizing a state machine / Getting more speed</span></dt><dt><span class="sect2">Choosing the initial event</span></dt><dt><span class="sect2"> Containing state machine (deprecated)</span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.ht
ml">Functor front-end</a></span></dt><dd><dl><dt><span class="sect2"> Transition table </span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards (Part 2)?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Anonymous transitions</span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1396">Internal
+ transitions</a></span></dt></dl></dd><dt><span class="sect1">eUML (experimental)</span></dt><dd><dl><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">A simple example: rewriting only our transition table</span></dt><dt><span class="sect2">Defining events, actions and states with entry/exit actions</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1741">
+ Attributes / Function call</a></span></dt><dt><span class="sect2">Orthogonal regions, flags, event deferring</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1953">
                         Customizing a state machine / Getting
- more speed</a></span></dt><dt><span class="sect2">Completion / Anonymous transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">Other state types</span></dt><dt><span class="sect2">Helper functions</span></dt><dt><span class="sect2">Phoenix-like STL support</span></dt></dl></dd><dt><span class="sect1">Back-end</span></dt><dd><dl><dt><span class="sect2">Creation </span></dt><dt><span class="sect2">Starting a state machine</span></dt><dt><span class="sect2">Event dispatching</span></dt><dt><span class="sect2">Active state(s)</span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2258">Serialization
</a></span></dt><dt><span class="sect2">Base state type </span></dt><dt><span class="sect2">Visitor</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Getting a state</span></dt><dt><span class="sect2"> State machine constructor with arguments </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2446">Trading run-time speed for
- better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2">Compile-time state machine analysis </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2572"> Enqueueing events for later
- processing </a></span></dt><dt><span class="sect2"> Customizing the message queues </span></dt><dt><span class="sect2">Policy definition with Boost.Parameter </span></dt></dl></dd></dl></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e405"></a>Design</h2></div></div></div><p>MSM is divided between front&#8211;ends and back-ends. At the moment, there is just
+ more speed</a></span></dt><dt><span class="sect2">Completion / Anonymous transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">Other state types</span></dt><dt><span class="sect2">Helper functions</span></dt><dt><span class="sect2">Phoenix-like STL support</span></dt></dl></dd><dt><span class="sect1">Back-end</span></dt><dd><dl><dt><span class="sect2">Creation </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2265">Starting and stopping a state
+ machine</a></span></dt><dt><span class="sect2">Event dispatching</span></dt><dt><span class="sect2">Active state(s)</span></dt><dt><span class="sect2">Serialization</span></dt><dt><span class="sect2">Base state type </span></dt><dt><span class="sect2">Visitor</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Getting a state</span></dt><dt><span class="sect2"> State machine constructor with arguments </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2495">Trading run-time speed for
+ better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2">Compile-time state machine analysis </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2621"> Enqueueing events for later
+ processing </a></span></dt><dt><span class="sect2"> Customizing the message queues </span></dt><dt><span class="sect2">Policy definition with Boost.Parameter </span></dt></dl></dd></dl></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e405"></a>Design</h2></div></div></div><p>MSM is divided between front&#8211;ends and back-ends. At the moment, there is just
                     one back-end. On the front-end side, you will find three of them which are as
                     many state machine description languages, with many more possible. For potential
                     language writers, this document contains a <a class="link" href="ch06s02.html#internals-front-back-interface">description of the interface

Modified: trunk/libs/msm/doc/HTML/ch03s02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch03s02.html (original)
+++ trunk/libs/msm/doc/HTML/ch03s02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -122,7 +122,20 @@
                         / irow2 transitions.<span class="command"><strong><a class="command" href="ch03s02.html#basic-row2">_row2, a_row2, row2,
                             g_row2, a_irow2, irow2, g_irow2</a></strong></span> let you call an action located
                         in any state of the current fsm or in the front-end itself, thus letting you
- place useful data anywhere you see fit.</p></div><div class="sect2" title="Defining a simple state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e542"></a>Defining a simple state machine</h3></div></div></div><p>Declaring a state machine is straightforward and is done with a high
+ place useful data anywhere you see fit.</p><p>It is sometimes desirable to generate new events for the state machine
+ inside actions. Since the process_event method belongs to the back end, you
+ first need to gain a reference to it. The back end derives from the front
+ end, so one way of doing this is to use a cast:</p><pre class="programlisting">struct launcher_ : public msm::front::state_machine_def&lt;launcher_&gt;{
+template &lt;class Fire&gt; void send_rocket(Fire const&amp; evt)
+{
+ fire_rocket();
+ msm::back::state_machine&lt;launcher_&gt; &amp;fsm = static_cast&lt;msm::back::state_machine&lt;launcher_&gt; &amp;&gt;(*this);
+ fsm.process_event(rocket_launched());
+}
+...
+};</pre><p>The same can be implemented inside entry/exit actions. Admittedly, this is
+ a bit awkward. A more natural mechanism is available using the <span class="command"><strong><a class="command" href="ch03s03.html#functor-front-end-actions">functor</a></strong></span>
+ front-end.</p></div><div class="sect2" title="Defining a simple state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e551"></a>Defining a simple state machine</h3></div></div></div><p>Declaring a state machine is straightforward and is done with a high
                         signal / noise ratio. In our player example, we declare the state machine
                         as:</p><pre class="programlisting">struct player_ : public msm::front::state_machine_def&lt;player_&gt;{
                             /* see below */}</pre><p>This declares a state machine using the basic front-end. We now declare
@@ -158,7 +171,8 @@
                         activate the initial state, which means in turn that the initial state's
                         entry behavior will be called. The reason why we need this will be explained
                         in the <a class="link" href="ch03s05.html#backend-start">back-end part</a>. After a call
- to start, the state machine is ready to process events.</p></div><div class="sect2" title="Defining a submachine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e597"></a>Defining a submachine</h3></div></div></div><p>We now want to extend our last state machine by making the Playing state a
+ to start, the state machine is ready to process events. The same way,
+ calling <code class="code">stop()</code> will cause the last exit actions to be called.</p></div><div class="sect2" title="Defining a submachine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e609"></a>Defining a submachine</h3></div></div></div><p>We now want to extend our last state machine by making the Playing state a
                         state machine itself (a submachine).</p><p><span class="inlinemediaobject"><img src="../images/CompositeTutorial.jpg" width="60%"></span></p><p>Again, an <a class="link" href="examples/CompositeTutorial.cpp" target="_top">example</a>
                         is also provided.</p><p>A submachine really is a state machine itself, so we declare Playing as
                         such, choosing a front-end and a back-end:</p><p>
@@ -184,7 +198,7 @@
                         PreviousSong) will now be automatically forwarded to Playing whenever this
                         state is active. All other state machine features described later are also
                         available. You can even decide to use a state machine sometimes as
- submachine or sometimes as an independent state machine.</p></div><div class="sect2" title="Orthogonal regions, terminate state, event deferring"><div class="titlepage"><div><div><h3 class="title"><a name="d0e632"></a>Orthogonal regions, terminate state, event deferring</h3></div></div></div><p>It is a very common problem in many state machines to have to handle
+ submachine or sometimes as an independent state machine.</p></div><div class="sect2" title="Orthogonal regions, terminate state, event deferring"><div class="titlepage"><div><div><h3 class="title"><a name="d0e644"></a>Orthogonal regions, terminate state, event deferring</h3></div></div></div><p>It is a very common problem in many state machines to have to handle
                         errors. It usually involves defining a transition from all the states to a
                         special error state. Translation: not fun. It is also not practical to find
                         from which state the error originated. The following diagram shows an
@@ -260,7 +274,7 @@
                         (condition1) defer play event":</p><p>
                         </p><pre class="programlisting">Row &lt; Empty , play , none , Defer , condition1 &gt;,
 g_row &lt; Empty , play , Playing , &amp;player_::condition2 &gt;</pre><p>
- </p><p>Please have a look at <a class="link" href="examples/Orthogonal-deferred2.cpp" target="_top">this possible implementation</a>.</p></div><div class="sect2" title="History"><div class="titlepage"><div><div><h3 class="title"><a name="d0e723"></a>History</h3></div></div></div><p>UML defines two types of history, Shallow History and Deep History. In the
+ </p><p>Please have a look at <a class="link" href="examples/Orthogonal-deferred2.cpp" target="_top">this possible implementation</a>.</p></div><div class="sect2" title="History"><div class="titlepage"><div><div><h3 class="title"><a name="d0e735"></a>History</h3></div></div></div><p>UML defines two types of history, Shallow History and Deep History. In the
                         previous examples, if the player was playing the second song and the user
                         pressed pause, leaving Playing, at the next press on the play button, the
                         Playing state would become active and the first song would play again. Soon
@@ -307,7 +321,7 @@
                         be added). The reason is that it would conflict with policies which
                         submachines could define. Of course, if for example, Song1 were a state
                         machine itself, it could use the ShallowHistory policy itself thus creating
- Deep History for itself. An <a class="link" href="examples/History.cpp" target="_top">example</a> is also provided.</p></div><div class="sect2" title="Completion (anonymous) transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e768"></a>Completion (anonymous) transitions</h3></div></div></div><p><span class="command"><strong><a name="anonymous-transitions"></a></strong></span>The following diagram shows an
+ Deep History for itself. An <a class="link" href="examples/History.cpp" target="_top">example</a> is also provided.</p></div><div class="sect2" title="Completion (anonymous) transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e780"></a>Completion (anonymous) transitions</h3></div></div></div><p><span class="command"><strong><a name="anonymous-transitions"></a></strong></span>The following diagram shows an
                         example making use of this feature:</p><p><span class="inlinemediaobject"><img src="../images/Anonymous.jpg" width="60%"></span></p><p>Anonymous transitions are transitions without a named event. This means
                         that the transition automatically fires when the predecessor state is
                         entered (to be exact, after the entry action). Otherwise it is a normal
@@ -334,7 +348,7 @@
                         for example:</p><p>
                         </p><pre class="programlisting">row &lt; State3 , none , State4 , &amp;p::State3ToState4 , &amp;p::always_true &gt;</pre><p>
                     </p><p><a class="link" href="examples/AnonymousTutorial.cpp" target="_top">An implementation</a>
- of the state machine diagram is also provided.</p></div><div class="sect2" title="Internal transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e795"></a><span class="command"><strong><a name="internal-transitions"></a></strong></span>Internal transitions</h3></div></div></div><p>Internal transitions are transitions executing in the scope of the active
+ of the state machine diagram is also provided.</p></div><div class="sect2" title="Internal transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e807"></a><span class="command"><strong><a name="internal-transitions"></a></strong></span>Internal transitions</h3></div></div></div><p>Internal transitions are transitions executing in the scope of the active
                         state, a simple state or a submachine. One can see them as a self-transition
                         of this state, without an entry or exit action called. This is useful when
                         all you want is to execute some code for a given event in a given
@@ -399,7 +413,7 @@
                         alternative, adding orthogonal regions, because event dispatching will, if
                         accepted by the internal table, not continue to the subregions. This gives
                         you a O(1) dispatch instead of O(number of regions). While the example is
- with eUML, the same is also possible with any front-end.</p></div><div class="sect2" title="more row types"><div class="titlepage"><div><div><h3 class="title"><a name="d0e897"></a><span class="command"><strong><a name="basic-row2"></a></strong></span>more row types</h3></div></div></div><p>It is also possible to write transitions using actions and guards not just
+ with eUML, the same is also possible with any front-end.</p></div><div class="sect2" title="more row types"><div class="titlepage"><div><div><h3 class="title"><a name="d0e909"></a><span class="command"><strong><a name="basic-row2"></a></strong></span>more row types</h3></div></div></div><p>It is also possible to write transitions using actions and guards not just
                         from the state machine but also from its contained states. In this case, one
                         must specify not just a method pointer but also the object on which to call
                         it. This transition row is called, not very originally, <code class="code">row2</code>.
@@ -416,7 +430,7 @@
                         sections.</p><p>These row types allow us to distribute the state machine code among
                         states, making them reusable and more useful. Using transition tables inside
                         states also contributes to this possibility. An <a class="link" href="examples/SimpleTutorial2.cpp" target="_top">example</a> of these new
- rows is also provided.</p></div><div class="sect2" title="Explicit entry / entry and exit pseudo-state / fork"><div class="titlepage"><div><div><h3 class="title"><a name="d0e930"></a>Explicit entry / entry and exit pseudo-state / fork</h3></div></div></div><p>MSM (almost) fully supports these features, described in the <span class="command"><strong><a class="command" href="ch02s02.html#uml-history">small UML tutorial</a></strong></span>. Almost because
+ rows is also provided.</p></div><div class="sect2" title="Explicit entry / entry and exit pseudo-state / fork"><div class="titlepage"><div><div><h3 class="title"><a name="d0e942"></a>Explicit entry / entry and exit pseudo-state / fork</h3></div></div></div><p>MSM (almost) fully supports these features, described in the <span class="command"><strong><a class="command" href="ch02s02.html#uml-history">small UML tutorial</a></strong></span>. Almost because
                         there are currently two limitations: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>it is only possible to explicitly enter a sub- state of the
                                     target but not a sub-sub state.</p></li><li class="listitem"><p>it is not possible to explicitly exit. Exit points must be
                                     used.</p></li></ul></div><p>Let us see a concrete example:</p><p><span class="inlinemediaobject"><img src="../images/entrytutorial.jpg" width="60%"></span></p><p>We find in this diagram:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A &#8220;normal&#8221; activation of SubFsm2, triggered by event1. In each
@@ -436,7 +450,7 @@
                                     transition and both regions are exited, as SubFsm2 becomes
                                     inactive. Note that if no transition is defined from
                                     PseudoExit1, an error (as defined in the UML standard) will be
- detected and no_transition called.</p></li></ul></div><p>The example is also <a class="link" href="examples/DirectEntryTutorial.cpp" target="_top">fully implemented</a>.</p><p>This sounds complicated but the syntax is simple.</p><div class="sect3" title="Explicit entry"><div class="titlepage"><div><div><h4 class="title"><a name="d0e976"></a>Explicit entry</h4></div></div></div><p>First, to define that a state is an explicit entry, you have to make
+ detected and no_transition called.</p></li></ul></div><p>The example is also <a class="link" href="examples/DirectEntryTutorial.cpp" target="_top">fully implemented</a>.</p><p>This sounds complicated but the syntax is simple.</p><div class="sect3" title="Explicit entry"><div class="titlepage"><div><div><h4 class="title"><a name="d0e988"></a>Explicit entry</h4></div></div></div><p>First, to define that a state is an explicit entry, you have to make
                             it a state and mark it as explicit, giving as template parameters the
                             region id (the region id starts with 0 and corresponds to the first
                             initial state of the initial_state type sequence).</p><p>
@@ -471,7 +485,7 @@
                         </p><p><span class="underline">Note (also valid for forks)</span>: At
                             the moment, it is not possible to use a submachine as the target of an
                             explicit entry. Please use entry pseudo states for an almost identical
- effect.</p></div><div class="sect3" title="Fork"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1028"></a>Fork</h4></div></div></div><p>Need a fork instead of an explicit entry? As a fork is an explicit
+ effect.</p></div><div class="sect3" title="Fork"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1040"></a>Fork</h4></div></div></div><p>Need a fork instead of an explicit entry? As a fork is an explicit
                             entry into states of different regions, we do not change the state
                             definition compared to the explicit entry and specify as target a list
                             of explicit entry states:</p><p>
@@ -484,7 +498,7 @@
                             correct):</p><p>
                             </p><pre class="programlisting">struct SubState2b : public msm::front::state&lt;&gt; ,
                     public msm::front::explicit_entry&lt;1&gt;</pre><p>
- </p></div><div class="sect3" title="Entry pseudo states"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1045"></a>Entry pseudo states</h4></div></div></div><p> To define an entry pseudo state, you need derive from the
+ </p></div><div class="sect3" title="Entry pseudo states"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1057"></a>Entry pseudo states</h4></div></div></div><p> To define an entry pseudo state, you need derive from the
                             corresponding class and give the region id:</p><p>
                             </p><pre class="programlisting">struct PseudoEntry1 : public msm::front::entry_pseudo_state&lt;0&gt;</pre><p>
                         </p><p>And add the corresponding transition in the top-level state machine's
@@ -494,7 +508,7 @@
                             defines an entry point as a connection between two transitions), for
                             example this time with an action method:</p><p>
                             </p><pre class="programlisting">_row &lt; PseudoEntry1, Event4, SubState3,&amp;SubFsm2_::entry_action &gt;</pre><p>
- </p></div><div class="sect3" title="Exit pseudo states"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1069"></a> Exit pseudo states </h4></div></div></div><p>And finally, exit pseudo states are to be used almost the same way,
+ </p></div><div class="sect3" title="Exit pseudo states"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1081"></a> Exit pseudo states </h4></div></div></div><p>And finally, exit pseudo states are to be used almost the same way,
                             but defined differently: it takes as template argument the event to be
                             forwarded (no region id is necessary):</p><p>
                             </p><pre class="programlisting">struct PseudoExit1 : public exit_pseudo_state&lt;event6&gt;</pre><p>
@@ -525,7 +539,7 @@
     template &lt;class Event&gt;
     event6(Event const&amp;){}
 }; //convertible from any event</pre><p>
- </p></div></div><div class="sect2" title="Flags"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1110"></a>Flags</h3></div></div></div><p>This <a class="link" href="examples/Flags.cpp" target="_top">tutorial</a> is devoted to a
+ </p></div></div><div class="sect2" title="Flags"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1122"></a>Flags</h3></div></div></div><p>This <a class="link" href="examples/Flags.cpp" target="_top">tutorial</a> is devoted to a
                         concept not defined in UML: flags. It has been added into MSM after proving
                         itself useful on many occasions. Please, do not be frightened as we are not
                         talking about ugly shortcuts made of an improbable collusion of
@@ -557,7 +571,7 @@
                         all of the active states are flagged for the state to be active. You can
                         also AND the active states:</p><p>
                         </p><pre class="programlisting">if (p.is_flag_active&lt;CDLoaded,player::Flag_AND&gt;()) ...</pre><p>
- </p><p>The following diagram displays the flag situation in the tutorial.</p><p><span class="inlinemediaobject"><img src="../images/FlagsTutorial.jpg" width="60%"></span></p></div><div class="sect2" title="Event Hierarchy"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1164"></a><span class="command"><strong><a name="event-hierarchy"></a></strong></span>Event Hierarchy</h3></div></div></div><p>There are cases where one needs transitions based on categories of events.
+ </p><p>The following diagram displays the flag situation in the tutorial.</p><p><span class="inlinemediaobject"><img src="../images/FlagsTutorial.jpg" width="60%"></span></p></div><div class="sect2" title="Event Hierarchy"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1176"></a><span class="command"><strong><a name="event-hierarchy"></a></strong></span>Event Hierarchy</h3></div></div></div><p>There are cases where one needs transitions based on categories of events.
                         An example is text parsing. Let's say you want to parse a string and use a
                         state machine to manage your parsing state. You want to parse 4 digits and
                         decide to use a state for every matched digit. Your state machine could look
@@ -570,7 +584,7 @@
                         and this will cause a transition with "digit" as trigger to be taken.</p><p>An <a class="link" href="examples/ParsingDigits.cpp" target="_top">example</a> with
                         performance measurement, taken from the documentation of Boost.Xpressive
                         illustrates this example. You might notice that the performance is actually
- very good (in this case even better).</p></div><div class="sect2" title="Customizing a state machine / Getting more speed"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1185"></a>Customizing a state machine / Getting more speed</h3></div></div></div><p>MSM is offering many UML features at a high-speed, but sometimes, you just
+ very good (in this case even better).</p></div><div class="sect2" title="Customizing a state machine / Getting more speed"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1197"></a>Customizing a state machine / Getting more speed</h3></div></div></div><p>MSM is offering many UML features at a high-speed, but sometimes, you just
                         need more speed and are ready to give up some features in exchange. A
                         process_event is handling several tasks: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>checking for terminate/interrupt states</p></li><li class="listitem"><p>handling the message queue (for entry/exit/transition actions
                                     generating themselves events)</p></li><li class="listitem"><p>handling deferred events</p></li><li class="listitem"><p>catching exceptions (or not)</p></li><li class="listitem"><p>handling the state switching and action calls</p></li></ul></div><p>Of these tasks, only the last one is absolutely necessary to
@@ -596,7 +610,7 @@
    };</pre><p><span class="underline">Important note</span>: As exit pseudo
                         states are using the message queue to forward events out of a submachine,
                         the <code class="code">no_message_queue</code> option cannot be used with state machines
- containing an exit pseudo state.</p></div><div class="sect2" title="Choosing the initial event"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1234"></a>Choosing the initial event</h3></div></div></div><p>A state machine is started using the <code class="code">start</code> method. This
+ containing an exit pseudo state.</p></div><div class="sect2" title="Choosing the initial event"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1246"></a>Choosing the initial event</h3></div></div></div><p>A state machine is started using the <code class="code">start</code> method. This
                         causes the initial state's entry behavior to be executed. Like every entry
                         behavior, it becomes as parameter the event causing the state to be entered.
                         But when the machine starts, there was no event triggered. In this case, MSM
@@ -608,7 +622,7 @@
 struct player_ : public msm::front::state_machine_def&lt;player_&gt;{
 ...
 typedef my_initial_event initial_event;
-};</pre></div><div class="sect2" title="Containing state machine (deprecated)"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1247"></a> Containing state machine (deprecated)</h3></div></div></div><p>This feature is still supported in MSM for backward compatibility but made
+};</pre></div><div class="sect2" title="Containing state machine (deprecated)"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1259"></a> Containing state machine (deprecated)</h3></div></div></div><p>This feature is still supported in MSM for backward compatibility but made
                         obsolete by the fact that every guard/action/entry action/exit action get
                         the state machine passed as argument and might be removed at a later
                         time.</p><p>All of the states defined in the state machine are created upon state

Modified: trunk/libs/msm/doc/HTML/ch03s03.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch03s03.html (original)
+++ trunk/libs/msm/doc/HTML/ch03s03.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Functor 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.20"><link rel="up" href="ch03.html" title="Chapter&nbsp;3.&nbsp;Tutorial"><link rel="prev" href="ch03s02.html" title="Basic front-end"><link rel="next" href="ch03s04.html" title="eUML (experimental)"></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">Functor front-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Functor front-end"><div class="titlepage"><div><div><h2 class="title" style="c
lear: both"><a name="d0e1262"></a><span class="command"><strong><a name="functor-front-end"></a></strong></span>Functor front-end</h2></div></div></div><p>The functor front-end is the preferred front-end at the moment. It is more
+ <title>Functor 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.20"><link rel="up" href="ch03.html" title="Chapter&nbsp;3.&nbsp;Tutorial"><link rel="prev" href="ch03s02.html" title="Basic front-end"><link rel="next" href="ch03s04.html" title="eUML (experimental)"></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">Functor front-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Functor front-end"><div class="titlepage"><div><div><h2 class="title" style="c
lear: both"><a name="d0e1274"></a><span class="command"><strong><a name="functor-front-end"></a></strong></span>Functor front-end</h2></div></div></div><p>The functor front-end is the preferred front-end at the moment. It is more
                     powerful than the standard front-end and has a more readable transition table.
                     It also makes it easier to reuse parts of state machines. Like <span class="command"><strong><a class="command" href="ch03s04.html#eUML-front-end">eUML</a></strong></span>, it also comes with a good deal
                     of predefined actions. Actually, eUML generates a functor front-end through
@@ -11,7 +11,7 @@
                                 means syntactic noise and more to learn.</p></li><li class="listitem"><p>Function pointers are weird in C++.</p></li><li class="listitem"><p>The action/guard signature is limited and does not allow for more
                                 variations of parameters (source state, target state, current state
                                 machine, etc.)</p></li><li class="listitem"><p>It is not easy to reuse action code from a state machine to
- another.</p></li></ul></div><div class="sect2" title="Transition table"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1286"></a> Transition table </h3></div></div></div><p>We can change the definition of the simple tutorial's transition table
+ another.</p></li></ul></div><div class="sect2" title="Transition table"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1298"></a> Transition table </h3></div></div></div><p>We can change the definition of the simple tutorial's transition table
                         to:</p><pre class="programlisting">
 struct transition_table : mpl::vector&lt;
 // Start Event Target Action Guard
@@ -66,7 +66,7 @@
                         can achieve this using And_ and Or_ functors:
                         </p><pre class="programlisting">And_&lt;good_disk_format,Or_&lt; some_condition , some_other_condition&gt; &gt;</pre><p>It
                         even starts looking like functional programming. MSM ships with functors for
- operators, state machine usage, STL algorithms or container methods.</p></div><div class="sect2" title="Defining states with entry/exit actions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1319"></a>Defining states with entry/exit actions</h3></div></div></div><p>You probably noticed that we just showed a different transition table and
+ operators, state machine usage, STL algorithms or container methods.</p></div><div class="sect2" title="Defining states with entry/exit actions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1331"></a>Defining states with entry/exit actions</h3></div></div></div><p>You probably noticed that we just showed a different transition table and
                         that we even mixed rows from different front-ends. This means that you can
                         do this and leave the definitions for states unchanged. Most examples are
                         doing this as it is the simplest solution. You still enjoy the simplicity of
@@ -89,7 +89,7 @@
                             rewritten</a>.</p><p>Usually, however, one will probably use the standard state definition as
                         it provides the same capabilities as this front-end state definition, unless
                         one needs some of the shipped predefined functors or is a fan of functional
- programming.</p></div><div class="sect2" title="What do you actually do inside actions / guards (Part 2)?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1338"></a><span class="command"><strong><a name="functor-front-end-actions"></a></strong></span>What do you actually do inside actions / guards (Part 2)?</h3></div></div></div><p>Using the basic front-end, we saw how to pass data to actions through the
+ programming.</p></div><div class="sect2" title="What do you actually do inside actions / guards (Part 2)?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1350"></a><span class="command"><strong><a name="functor-front-end-actions"></a></strong></span>What do you actually do inside actions / guards (Part 2)?</h3></div></div></div><p>Using the basic front-end, we saw how to pass data to actions through the
                         event, that data common to all states could be stored in the state machine,
                         state relevant data could be stored in the state and access as template
                         parameter in the entry / exit actions. What was however missing was the
@@ -104,16 +104,25 @@
     {
         fire_rocket(evt.direction, src.current_calculation);
     }
-}; </pre></div><div class="sect2" title="Defining a simple state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1346"></a>Defining a simple state machine</h3></div></div></div><p>Like states, state machines can be defined using the previous front-end,
+}; </pre><p>It was a little awkward to generate new events inside actions with the basic
+ front-end. With the functor front-end it is much cleaner:</p><pre class="programlisting">struct send_rocket
+{
+ template &lt;class Fsm,class Evt,class SourceState,class TargetState&gt;
+ void operator()(Evt const&amp; evt, Fsm&amp; fsm, SourceState&amp; src,TargetState&amp;)
+ {
+ fire_rocket(evt.direction, src.current_calculation);
+ fsm.process_event(rocket_launched());
+ }
+}; </pre></div><div class="sect2" title="Defining a simple state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1362"></a>Defining a simple state machine</h3></div></div></div><p>Like states, state machines can be defined using the previous front-end,
                         as the previous example showed, or with the functor front-end, which allows
                         you to define a state machine entry and exit functions as functors, as in
                             <a class="link" href="examples/SimpleWithFunctors2.cpp" target="_top">this
- example</a>.</p></div><div class="sect2" title="Anonymous transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1354"></a>Anonymous transitions</h3></div></div></div><p>Anonymous (completion) transitions are transitions without a named event.
+ example</a>.</p></div><div class="sect2" title="Anonymous transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1370"></a>Anonymous transitions</h3></div></div></div><p>Anonymous (completion) transitions are transitions without a named event.
                         We saw how this front-end uses <code class="code">none</code> when no action or guard is
                         required. We can also use <code class="code">none</code> instead of an event to mark an
                         anonymous transition. For example, the following transition makes an
                         immediate transition from State1 to State2:</p><pre class="programlisting">Row &lt; State1 , none , State2 &gt;</pre><p>The following transition does the same but calling an action in the
- process:</p><pre class="programlisting">Row &lt; State1 , none , State2 , State1ToState2, none &gt;</pre><p>The following diagram shows an example and its <a class="link" href="examples/AnonymousTutorialWithFunctors.cpp" target="_top">implementation</a>:</p><p><span class="inlinemediaobject"><img src="../images/Anonymous.jpg" width="70%"></span></p></div><div class="sect2" title="Internal transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1380"></a><span class="command"><strong><a name="functor-internal-transitions"></a></strong></span>Internal
+ process:</p><pre class="programlisting">Row &lt; State1 , none , State2 , State1ToState2, none &gt;</pre><p>The following diagram shows an example and its <a class="link" href="examples/AnonymousTutorialWithFunctors.cpp" target="_top">implementation</a>:</p><p><span class="inlinemediaobject"><img src="../images/Anonymous.jpg" width="70%"></span></p></div><div class="sect2" title="Internal transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1396"></a><span class="command"><strong><a name="functor-internal-transitions"></a></strong></span>Internal
                         transitions</h3></div></div></div><p>The <a class="link" href="examples/SimpleTutorialInternalFunctors.cpp" target="_top">following example</a> uses internal transitions with the functor
                         front-end. As for the simple standard front-end, both methods of defining
                         internal transitions are supported:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>providing a <code class="code">Row</code> in the state machine's transition

Modified: trunk/libs/msm/doc/HTML/ch03s04.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch03s04.html (original)
+++ trunk/libs/msm/doc/HTML/ch03s04.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>eUML (experimental)</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.20"><link rel="up" href="ch03.html" title="Chapter&nbsp;3.&nbsp;Tutorial"><link rel="prev" href="ch03s03.html" title="Functor front-end"><link rel="next" href="ch03s05.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">eUML (experimental)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="eUML (experimental)"><div class="titlepage"><div><div><h2 class="title" style="clea
r: both"><a name="d0e1426"></a><span class="command"><strong><a name="eUML-front-end"></a></strong></span>eUML (experimental)</h2></div></div></div><p><span class="underline">Important note</span>: eUML requires a compiler
+ <title>eUML (experimental)</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.20"><link rel="up" href="ch03.html" title="Chapter&nbsp;3.&nbsp;Tutorial"><link rel="prev" href="ch03s03.html" title="Functor front-end"><link rel="next" href="ch03s05.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">eUML (experimental)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="eUML (experimental)"><div class="titlepage"><div><div><h2 class="title" style="clea
r: both"><a name="d0e1442"></a><span class="command"><strong><a name="eUML-front-end"></a></strong></span>eUML (experimental)</h2></div></div></div><p><span class="underline">Important note</span>: eUML requires a compiler
                     supporting Boost.Typeof. More generally, eUML has experimental status because
                     some compilers will start crashing when a state machine becomes too big (usually
                     when you write huge actions).</p><p>The previous front-ends are simple to write but still force an amount of
@@ -20,7 +20,7 @@
                     </p><pre class="programlisting">#include &lt;msm/front/euml/euml.hpp&gt;</pre><p>
                 </p><p>To add STL support (at possible cost of longer compilation times), include: </p><p>
                     </p><pre class="programlisting">#include &lt;msm/front/euml/stl.hpp&gt;</pre><p>
- </p><p>eUML is defined in the namespace <code class="code">msm::front::euml</code>.</p><div class="sect2" title="Transition table"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1459"></a>Transition table</h3></div></div></div><p>A transition can be defined using eUML as: </p><p>
+ </p><p>eUML is defined in the namespace <code class="code">msm::front::euml</code>.</p><div class="sect2" title="Transition table"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1475"></a>Transition table</h3></div></div></div><p>A transition can be defined using eUML as: </p><p>
                         </p><pre class="programlisting">source + event [guard] / action == target</pre><p>
                     </p><p>or as</p><p>
                         </p><pre class="programlisting">target == source + event [guard] / action</pre><p>
@@ -56,14 +56,14 @@
                         [good_disk_format &amp;&amp; (some_condition || some_other_condition)]. This
                         was possible with our previously defined functors, but using a complicated
                         template syntax. This syntax is now possible exactly as written, which means
- without any syntactic noise at all.</p></div><div class="sect2" title="A simple example: rewriting only our transition table"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1500"></a>A simple example: rewriting only our transition table</h3></div></div></div><p>As an introduction to eUML, we will rewrite our tutorial's transition
+ without any syntactic noise at all.</p></div><div class="sect2" title="A simple example: rewriting only our transition table"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1516"></a>A simple example: rewriting only our transition table</h3></div></div></div><p>As an introduction to eUML, we will rewrite our tutorial's transition
                         table using eUML. This will require two or three changes, depending on the compiler:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>events must inherit from msm::front::euml::euml_event&lt;
                                     event_name &gt;</p></li><li class="listitem"><p>states must inherit from msm::front::euml::euml_state&lt;
                                     state_name &gt;</p></li><li class="listitem"><p>with VC, states must be declared before the front-end</p></li></ul></div><p>We now can write the transition table like just shown, using
                         BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE instead of
                         BOOST_MSM_EUML_TRANSITION_TABLE. The <a class="link" href="examples/SimpleTutorialWithEumlTable.cpp" target="_top">implementation</a> is pretty
                         straightforward.</p><p>We now have a new, more readable transition table with few changes to our
- example. eUML can do much more so please follow the guide.</p></div><div class="sect2" title="Defining events, actions and states with entry/exit actions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1522"></a>Defining events, actions and states with entry/exit actions</h3></div></div></div><div class="sect3" title="Events"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1525"></a>Events</h4></div></div></div><p>Events must be proto-enabled. To achieve this, they must inherit from
+ example. eUML can do much more so please follow the guide.</p></div><div class="sect2" title="Defining events, actions and states with entry/exit actions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1538"></a>Defining events, actions and states with entry/exit actions</h3></div></div></div><div class="sect3" title="Events"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1541"></a>Events</h4></div></div></div><p>Events must be proto-enabled. To achieve this, they must inherit from
                             a proto terminal (euml_event&lt;event-name&gt;). eUML also provides a macro
                             to make this easier:</p><p>
                             </p><pre class="programlisting">BOOST_MSM_EUML_EVENT(play)</pre><p>
@@ -78,7 +78,7 @@
                                 <code class="code">fsm.process_event(play());</code> or do we have to write:
                                 <code class="code">fsm.process_event(play);</code></p><p>The answer is you can do both. The second one is easier but unlike
                             other front-ends, the second uses a defined operator(), which creates an
- event on the fly.</p></div><div class="sect3" title="Actions"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1556"></a>Actions</h4></div></div></div><p>Actions (returning void) and guards (returning a bool) are defined
+ event on the fly.</p></div><div class="sect3" title="Actions"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1572"></a>Actions</h4></div></div></div><p>Actions (returning void) and guards (returning a bool) are defined
                             like previous functors, with the difference that they also must be
                             proto-enabled. This can be done by inheriting from euml_action&lt;
                             functor-name &gt;. eUML also provides a macro:</p><pre class="programlisting">BOOST_MSM_EUML_ACTION(some_condition)
@@ -109,7 +109,7 @@
 BOOST_MSM_EUML_TRANSITION_TABLE((
 Playing == Stopped + play / start_playback() ,
 ...
-),transition_table)</pre></div><div class="sect3" title="States"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1579"></a>States</h4></div></div></div><p>There is also a macro for states. This macro has 2 arguments, first
+),transition_table)</pre></div><div class="sect3" title="States"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1595"></a>States</h4></div></div></div><p>There is also a macro for states. This macro has 2 arguments, first
                             the expression defining the state, then the state (instance)
                             name:</p><pre class="programlisting">BOOST_MSM_EUML_STATE((),Paused)</pre><p>This defines a simple state without entry or exit action. You can
                             provide in the expression parameter the state behaviors (entry and exit)
@@ -150,7 +150,24 @@
                             could use with the functor front-end, the second is the state method
                             name, the third is the eUML-generated function, the fourth and fifth the
                             return value when used inside a transition or a state behavior. You can
- now use this inside a transition:</p><pre class="programlisting">Empty == Open + open_close / (close_drawer,activate_empty_(target_))</pre></div></div><div class="sect2" title="Defining a simple state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1635"></a>Defining a simple state machine</h3></div></div></div><p>You can reuse the state machine definition method from the standard
+ now use this inside a transition:</p><pre class="programlisting">Empty == Open + open_close / (close_drawer,activate_empty_(target_))</pre></div><div class="sect3" title="Writing actions with Boost.Phoenix (in development)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e1651"></a><span class="command"><strong><a name="eUML-phoenix"></a></strong></span>Writing actions with Boost.Phoenix (in development)</h4></div></div></div><p> It is also possible to write actions, guards, state entry and exit
+ actions using a reduced set of Boost.Phoenix capabilities. This feature
+ is still in development stage, so you might get here and there some
+ surprise. Simple cases, however, should work well. What will not work
+ will be mixing of eUML and Phoenix functors. Writing guards in one
+ language and actions in another is ok though.</p><p>Phoenix also supports a larger syntax than what will ever be possible
+ with eUML, so you can only use a reduced set of phoenix's grammar. This
+ is due to the nature of eUML. The run-time transition table definition
+ is translated to a type using Boost.Typeof. The result is a "normal" MSM
+ transition table made of functor types. As C++ does not allow mixing
+ run-time and compile-time constructs, there will be some limit (trying
+ to instantiate a template class MyTemplateClass&lt;i&gt; where i is an int
+ will give you an idea). This means following valid Phoenix constructs
+ will not work:</p><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>literals</p></li><li class="listitem"><p>function pointers</p></li><li class="listitem"><p>bind</p></li><li class="listitem"><p>-&gt;*</p></li></ul></div><p>
+ </p><p>Future versions of MSM will support Phoenix better. You can contribute
+ by finding out cases which do not work but should, so that they can be
+ added.</p></div></div><div class="sect2" title="Defining a simple state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1677"></a>Defining a simple state machine</h3></div></div></div><p>You can reuse the state machine definition method from the standard
                         front-end and simply replace the transition table by this new one. You can
                         also use eUML to define a state machine "on the fly" (if, for example, you
                         need to provide an on_entry/on_exit for this state machine as a functor).
@@ -180,7 +197,7 @@
                         BOOST_MSM_EUML_DECLARE_ATTRIBUTE macro, to which we will get back shortly,
                         declares attributes given to an eUML type (state or event) using the
                             <span class="command"><strong><a class="command" href="ch03s04.html#eUML-attributes">attribute
- syntax</a></strong></span>.</p></div><div class="sect2" title="Defining a submachine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1683"></a>Defining a submachine</h3></div></div></div><p>Defining a submachine (see <a class="link" href="examples/CompositeTutorialEuml.cpp" target="_top">tutorial</a>) with
+ syntax</a></strong></span>.</p></div><div class="sect2" title="Defining a submachine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1725"></a>Defining a submachine</h3></div></div></div><p>Defining a submachine (see <a class="link" href="examples/CompositeTutorialEuml.cpp" target="_top">tutorial</a>) with
                         other front-ends simply means using a state which is a state machine in the
                         transition table of another state machine. This is the same with eUML. One
                         only needs define a second state machine and reference it in the transition
@@ -191,7 +208,7 @@
                         machine, for example:</p><pre class="programlisting">BOOST_MSM_EUML_DECLARE_STATE_MACHINE(...,Playing_)
 typedef msm::back::state_machine&lt;Playing_&gt; Playing_type;
 Playing_type const Playing;</pre><p>We can now use this instance inside the transition table of the containing
- state machine:</p><pre class="programlisting">Paused == Playing + pause / pause_playback</pre></div><div class="sect2" title="Attributes / Function call"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1699"></a>
+ state machine:</p><pre class="programlisting">Paused == Playing + pause / pause_playback</pre></div><div class="sect2" title="Attributes / Function call"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1741"></a>
                         <span class="command"><strong><a name="eUML-attributes"></a></strong></span>Attributes / Function call</h3></div></div></div><p>We now want to make our grammar more useful. Very often, one needs only
                         very simple action methods, for example ++Counter or Counter &gt; 5 where
                         Counter is usually defined as some attribute of the class containing the
@@ -245,7 +262,7 @@
                         This method could also have an (or several) argument(s), for example the
                         event, we could then call activate_empty_(target_ , event_).</p><p>More examples can be found in the <a class="link" href="examples/CompilerStressTestEuml.cpp" target="_top">terrible compiler
                             stress test</a>, the <a class="link" href="examples/SimpleTimer.cpp" target="_top">timer example</a> or in the <a class="link" href="examples/iPodSearchEuml.cpp" target="_top">iPodSearch with eUML</a>
- (for String_ and more).</p></div><div class="sect2" title="Orthogonal regions, flags, event deferring"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1799"></a>Orthogonal regions, flags, event deferring</h3></div></div></div><p>Defining orthogonal regions really means providing more initial states. To
+ (for String_ and more).</p></div><div class="sect2" title="Orthogonal regions, flags, event deferring"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1841"></a>Orthogonal regions, flags, event deferring</h3></div></div></div><p>Defining orthogonal regions really means providing more initial states. To
                         add more initial states, &#8220;shift left&#8221; some, for example, if we had another
                         initial state named AllOk :</p><pre class="programlisting">BOOST_MSM_EUML_DECLARE_STATE_MACHINE((transition_table,
                                      init_ &lt;&lt; Empty &lt;&lt; AllOk ),
@@ -297,7 +314,7 @@
                                       attributes_ &lt;&lt; no_attributes_,
                                       configure_&lt;&lt; deferred_events ),
                                     player_)</pre><p>A <a class="link" href="examples/OrthogonalDeferredEuml2.cpp" target="_top">tutorial</a>
- illustrates this possibility.</p></div><div class="sect2" title="Customizing a state machine / Getting more speed"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1911"></a>
+ illustrates this possibility.</p></div><div class="sect2" title="Customizing a state machine / Getting more speed"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1953"></a>
                         <span class="command"><strong><a name="eUML-Configuration"></a></strong></span>Customizing a state machine / Getting
                         more speed</h3></div></div></div><p>We just saw how to use configure_ to define deferred events or flags. We
                         can also use it to configure our state machine like we did with the other front-ends:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">configure_ &lt;&lt; no_exception</code>: disables
@@ -309,7 +326,7 @@
                         with eUML does this for the best performance.</p><p><span class="underline">Important note</span>: As exit pseudo
                         states are using the message queue to forward events out of a submachine,
                         the <code class="code">no_message_queue</code> option cannot be used with state machines
- containing an exit pseudo state.</p></div><div class="sect2" title="Completion / Anonymous transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1946"></a>Completion / Anonymous transitions</h3></div></div></div><p>Anonymous transitions (See <span class="command"><strong><a class="command" href="ch02s02.html#uml-anonymous">UML
+ containing an exit pseudo state.</p></div><div class="sect2" title="Completion / Anonymous transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1988"></a>Completion / Anonymous transitions</h3></div></div></div><p>Anonymous transitions (See <span class="command"><strong><a class="command" href="ch02s02.html#uml-anonymous">UML
                             tutorial</a></strong></span>) are transitions without a named event, which are
                         therefore triggered immediately when the source state becomes active,
                         provided a guard allows it. As there is no event, to define such a
@@ -317,7 +334,7 @@
                         example: </p><pre class="programlisting">State3 == State4 [always_true] / State3ToState4
 State4 [always_true] / State3ToState4 == State3</pre><p>Please have a look at <a class="link" href="examples/AnonymousTutorialEuml.cpp" target="_top">this example</a>,
                         which implements the <span class="command"><strong><a class="command" href="ch03s02.html#anonymous-transitions">previously
- defined</a></strong></span> state machine with eUML.</p></div><div class="sect2" title="Internal transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1964"></a><span class="command"><strong><a name="eUML-internal"></a></strong></span>Internal transitions</h3></div></div></div><p>Like both other front-ends, eUML supports two ways of defining internal transitions:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>in the state machine's transition table. In this case, you
+ defined</a></strong></span> state machine with eUML.</p></div><div class="sect2" title="Internal transitions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2006"></a><span class="command"><strong><a name="eUML-internal"></a></strong></span>Internal transitions</h3></div></div></div><p>Like both other front-ends, eUML supports two ways of defining internal transitions:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>in the state machine's transition table. In this case, you
                                     need to specify a source state, event, actions and guards but no
                                     target state, which eUML will interpret as an internal
                                     transition, for example this defines a transition internal to
@@ -338,7 +355,7 @@
                                     the standard alternative, adding orthogonal regions, because
                                     event dispatching will, if accepted by the internal table, not
                                     continue to the subregions. This gives you a O(1) dispatch
- instead of O(number of regions).</p></li></ul></div></div><div class="sect2" title="Other state types"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1995"></a>Other state types</h3></div></div></div><p>We saw the <span class="command"><strong><a class="command" href="ch03s04.html#eUML-build-state">build_state</a></strong></span>
+ instead of O(number of regions).</p></li></ul></div></div><div class="sect2" title="Other state types"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2037"></a>Other state types</h3></div></div></div><p>We saw the <span class="command"><strong><a class="command" href="ch03s04.html#eUML-build-state">build_state</a></strong></span>
                         function, which creates a simple state. Likewise, eUML provides other
                         state-building macros for other types of states:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>BOOST_MSM_EUML_TERMINATE_STATE takes the same arguments as
                                     BOOST_MSM_EUML_STATE and defines, well, a terminate
@@ -378,7 +395,7 @@
                         </p><pre class="programlisting">entry_pt_(SubFsm2,PseudoEntry1) == State1 + event4</pre><p>For exit points, it is again the same syntax except that exit points are
                         used as source of the transition:
                         </p><pre class="programlisting">State2 == exit_pt_(SubFsm2,PseudoExit1) + event6 </pre><p>The <a class="link" href="examples/DirectEntryEuml.cpp" target="_top">entry tutorial</a>
- is also available with eUML.</p></div><div class="sect2" title="Helper functions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2059"></a>Helper functions</h3></div></div></div><p>We saw a few helpers but there are more, so let us have a more complete description:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>event_ : used inside any action, the event triggering the
+ is also available with eUML.</p></div><div class="sect2" title="Helper functions"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2101"></a>Helper functions</h3></div></div></div><p>We saw a few helpers but there are more, so let us have a more complete description:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>event_ : used inside any action, the event triggering the
                                     transition</p></li><li class="listitem"><p>state_: used inside entry and exit actions, the entered /
                                     exited state</p></li><li class="listitem"><p>source_: used inside a transition action, the source
                                     state</p></li><li class="listitem"><p>target_: used inside a transition action, the target
@@ -415,7 +432,7 @@
                         MSM_EUML_METHOD or MSM_EUML_FUNCTION will create a correct functor. Your own
                         eUML functors written as described at the beginning of this section will
                         also work well, <span class="underline">except</span>, for the
- moment, with the while_, if_then_, if_then_else_ functions.</p></div><div class="sect2" title="Phoenix-like STL support"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2156"></a>Phoenix-like STL support</h3></div></div></div><p>eUML supports most C++ operators (except address-of). For example it is
+ moment, with the while_, if_then_, if_then_else_ functions.</p></div><div class="sect2" title="Phoenix-like STL support"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2198"></a>Phoenix-like STL support</h3></div></div></div><p>eUML supports most C++ operators (except address-of). For example it is
                         possible to write event_(some_attribute)++ or [source_(some_bool) &amp;&amp;
                         fsm_(some_other_bool)]. But a programmer needs more than operators in his
                         daily programming. The STL is clearly a must have. Therefore, eUML comes in

Modified: trunk/libs/msm/doc/HTML/ch03s05.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch03s05.html (original)
+++ trunk/libs/msm/doc/HTML/ch03s05.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Back-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.20"><link rel="up" href="ch03.html" title="Chapter&nbsp;3.&nbsp;Tutorial"><link rel="prev" href="ch03s04.html" title="eUML (experimental)"><link rel="next" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"></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">Back-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Back-end"><div class="titlepage"><div><div><h2 class="title" style="clea
r: both"><a name="d0e2209"></a>Back-end</h2></div></div></div><p>There is, at the moment, one back-end. This back-end contains the library
+ <title>Back-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.20"><link rel="up" href="ch03.html" title="Chapter&nbsp;3.&nbsp;Tutorial"><link rel="prev" href="ch03s04.html" title="eUML (experimental)"><link rel="next" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"></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">Back-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Back-end"><div class="titlepage"><div><div><h2 class="title" style="clea
r: both"><a name="d0e2251"></a>Back-end</h2></div></div></div><p>There is, at the moment, one back-end. This back-end contains the library
                     engine and defines the performance and functionality trade-offs. The currently
                     available back-end implements most of the functionality defined by the UML 2.0
                     standard at very high runtime speed, in exchange for longer compile-time. The
@@ -8,18 +8,22 @@
                     capabilities allowing the framework to adapt itself to the features used by a
                     given concrete state machine. All unneeded features either disable themselves or
                     can be manually disabled. See section 5.1 for a complete description of the
- run-to-completion algorithm.</p><div class="sect2" title="Creation"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2214"></a>Creation </h3></div></div></div><p>MSM being divided between front and back-end, one needs to first define a
+ run-to-completion algorithm.</p><div class="sect2" title="Creation"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2256"></a>Creation </h3></div></div></div><p>MSM being divided between front and back-end, one needs to first define a
                         front-end. Then, to create a real state machine, the back-end must be
                         declared:
                         </p><pre class="programlisting">typedef msm::back::state_machine&lt;my_front_end&gt; my_fsm;</pre><p>We now have a fully functional state machine type. The next sections will
- describe what can be done with it.</p></div><div class="sect2" title="Starting a state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2223"></a><span class="command"><strong><a name="backend-start"></a></strong></span>Starting a state machine</h3></div></div></div><p>The <code class="code">start</code> method starts the state machine, meaning it will
+ describe what can be done with it.</p></div><div class="sect2" title="Starting and stopping a state machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2265"></a><span class="command"><strong><a name="backend-start"></a></strong></span>Starting and stopping a state
+ machine</h3></div></div></div><p>The <code class="code">start()</code> method starts the state machine, meaning it will
                         activate the initial state, which means in turn that the initial state's
                         entry behavior will be called. We need the start method because you do not
                         always want the entry behavior of the initial state to be called immediately
                         but only when your state machine is ready to process events. A good example
                         of this is when you use a state machine to write an algorithm and each loop
                         back to the initial state is an algorithm call. Each call to start will make
- the algorithm run once. The <a class="link" href="examples/iPodSearch.cpp" target="_top">iPodSearch</a> example uses this possibility.</p></div><div class="sect2" title="Event dispatching"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2235"></a>Event dispatching</h3></div></div></div><p>The main reason to exist for a state machine is to dispatch events. For
+ the algorithm run once. The <a class="link" href="examples/iPodSearch.cpp" target="_top">iPodSearch</a> example uses this possibility.</p><p>The <code class="code">stop()</code> method works the same way. It will cause the exit
+ actions of the currently active states(s) to be called.</p><p>Both methods are actually not an absolute need. Not calling them will
+ simply cause your first entry or your last exit action not to be
+ called.</p></div><div class="sect2" title="Event dispatching"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2284"></a>Event dispatching</h3></div></div></div><p>The main reason to exist for a state machine is to dispatch events. For
                         MSM, events are objects of a given event type. The object itself can contain
                         data, but the event type is what decides of the transition to be taken. For
                         MSM, if some_event is a given type (a simple struct for example) and e1 and
@@ -30,14 +34,14 @@
                         an event of type some_event, you can simply create one on the fly or
                         instantiate if before processing: </p><pre class="programlisting">my_fsm fsm; fsm.process_event(some_event());
 some_event e1; fsm.process_event(e1)</pre><p>Creating an event on the fly will be optimized by the compiler so the
- performance will not degrade.</p></div><div class="sect2" title="Active state(s)"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2244"></a>Active state(s)</h3></div></div></div><p>The backend also offers a way to know which state is active, though you
+ performance will not degrade.</p></div><div class="sect2" title="Active state(s)"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2293"></a>Active state(s)</h3></div></div></div><p>The backend also offers a way to know which state is active, though you
                         will normally only need this for debugging purposes. If what you need simply
                         is doing something with the active state, <span class="command"><strong><a class="command" href="ch02s02.html#UML-internal-transition">internal transitions</a></strong></span> or
                             <span class="command"><strong><a class="command" href="ch03s05.html#backend-visitor">visitors</a></strong></span> are a better
                         alternative. If you need to know what state is active, const int*
                         current_state() will return an array of state ids. Please refer to the
                             <span class="command"><strong><a class="command" href="ch06s03.html#internals-state-id">internals section</a></strong></span> to
- know how state ids are generated.</p></div><div class="sect2" title="Serialization"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2258"></a><span class="command"><strong><a name="back-end-serialization"></a></strong></span>Serialization</h3></div></div></div><p>A common need is the ability to save a state machine and restore it at a
+ know how state ids are generated.</p></div><div class="sect2" title="Serialization"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2307"></a><span class="command"><strong><a name="back-end-serialization"></a></strong></span>Serialization</h3></div></div></div><p>A common need is the ability to save a state machine and restore it at a
                         different time. MSM supports this feature for the basic and functor
                         front-ends, and in a more limited manner for eUML. MSM supports
                         boost::serialization out of the box (by offering a <code class="code">serialize</code>
@@ -106,7 +110,7 @@
                         serializing must be done in a stable state, when no event is being
                         processed. You can serialize during event processing only if using no queue
                         (deferred or event queue).</p><p>This <a class="link" href="examples/Serialize.cpp" target="_top">example</a> shows a state machine which we serialize after processing an
- event. The <code class="code">Empty</code> state also has some data to serialize.</p></div><div class="sect2" title="Base state type"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2311"></a><span class="command"><strong><a name="backend-base-state"></a></strong></span>Base state type </h3></div></div></div><p>Sometimes, one needs to customize states to avoid repetition and provide a
+ event. The <code class="code">Empty</code> state also has some data to serialize.</p></div><div class="sect2" title="Base state type"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2360"></a><span class="command"><strong><a name="backend-base-state"></a></strong></span>Base state type </h3></div></div></div><p>Sometimes, one needs to customize states to avoid repetition and provide a
                         common functionality, for example in the form of a virtual method. You might
                         also want to make your states polymorphic so that you can call typeid on
                         them for logging or debugging. It is also useful if you need a visitor, like
@@ -129,7 +133,7 @@
                                     </p><pre class="programlisting">struct player_ : public msm::front::state_machine&lt;player_,my_base_state&gt; </pre></li></ul></div><p>You can also ask for a state with a given id (which you might have gotten
                         from current_state()) using <code class="code">const base_state* get_state_by_id(int id)
                             const</code> where base_state is the one you just defined. You can now
- do something polymorphically.</p></div><div class="sect2" title="Visitor"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2337"></a><span class="command"><strong><a name="backend-visitor"></a></strong></span>Visitor</h3></div></div></div><p>In some cases, having a pointer-to-base of the currently active states is
+ do something polymorphically.</p></div><div class="sect2" title="Visitor"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2386"></a><span class="command"><strong><a name="backend-visitor"></a></strong></span>Visitor</h3></div></div></div><p>In some cases, having a pointer-to-base of the currently active states is
                         not enough. You might want to call non-virtually a method of the currently
                         active states. It will not be said that MSM forces the virtual keyword down
                         your throat!</p><p>To achieve this goal, MSM provides its own variation of a visitor pattern
@@ -168,18 +172,18 @@
                         the accept function is to contain a parameter passed by reference, pass this
                         parameter with a boost:ref/cref to avoid undesired copies or slicing. So,
                         for example, in the above case, call:</p><pre class="programlisting">SomeVisitor vis; sm.visit_current_states(boost::ref(vis));</pre><p>This <a class="link" href="examples/SM-2Arg.cpp" target="_top">example</a> uses a
- visiting function with 2 arguments.</p></div><div class="sect2" title="Flags"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2380"></a>Flags</h3></div></div></div><p>Flags is a MSM-only concept, supported by all front-ends, which base
+ visiting function with 2 arguments.</p></div><div class="sect2" title="Flags"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2429"></a>Flags</h3></div></div></div><p>Flags is a MSM-only concept, supported by all front-ends, which base
                         themselves on the functions: </p><pre class="programlisting">template &lt;class Flag&gt; bool is_flag_active()
 template &lt;class Flag,class BinaryOp&gt; bool is_flag_active()</pre><p>These functions return true if the currently active state(s) support the
                         Flag property. The first variant ORs the result if there are several
                         orthogonal regions, the second one expects OR or AND, for example:</p><pre class="programlisting">my_fsm.is_flag_active&lt;MyFlag&gt;()
-my_fsm.is_flag_active&lt;MyFlag,my_fsm_type::Flag_OR&gt;()</pre><p>Please refer to the front-ends sections for usage examples.</p></div><div class="sect2" title="Getting a state"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2393"></a>Getting a state</h3></div></div></div><p>It is sometimes necessary to have the client code get access to the
+my_fsm.is_flag_active&lt;MyFlag,my_fsm_type::Flag_OR&gt;()</pre><p>Please refer to the front-ends sections for usage examples.</p></div><div class="sect2" title="Getting a state"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2442"></a>Getting a state</h3></div></div></div><p>It is sometimes necessary to have the client code get access to the
                         states' data. After all, the states are created once for good and hang
                         around as long as the state machine does so why not use it? You simply just
                         need sometimes to get information about any state, even inactive ones. An
                         example is if you want to write a coverage tool and know how many times a
                         state was visited. To get a state, use the get_state method giving the state
- name, for example: </p><pre class="programlisting">player::Stopped* tempstate = p.get_state&lt;player::Stopped*&gt;();</pre><p> or </p><pre class="programlisting">player::Stopped&amp; tempstate2 = p.get_state&lt;player::Stopped&amp;&gt;();</pre><p>depending on your personal taste. </p></div><div class="sect2" title="State machine constructor with arguments"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2406"></a><span class="command"><strong><a name="backend-fsm-constructor-args"></a></strong></span> State machine constructor with arguments </h3></div></div></div><p>You might want to define a state machine with a non-default constructor.
+ name, for example: </p><pre class="programlisting">player::Stopped* tempstate = p.get_state&lt;player::Stopped*&gt;();</pre><p> or </p><pre class="programlisting">player::Stopped&amp; tempstate2 = p.get_state&lt;player::Stopped&amp;&gt;();</pre><p>depending on your personal taste. </p></div><div class="sect2" title="State machine constructor with arguments"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2455"></a><span class="command"><strong><a name="backend-fsm-constructor-args"></a></strong></span> State machine constructor with arguments </h3></div></div></div><p>You might want to define a state machine with a non-default constructor.
                         For example, you might want to write: </p><pre class="programlisting">struct player_ : public msm::front::state_machine_def&lt;player_&gt;
 {
     player_(int some_value){&#8230;}
@@ -205,7 +209,7 @@
                         where some data is passed:</p><pre class="programlisting">player p( back::states_ &lt;&lt; Playing(back::states_ &lt;&lt; Song1(some_Song1_data)) ,
           boost::ref(data),3);</pre><p>It is also possible to replace a given state by a new instance at any time
                         using <code class="code">set_states()</code> and the same syntax, for example:
- </p><pre class="programlisting">p.set_states( back::states_ &lt;&lt; state_1 &lt;&lt; ... &lt;&lt; state_n );</pre><p>An <a class="link" href="examples/Constructor.cpp" target="_top">example</a> making intensive use of this capability is provided.</p></div><div class="sect2" title="Trading run-time speed for better compile-time / multi-TU compilation"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2446"></a><span class="command"><strong><a name="backend-tradeof-rt-ct"></a></strong></span>Trading run-time speed for
+ </p><pre class="programlisting">p.set_states( back::states_ &lt;&lt; state_1 &lt;&lt; ... &lt;&lt; state_n );</pre><p>An <a class="link" href="examples/Constructor.cpp" target="_top">example</a> making intensive use of this capability is provided.</p></div><div class="sect2" title="Trading run-time speed for better compile-time / multi-TU compilation"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2495"></a><span class="command"><strong><a name="backend-tradeof-rt-ct"></a></strong></span>Trading run-time speed for
                         better compile-time / multi-TU compilation</h3></div></div></div><p>MSM is optimized for run-time speed at the cost of longer compile-time.
                         This can become a problem with older compilers and big state machines,
                         especially if you don't really care about run-time speed that much and would
@@ -236,7 +240,7 @@
                                         cpp for MenuMode</a></p></li><li class="listitem"><p><a class="link" href="examples/iPod_distributed/Events.hpp" target="_top">events
                                         move to a separate header as all machines use
                                     it</a></p></li></ul></div><p>
- </p></div><div class="sect2" title="Compile-time state machine analysis"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2528"></a><span class="command"><strong><a name="backend-compile-time-analysis"></a></strong></span>Compile-time state machine analysis </h3></div></div></div><p>A MSM state machine being a metaprogram, it is only logical that cheking
+ </p></div><div class="sect2" title="Compile-time state machine analysis"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2577"></a><span class="command"><strong><a name="backend-compile-time-analysis"></a></strong></span>Compile-time state machine analysis </h3></div></div></div><p>A MSM state machine being a metaprogram, it is only logical that cheking
                         for the validity of a concrete state machine happens compile-time. To this
                         aim, using the compile-time graph library <a class="link" href="http://www.dynagraph.org/mpl_graph/" target="_top">mpl_graph</a> (delivered at the moment
                         with MSM) from Gordon Woodhull, MSM provides several compile-time checks:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Check that orthogonal regions ar truly orthogonal.</p></li><li class="listitem"><p>Check that all states are either reachable from the initial
@@ -250,12 +254,12 @@
                         versions of MSM.</p><p>The same algorithm is also used in case you want to omit providing the
                         region index in the <span class="command"><strong><a class="command" href="ch03s02.html#explicit-entry-no-region-id">explicit entry / pseudo entry state</a></strong></span> declaration.</p><p>The author's advice is to enable the checks after any state machine
                         structure change and disable it again after sucessful analysis.</p><p>The <a class="link" href="examples/TestErrorOrthogonality.cpp" target="_top">following example</a> provokes an assertion if one of the first two lines
- of the transition table is used.</p></div><div class="sect2" title="Enqueueing events for later processing"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2572"></a><span class="command"><strong><a name="backend-enqueueing"></a></strong></span> Enqueueing events for later
+ of the transition table is used.</p></div><div class="sect2" title="Enqueueing events for later processing"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2621"></a><span class="command"><strong><a name="backend-enqueueing"></a></strong></span> Enqueueing events for later
                         processing </h3></div></div></div><p>Calling <code class="code">process_event(Event const&amp;)</code> will immediately
                         process the event with run-to-completion semantics. You can also enqueue the
                         events and delay their processing by calling <code class="code">enqueue_event(Event
                             const&amp;)</code> instead. Calling <code class="code">execute_queued_events()</code> will then
- process all enqueued events (in FIFO order).</p><p>You can query the queue size by calling <code class="code">get_message_queue_size()</code>.</p></div><div class="sect2" title="Customizing the message queues"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2592"></a><span class="command"><strong><a name="backend-queues"></a></strong></span> Customizing the message queues </h3></div></div></div><p>MSM uses by default a std::deque for its queues (one message queue for
+ process all enqueued events (in FIFO order).</p><p>You can query the queue size by calling <code class="code">get_message_queue_size()</code>.</p></div><div class="sect2" title="Customizing the message queues"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2641"></a><span class="command"><strong><a name="backend-queues"></a></strong></span> Customizing the message queues </h3></div></div></div><p>MSM uses by default a std::deque for its queues (one message queue for
                         events generated during run-to-completion or with
                         <code class="code">enqueue_event</code>, one for deferred events). Unfortunately, on some
                         STL implementations, it is a very expensive container in size and copying
@@ -266,7 +270,7 @@
                         Boost::circular_buffer is outside of the scope of this documentation. What
                         you will however need to define is the queue capacity (initially is 0) to
                         what you think your queue will at most grow, for example (size 1 is
- common):</p><pre class="programlisting"> fsm.get_message_queue().set_capacity(1); </pre></div><div class="sect2" title="Policy definition with Boost.Parameter"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2607"></a><span class="command"><strong><a name="backend-boost-parameter"></a></strong></span>Policy definition with Boost.Parameter </h3></div></div></div><p>MSM uses Boost.Parameter to allow easier definition of
+ common):</p><pre class="programlisting"> fsm.get_message_queue().set_capacity(1); </pre></div><div class="sect2" title="Policy definition with Boost.Parameter"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2656"></a><span class="command"><strong><a name="backend-boost-parameter"></a></strong></span>Policy definition with Boost.Parameter </h3></div></div></div><p>MSM uses Boost.Parameter to allow easier definition of
                         back::state_machine&lt;&gt; policy arguments (all except the front-end). This
                         allows you to define policy arguments (history, compile-time / run-time,
                         state machine analysis, container for the queues) at any position, in any

Modified: trunk/libs/msm/doc/HTML/ch04.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch04.html (original)
+++ trunk/libs/msm/doc/HTML/ch04.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;4.&nbsp; Performance / Compilers</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch03s05.html" title="Back-end"><link rel="next" href="ch04s02.html" title="Executable size"></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">Chapter&nbsp;4.&nbsp; Performance / Compilers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;4.&nbsp; Performan
ce / Compilers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2615"></a>Chapter&nbsp;4.&nbsp; Performance / Compilers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">Speed</span></dt><dt><span class="sect1">Executable size</span></dt><dt><span class="sect1">Supported compilers</span></dt><dt><span class="sect1"> Limitations </span></dt><dt><span class="sect1"> Compilers corner </span></dt></dl></div><p>Tests were made on different PCs running Windows XP and Vista and compiled with
+ <title>Chapter&nbsp;4.&nbsp; Performance / Compilers</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch03s05.html" title="Back-end"><link rel="next" href="ch04s02.html" title="Executable size"></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">Chapter&nbsp;4.&nbsp; Performance / Compilers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;4.&nbsp; Performan
ce / Compilers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2664"></a>Chapter&nbsp;4.&nbsp; Performance / Compilers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">Speed</span></dt><dt><span class="sect1">Executable size</span></dt><dt><span class="sect1">Supported compilers</span></dt><dt><span class="sect1"> Limitations </span></dt><dt><span class="sect1"> Compilers corner </span></dt></dl></div><p>Tests were made on different PCs running Windows XP and Vista and compiled with
                 VC9 SP1 or Ubuntu and compiled with g++ 4.2 and 4.3. For these tests, the same
                 player state machine was written using Boost.Statechart, as a <a class="link" href="examples/SCSimple.cpp" target="_top">state machine with only simple states</a>
                 and as a <a class="link" href="examples/SCComposite.cpp" target="_top">state machine with a composite
@@ -9,5 +9,5 @@
                 the simple one also with <a class="link" href="examples/MsmSimpleFunctors.cpp" target="_top">functors</a> and with <a class="link" href="examples/EumlSimple.cpp" target="_top">eUML</a>. As these simple machines need no terminate/interrupt states, no
                 message queue and have no-throw guarantee on their actions, the MSM state machines
                 are defined with minimum functionality. Test machine is a Q6600 2.4GHz, Vista
- 64.</p><div class="sect1" title="Speed"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2637"></a>Speed</h2></div></div></div><p>VC9:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The simple test completes 90 times faster with MSM than with
+ 64.</p><div class="sect1" title="Speed"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2686"></a>Speed</h2></div></div></div><p>VC9:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The simple test completes 90 times faster with MSM than with
                                 Boost.Statechart</p></li><li class="listitem"><p>The composite test completes 25 times faster with MSM</p></li></ul></div><p>gcc 4.2.3 (Ubuntu 8.04 in VMWare, same PC):</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The simple test completes 46 times faster with MSM</p></li><li class="listitem"><p>The composite test completes 19 times faster with Msm</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s05.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Back-end&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Executable size</td></tr></table></div>
</body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/ch04s02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch04s02.html (original)
+++ trunk/libs/msm/doc/HTML/ch04s02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Executable size</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="next" href="ch04s03.html" title="Supported compilers"></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">Executable size</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Executable size"><div clas
s="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2658"></a>Executable size</h2></div></div></div><p>There are some worries that MSM generates huge code. Is it true? The 2
+ <title>Executable size</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="next" href="ch04s03.html" title="Supported compilers"></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">Executable size</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Executable size"><div clas
s="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2707"></a>Executable size</h2></div></div></div><p>There are some worries that MSM generates huge code. Is it true? The 2
                     compilers I tested disagree with this claim. On VC9, the test state machines
                     used in the performance section produce executables of 14kB (for simple and
                     eUML) and 21kB (for the composite). This includes the test code and iostreams.

Modified: trunk/libs/msm/doc/HTML/ch04s03.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch04s03.html (original)
+++ trunk/libs/msm/doc/HTML/ch04s03.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Supported compilers</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04s02.html" title="Executable size"><link rel="next" href="ch04s04.html" title="Limitations"></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">Supported compilers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Supported compilers"><div class="titlepage"><div><
div><h2 class="title" style="clear: both"><a name="d0e2663"></a>Supported compilers</h2></div></div></div><p>For a current status, have a look at the <a class="link" href="http://www.boost.org/development/tests/trunk/developer/msm.html" target="_top">regression tests</a>.</p><p>MSM was successfully tested with: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>VC8 (partly), VC9, VC10</p></li><li class="listitem"><p>g++ 4.0.1 and higher</p></li><li class="listitem"><p>Intel 10.1 and higher</p></li><li class="listitem"><p>Clang 2.9</p></li><li class="listitem"><p>Green Hills Software MULTI for ARM v5.0.5 patch 4416 (Simple and
+ <title>Supported compilers</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04s02.html" title="Executable size"><link rel="next" href="ch04s04.html" title="Limitations"></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">Supported compilers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Supported compilers"><div class="titlepage"><div><
div><h2 class="title" style="clear: both"><a name="d0e2712"></a>Supported compilers</h2></div></div></div><p>For a current status, have a look at the <a class="link" href="http://www.boost.org/development/tests/trunk/developer/msm.html" target="_top">regression tests</a>.</p><p>MSM was successfully tested with: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>VC8 (partly), VC9, VC10</p></li><li class="listitem"><p>g++ 4.0.1 and higher</p></li><li class="listitem"><p>Intel 10.1 and higher</p></li><li class="listitem"><p>Clang 2.9</p></li><li class="listitem"><p>Green Hills Software MULTI for ARM v5.0.5 patch 4416 (Simple and
                                 Composite tutorials)</p></li><li class="listitem"><p>Partial support for IBM compiler</p></li></ul></div><p>VC8 and to some lesser extent VC9 suffer from a bug. Enabling the option
                     "Enable Minimal Rebuild" (/Gm) will cause much higher compile-time (up to three
                     times with VC8!). This option being activated per default in Debug mode, this

Modified: trunk/libs/msm/doc/HTML/ch04s04.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch04s04.html (original)
+++ trunk/libs/msm/doc/HTML/ch04s04.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Limitations</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04s03.html" title="Supported compilers"><link rel="next" href="ch04s05.html" title="Compilers corner"></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"> Limitations </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Limitations"><div class="titlepage"><div><div><h2 class
="title" style="clear: both"><a name="d0e2694"></a> Limitations </h2></div></div></div><p>
+ <title>Limitations</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04s03.html" title="Supported compilers"><link rel="next" href="ch04s05.html" title="Compilers corner"></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"> Limitations </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Limitations"><div class="titlepage"><div><div><h2 class
="title" style="clear: both"><a name="d0e2743"></a> Limitations </h2></div></div></div><p>
                     </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Compilation times of state machines with &gt; 80 transitions that are
                                 going to make you storm the CFO's office and make sure you get a
                                 shiny octocore with 12GB RAM by next week, unless he's interested in

Modified: trunk/libs/msm/doc/HTML/ch04s05.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch04s05.html (original)
+++ trunk/libs/msm/doc/HTML/ch04s05.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Compilers corner</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04s04.html" title="Limitations"><link rel="next" href="ch05.html" title="Chapter&nbsp;5.&nbsp;Questions &amp; Answers"></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"> Compilers corner </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Compilers corner"><div class="t
itlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2710"></a> Compilers corner </h2></div></div></div><p>Compilers are sometimes full of surprises and such strange errors happened in
+ <title>Compilers corner</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.20"><link rel="up" href="ch04.html" title="Chapter&nbsp;4.&nbsp; Performance / Compilers"><link rel="prev" href="ch04s04.html" title="Limitations"><link rel="next" href="ch05.html" title="Chapter&nbsp;5.&nbsp;Questions &amp; Answers"></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"> Compilers corner </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp; Performance / Compilers</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Compilers corner"><div class="t
itlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2759"></a> Compilers corner </h2></div></div></div><p>Compilers are sometimes full of surprises and such strange errors happened in
                     the course of the development that I wanted to list the most fun for readers&#8217;
                     entertainment.</p><p><span class="underline">VC8</span>: </p><pre class="programlisting">template &lt;class StateType&gt;
 typename ::boost::enable_if&lt;

Modified: trunk/libs/msm/doc/HTML/ch05.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch05.html (original)
+++ trunk/libs/msm/doc/HTML/ch05.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;5.&nbsp;Questions &amp; Answers</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch04s05.html" title="Compilers corner"><link rel="next" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"></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">Chapter&nbsp;5.&nbsp;Questions &amp; Answers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;5.&
nbsp;Questions &amp; Answers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2760"></a>Chapter&nbsp;5.&nbsp;Questions &amp; Answers</h2></div></div></div><p><span class="underline">Question</span>: on_entry gets as argument, the
+ <title>Chapter&nbsp;5.&nbsp;Questions &amp; Answers</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch04s05.html" title="Compilers corner"><link rel="next" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"></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">Chapter&nbsp;5.&nbsp;Questions &amp; Answers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;5.&
nbsp;Questions &amp; Answers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2809"></a>Chapter&nbsp;5.&nbsp;Questions &amp; Answers</h2></div></div></div><p><span class="underline">Question</span>: on_entry gets as argument, the
                 sent event. What event do I get when the state becomes default-activated (because it
                 is an initial state)?</p><p>
                 <span class="underline">Answer</span>: To allow you to know that the state

Modified: trunk/libs/msm/doc/HTML/ch06.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch06.html (original)
+++ trunk/libs/msm/doc/HTML/ch06.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,9 +1,9 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;6.&nbsp;Internals</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch05.html" title="Chapter&nbsp;5.&nbsp;Questions &amp; Answers"><link rel="next" href="ch06s02.html" title="Frontend / Backend interface"></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">Chapter&nbsp;6.&nbsp;Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;6.&nb
sp;Internals"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2824"></a>Chapter&nbsp;6.&nbsp;Internals</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">Backend: Run To Completion</span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
+ <title>Chapter&nbsp;6.&nbsp;Internals</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch05.html" title="Chapter&nbsp;5.&nbsp;Questions &amp; Answers"><link rel="next" href="ch06s02.html" title="Frontend / Backend interface"></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">Chapter&nbsp;6.&nbsp;Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;6.&nb
sp;Internals"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2873"></a>Chapter&nbsp;6.&nbsp;Internals</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">Backend: Run To Completion</span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
                     interface</a></span></dt><dt><span class="sect1"> Generated state ids </span></dt><dt><span class="sect1">Metaprogramming tools</span></dt></dl></div><p>This chapter describes the internal machinery of the back-end, which can be useful
                 for UML experts but can be safely ignored for most users. For implementers, the
- interface between front- and back- end is also described in detail.</p><div class="sect1" title="Backend: Run To Completion"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2829"></a><span class="command"><strong><a name="run-to-completion"></a></strong></span>Backend: Run To Completion</h2></div></div></div><p>The back-end implements the following run-to completion algorithm:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Check if one region of the concrete state machine is in a
+ interface between front- and back- end is also described in detail.</p><div class="sect1" title="Backend: Run To Completion"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2878"></a><span class="command"><strong><a name="run-to-completion"></a></strong></span>Backend: Run To Completion</h2></div></div></div><p>The back-end implements the following run-to completion algorithm:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Check if one region of the concrete state machine is in a
                                 terminate or interrupt state. If yes, event processing is disabled
                                 while the condition lasts (forever for a terminate pseudo-state,
                                 while active for an interrupt pseudo-state).</p></li><li class="listitem"><p>If the message queue feature is enabled and if the state machine

Modified: trunk/libs/msm/doc/HTML/ch06s02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch06s02.html (original)
+++ trunk/libs/msm/doc/HTML/ch06s02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,7 +1,7 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Frontend / Backend interface</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.20"><link rel="up" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"><link rel="prev" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"><link rel="next" href="ch06s03.html" title="Generated state ids"></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">Frontend / Backend
- interface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;6.&nbsp;Internals</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Frontend / Backend interface"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2895"></a><span class="command"><strong><a name="internals-front-back-interface"></a></strong></span>Frontend / Backend
+ interface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;6.&nbsp;Internals</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Frontend / Backend interface"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2944"></a><span class="command"><strong><a name="internals-front-back-interface"></a></strong></span>Frontend / Backend
                     interface</h2></div></div></div><p>The design of MSM tries to make front-ends and back-ends (later) to be as
                     interchangeable as possible. Of course, no back-end will ever implement every
                     feature defined by any possible front-end and inversely, but the goal is to make

Modified: trunk/libs/msm/doc/HTML/ch06s03.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch06s03.html (original)
+++ trunk/libs/msm/doc/HTML/ch06s03.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Generated state ids</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.20"><link rel="up" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"><link rel="prev" href="ch06s02.html" title="Frontend / Backend interface"><link rel="next" href="ch06s04.html" title="Metaprogramming tools"></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"> Generated state ids </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;6.&nbsp;Internals</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Generated state ids"><div class="titlepage"><div><div><
h2 class="title" style="clear: both"><a name="d0e3073"></a><span class="command"><strong><a name="internals-state-id"></a></strong></span> Generated state ids </h2></div></div></div><p>Normally, one does not need to know the ids are generated for all the states
+ <title>Generated state ids</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.20"><link rel="up" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"><link rel="prev" href="ch06s02.html" title="Frontend / Backend interface"><link rel="next" href="ch06s04.html" title="Metaprogramming tools"></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"> Generated state ids </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;6.&nbsp;Internals</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch06s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Generated state ids"><div class="titlepage"><div><div><
h2 class="title" style="clear: both"><a name="d0e3122"></a><span class="command"><strong><a name="internals-state-id"></a></strong></span> Generated state ids </h2></div></div></div><p>Normally, one does not need to know the ids are generated for all the states
                     of a state machine, unless for debugging purposes, like the pstate function does
                     in the tutorials in order to display the name of the current state. This section
                     will show how to automatically display typeid-generated names, but these are not

Modified: trunk/libs/msm/doc/HTML/ch06s04.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch06s04.html (original)
+++ trunk/libs/msm/doc/HTML/ch06s04.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Metaprogramming tools</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.20"><link rel="up" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"><link rel="prev" href="ch06s03.html" title="Generated state ids"><link rel="next" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Acknowledgements"></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">Metaprogramming tools</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;6.&nbsp;Internals</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch07.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Metaprogramming tools"><div class="titlepage"><div><
div><h2 class="title" style="clear: both"><a name="d0e3085"></a>Metaprogramming tools</h2></div></div></div><p>We can find for the transition table more uses than what we have seen so far.
+ <title>Metaprogramming tools</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.20"><link rel="up" href="ch06.html" title="Chapter&nbsp;6.&nbsp;Internals"><link rel="prev" href="ch06s03.html" title="Generated state ids"><link rel="next" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Acknowledgements"></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">Metaprogramming tools</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;6.&nbsp;Internals</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch07.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Metaprogramming tools"><div class="titlepage"><div><
div><h2 class="title" style="clear: both"><a name="d0e3134"></a>Metaprogramming tools</h2></div></div></div><p>We can find for the transition table more uses than what we have seen so far.
                     Let's suppose you need to write a coverage tool. A state machine would be
                     perfect for such a job, if only it could provide some information about its
                     structure. Thanks to the transition table and Boost.MPL, it does.</p><p>What is needed for a coverage tool? You need to know how many states are

Modified: trunk/libs/msm/doc/HTML/ch07.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch07.html (original)
+++ trunk/libs/msm/doc/HTML/ch07.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;7.&nbsp;Acknowledgements</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch06s04.html" title="Metaprogramming tools"><link rel="next" href="ch07s02.html" title="MSM v1"></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">Chapter&nbsp;7.&nbsp;Acknowledgements</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch07s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;7.&nbsp;Acknowledgements"><div
 class="titlepage"><div><div><h2 class="title"><a name="d0e3119"></a>Chapter&nbsp;7.&nbsp;Acknowledgements</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">MSM v2</span></dt><dt><span class="sect1"> MSM v1</span></dt></dl></div><p>I am in debt to the following people who helped MSM along the way.</p><div class="sect1" title="MSM v2"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3124"></a>MSM v2</h2></div></div></div><p>
+ <title>Chapter&nbsp;7.&nbsp;Acknowledgements</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch06s04.html" title="Metaprogramming tools"><link rel="next" href="ch07s02.html" title="MSM v1"></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">Chapter&nbsp;7.&nbsp;Acknowledgements</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch07s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;7.&nbsp;Acknowledgements"><div
 class="titlepage"><div><div><h2 class="title"><a name="d0e3168"></a>Chapter&nbsp;7.&nbsp;Acknowledgements</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">MSM v2</span></dt><dt><span class="sect1"> MSM v1</span></dt></dl></div><p>I am in debt to the following people who helped MSM along the way.</p><div class="sect1" title="MSM v2"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3173"></a>MSM v2</h2></div></div></div><p>
                     </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Thanks to Dave Abrahams for managing the review</p></li><li class="listitem"><p>Thanks to Eric Niebler for his patience correcting my grammar
                                 errors</p></li><li class="listitem"><p>Special thanks to Joel de Guzman who gave me very good ideas at
                                 the BoostCon09. These ideas were the starting point of the redesign.
@@ -9,5 +9,6 @@
                                 list.</p></li><li class="listitem"><p>Big thanks to those who took the time to write a review: Franz
                                 Alt, David Bergman, Michael Caisse, Barend Gehrels, Darryl Greene,
                                 Juraj Ivancic, Erik Nelson, Kenny Riddile.</p></li><li class="listitem"><p>Thanks to Matt Calabrese, Juraj Ivancic, Adam Merz and Joseph Wu
- for reporting bugs.</p></li></ul></div><p>
+ for reporting bugs.</p></li><li class="listitem"><p>Thanks to Thomas Mistretta for providing an addition to the
+ section "What do you actually do inside actions / guards".</p></li></ul></div><p>
                 </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch06s04.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch07s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Metaprogramming tools&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp; MSM v1</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/ch07s02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch07s02.html (original)
+++ trunk/libs/msm/doc/HTML/ch07s02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>MSM v1</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.20"><link rel="up" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Acknowledgements"><link rel="prev" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Acknowledgements"><link rel="next" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"></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"> MSM v1</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;7.&nbsp;Acknowledgements</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08.html">Next</a></td></tr></table><hr></div><div class="sect1" title="MSM v1"><div class="titlepage"><div><div><h2 class="titl
e" style="clear: both"><a name="d0e3149"></a> MSM v1</h2></div></div></div><p>
+ <title>MSM v1</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.20"><link rel="up" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Acknowledgements"><link rel="prev" href="ch07.html" title="Chapter&nbsp;7.&nbsp;Acknowledgements"><link rel="next" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"></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"> MSM v1</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;7.&nbsp;Acknowledgements</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08.html">Next</a></td></tr></table><hr></div><div class="sect1" title="MSM v1"><div class="titlepage"><div><div><h2 class="titl
e" style="clear: both"><a name="d0e3201"></a> MSM v1</h2></div></div></div><p>
                     </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The original version of this framework is based on the brilliant
                                 work of David Abrahams and Aleksey Gurtovoy who laid down the base
                                 and the principles of the framework in their excellent book, &#8220;C++

Modified: trunk/libs/msm/doc/HTML/ch08.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch08.html (original)
+++ trunk/libs/msm/doc/HTML/ch08.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,12 +1,7 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;8.&nbsp;Version history</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch07s02.html" title="MSM v1"><link rel="next" href="ch08s02.html" title="From V2.10 to V2.12"></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">Chapter&nbsp;8.&nbsp;Version history</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;8.&nbsp;Version history"><div clas
s="titlepage"><div><div><h2 class="title"><a name="d0e3165"></a>Chapter&nbsp;8.&nbsp;Version history</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">From V2.12 to V2.20</span></dt><dt><span class="sect1">From V2.10 to V2.12</span></dt><dt><span class="sect1">From V2.0 to V2.12</span></dt></dl></div><div class="sect1" title="From V2.12 to V2.20"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3168"></a>From V2.12 to V2.20</h2></div></div></div><p>
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Compile-time state machine analysis using mpl_graph:</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-compile-time-analysis">checking of region orthogonality</a></strong></span>.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-compile-time-analysis">search for unreachable states</a></strong></span>.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s02.html#explicit-entry-no-region-id">automatic region index search for pseudo entry or explicit
- entry states</a></strong></span>.</p></li></ul></div></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-boost-parameter">Boost.Parameter interface definition</a></strong></span> for
- msm::back::state_machine&lt;&gt; template arguments.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-queues">Possibility to provide a
- container</a></strong></span> for the event and deferred event queues. A
- policy implementation based on a more efficient Boost.CircularBuffer
- is provided.</p></li><li class="listitem"><p>msm::back::state_machine&lt;&gt;::is_flag_active method made
- const.</p></li><li class="listitem"><p>added possibility to <span class="command"><strong><a class="command" href="ch03s05.html#backend-enqueueing">enqueue events</a></strong></span> for delayed processing.</p></li><li class="listitem"><p>Bugfixes</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>Trac 4926</p></li><li class="listitem"><p>stack overflow using the Defer functor</p></li><li class="listitem"><p>anonymous transition of a submachine not called for
- the initial state</p></li></ul></div></li></ul></div><p>
- </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch07s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch08s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> MSM v1&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;From V2.10 to V2.12</td></tr></table></div></body></html>
\ No newline at end of file
+ <title>Chapter&nbsp;8.&nbsp;Version history</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.20"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch07s02.html" title="MSM v1"><link rel="next" href="ch08s02.html" title="From V2.12 to V2.20 (Boost 1.46)"></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">Chapter&nbsp;8.&nbsp;Version history</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;8.&nbsp;Version histo
ry"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3217"></a>Chapter&nbsp;8.&nbsp;Version history</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1">From V2.20 to V2.21 (Boost 1.47)</span></dt><dt><span class="sect1">From V2.12 to V2.20 (Boost 1.46)</span></dt><dt><span class="sect1">From V2.10 to V2.12 (Boost 1.45)</span></dt><dt><span class="sect1">From V2.0 to V2.12 (Boost 1.44)</span></dt></dl></div><div class="sect1" title="From V2.20 to V2.21 (Boost 1.47)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3220"></a>From V2.20 to V2.21 (Boost 1.47)</h2></div></div></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>added a <span class="command"><strong><a class="command" href="ch03s05.html#backend-start">stop()</a></strong></span> method in the back-end.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s04.html#eUML-phoenix">Added partial support for Boost.Phoenix functors in eUML</a></strong></span></p></li><li class="listitem"><p>Bugfixes</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>Trac 5117, 5253, 5533</p></li><li class="listitem"><p>gcc warnings about unused variables</p></li><li class="listitem"><p>better implemenation of favor_compile_time back-end
+ policy</p></li><li class="listitem"><p>bug with eUML and state construction</p></li><li class="listitem"><p>incorrect eUML event and state macros</p></li><li class="listitem"><p>incorrect event type passed to a direct entry state's
+ on_entry action</p></li></ul></div></li></ul></div><p>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch07s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch08s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> MSM v1&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;From V2.12 to V2.20 (Boost 1.46)</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/ch08s02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch08s02.html (original)
+++ trunk/libs/msm/doc/HTML/ch08s02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,9 +1,12 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>From V2.10 to V2.12</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.20"><link rel="up" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="prev" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="next" href="ch08s03.html" title="From V2.0 to V2.12"></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">From V2.10 to V2.12</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;8.&nbsp;Version history</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.10 to V2.12"><div class="titlepage"><d
iv><div><h2 class="title" style="clear: both"><a name="d0e3226"></a>From V2.10 to V2.12</h2></div></div></div><p>
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Support for <span class="command"><strong><a class="command" href="ch03s05.html#back-end-serialization">serialization</a></strong></span></p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s04.html#eUML-reuse-functor">Possibility to use
- normal functors</a></strong></span> (from functor front-end) in
- eUML.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-fsm-constructor-args">New constructors</a></strong></span> where substates / submachines can be taken as
- arguments. This allows passing arguments to the constructor of a
- submachine.</p></li><li class="listitem"><p>Bugfixes</p></li></ul></div><p>
- </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch08s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;8.&nbsp;Version history&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;From V2.0 to V2.12</td></tr></table></div></body></html>
\ No newline at end of file
+ <title>From V2.12 to V2.20 (Boost 1.46)</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.20"><link rel="up" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="prev" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="next" href="ch08s03.html" title="From V2.10 to V2.12 (Boost 1.45)"></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">From V2.12 to V2.20 (Boost 1.46)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;8.&nbsp;Version history</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V
2.12 to V2.20 (Boost 1.46)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3259"></a>From V2.12 to V2.20 (Boost 1.46)</h2></div></div></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Compile-time state machine analysis using mpl_graph:</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-compile-time-analysis">checking of region orthogonality</a></strong></span>.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-compile-time-analysis">search for unreachable states</a></strong></span>.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s02.html#explicit-entry-no-region-id">automatic region index search for pseudo entry or explicit
+ entry states</a></strong></span>.</p></li></ul></div></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-boost-parameter">Boost.Parameter interface definition</a></strong></span> for
+ msm::back::state_machine&lt;&gt; template arguments.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-queues">Possibility to provide a
+ container</a></strong></span> for the event and deferred event queues. A
+ policy implementation based on a more efficient Boost.CircularBuffer
+ is provided.</p></li><li class="listitem"><p>msm::back::state_machine&lt;&gt;::is_flag_active method made
+ const.</p></li><li class="listitem"><p>added possibility to <span class="command"><strong><a class="command" href="ch03s05.html#backend-enqueueing">enqueue events</a></strong></span> for delayed processing.</p></li><li class="listitem"><p>Bugfixes</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>Trac 4926</p></li><li class="listitem"><p>stack overflow using the Defer functor</p></li><li class="listitem"><p>anonymous transition of a submachine not called for
+ the initial state</p></li></ul></div></li></ul></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch08s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;8.&nbsp;Version history&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;From V2.10 to V2.12 (Boost 1.45)</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/ch08s03.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch08s03.html (original)
+++ trunk/libs/msm/doc/HTML/ch08s03.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,9 +1,9 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>From V2.0 to V2.12</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.20"><link rel="up" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="prev" href="ch08s02.html" title="From V2.10 to V2.12"><link rel="next" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"></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">From V2.0 to V2.12</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;8.&nbsp;Version history</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="pt02.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.0 to V2.12"><div class="titlepage"><div><div><h
2 class="title" style="clear: both"><a name="d0e3251"></a>From V2.0 to V2.12</h2></div></div></div><p>
- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>New documentation</p></li><li class="listitem"><p>Internal transitions. Either as part of the transition table or
- using a state's internal transition table</p></li><li class="listitem"><p>increased dispatch and copy speed</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s02.html#basic-row2">new row types</a></strong></span> for the
- basic front-end</p></li><li class="listitem"><p>new eUML syntax, better attribute support, macros to ease
- developer's life. Even VC8 seems to like it better.</p></li><li class="listitem"><p>New policy for reduced compile-time at the cost of dispatch
- speed</p></li><li class="listitem"><p>Support for base events</p></li><li class="listitem"><p>possibility to choose the initial event</p></li></ul></div><p>
- </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">From V2.10 to V2.12&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;II.&nbsp;Reference</td></tr></table></div></body></html>
\ No newline at end of file
+ <title>From V2.10 to V2.12 (Boost 1.45)</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.20"><link rel="up" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="prev" href="ch08s02.html" title="From V2.12 to V2.20 (Boost 1.46)"><link rel="next" href="ch08s04.html" title="From V2.0 to V2.12 (Boost 1.44)"></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">From V2.10 to V2.12 (Boost 1.45)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;8.&nbsp;Version history</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch08s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From
 V2.10 to V2.12 (Boost 1.45)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3317"></a>From V2.10 to V2.12 (Boost 1.45)</h2></div></div></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Support for <span class="command"><strong><a class="command" href="ch03s05.html#back-end-serialization">serialization</a></strong></span></p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s04.html#eUML-reuse-functor">Possibility to use
+ normal functors</a></strong></span> (from functor front-end) in
+ eUML.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.html#backend-fsm-constructor-args">New constructors</a></strong></span> where substates / submachines can be taken as
+ arguments. This allows passing arguments to the constructor of a
+ submachine.</p></li><li class="listitem"><p>Bugfixes</p></li></ul></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch08s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">From V2.12 to V2.20 (Boost 1.46)&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;From V2.0 to V2.12 (Boost 1.44)</td></tr></table></div></body></html>
\ No newline at end of file

Added: trunk/libs/msm/doc/HTML/ch08s04.html
==============================================================================
--- (empty file)
+++ trunk/libs/msm/doc/HTML/ch08s04.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -0,0 +1,9 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>From V2.0 to V2.12 (Boost 1.44)</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.20"><link rel="up" href="ch08.html" title="Chapter&nbsp;8.&nbsp;Version history"><link rel="prev" href="ch08s03.html" title="From V2.10 to V2.12 (Boost 1.45)"><link rel="next" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"></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">From V2.0 to V2.12 (Boost 1.44)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;8.&nbsp;Version history</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="pt02.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.0 to V2
.12 (Boost 1.44)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3342"></a>From V2.0 to V2.12 (Boost 1.44)</h2></div></div></div><p>
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>New documentation</p></li><li class="listitem"><p>Internal transitions. Either as part of the transition table or
+ using a state's internal transition table</p></li><li class="listitem"><p>increased dispatch and copy speed</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s02.html#basic-row2">new row types</a></strong></span> for the
+ basic front-end</p></li><li class="listitem"><p>new eUML syntax, better attribute support, macros to ease
+ developer's life. Even VC8 seems to like it better.</p></li><li class="listitem"><p>New policy for reduced compile-time at the cost of dispatch
+ speed</p></li><li class="listitem"><p>Support for base events</p></li><li class="listitem"><p>possibility to choose the initial event</p></li></ul></div><p>
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08s03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">From V2.10 to V2.12 (Boost 1.45)&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;II.&nbsp;Reference</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/ch09.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch09.html (original)
+++ trunk/libs/msm/doc/HTML/ch09.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,7 +1,7 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="next" href="ch10.html" title="Chapter&nbsp;10.&nbsp; Functional programming"></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">Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch10.html">Next</a></td></tr></table><hr></div><div cl
ass="chapter" title="Chapter&nbsp;9.&nbsp;eUML operators and basic helpers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3288"></a>Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</h2></div></div></div><p>The following table lists the supported operators: </p><p>
- </p><div class="table"><a name="d0e3295"></a><p class="title"><b>Table&nbsp;9.1.&nbsp;Operators and state machine helpers</b></p><div class="table-contents"><table summary="Operators and state machine helpers" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>eUML function / operator</th><th>Description</th><th>Functor</th></tr></thead><tbody><tr><td>&amp;&amp;</td><td>Calls lazily Action1&amp;&amp; Action2</td><td>And_</td></tr><tr><td>||</td><td>Calls lazily Action1|| Action2</td><td>Or_</td></tr><tr><td>!</td><td>Calls lazily !Action1</td><td>Not_</td></tr><tr><td>!=</td><td>Calls lazily Action1 != Action2</td><td>NotEqualTo_</td></tr><tr><td>==</td><td>Calls lazily Action1 == Action2</td><td>EqualTo_</td></tr><tr><td>&gt;</td><td>Calls lazily Action1 &gt; Action2</td><td>Greater_</td></tr><tr><td>&gt;=</td><td>Calls lazily Action1 &gt;= Action2</td><td>Greater_Equal_</td></tr><tr><td>&lt;</td><td>Calls lazily Action1 &lt; Action2</td><td>Less_</td></tr><tr><td>&lt;=</td><td>C
alls lazily Action1 &lt;= Action2</td><td>Less_Equal_</td></tr><tr><td>&amp;</td><td>Calls lazily Action1 &amp; Action2</td><td>Bitwise_And_</td></tr><tr><td>|</td><td>Calls lazily Action1 | Action2</td><td>Bitwise_Or_</td></tr><tr><td>^</td><td>Calls lazily Action1 ^ Action2</td><td>Bitwise_Xor_</td></tr><tr><td>--</td><td>Calls lazily --Action1 / Action1--</td><td>Pre_Dec_ / Post_Dec_</td></tr><tr><td>++</td><td>Calls lazily ++Action1 / Action1++</td><td>Pre_Inc_ / Post_Inc_</td></tr><tr><td>/</td><td>Calls lazily Action1 / Action2</td><td>Divides_</td></tr><tr><td>/=</td><td>Calls lazily Action1 /= Action2</td><td>Divides_Assign_</td></tr><tr><td>*</td><td>Calls lazily Action1 * Action2</td><td>Multiplies_</td></tr><tr><td>*=</td><td>Calls lazily Action1 *= Action2</td><td>Multiplies_Assign_</td></tr><tr><td>+ (binary)</td><td>Calls lazily Action1 + Action2</td><td>Plus_</td></tr><tr><td>+ (unary)</td><td>Calls lazily +Action1</td><td>Unary_Plus_</td></tr><tr><td>+=</td><td>Calls lazily Action1 += Action2
</td><td>Plus_Assign_</td></tr><tr><td>- (binary)</td><td>Calls lazily Action1 - Action2</td><td>Minus_</td></tr><tr><td>- (unary)</td><td>Calls lazily -Action1</td><td>Unary_Minus_</td></tr><tr><td>-=</td><td>Calls lazily Action1 -= Action2</td><td>Minus_Assign_</td></tr><tr><td>%</td><td>Calls lazily Action1 % Action2</td><td>Modulus_</td></tr><tr><td>%=</td><td>Calls lazily Action1 %= Action2</td><td>Modulus_Assign_</td></tr><tr><td>&gt;&gt;</td><td>Calls lazily Action1 &gt;&gt; Action2</td><td>ShiftRight_</td></tr><tr><td>&gt;&gt;=</td><td>Calls lazily Action1 &gt;&gt;= Action2</td><td>ShiftRight_Assign_</td></tr><tr><td>&lt;&lt;</td><td>Calls lazily Action1 &lt;&lt; Action2</td><td>ShiftLeft_</td></tr><tr><td>&lt;&lt;=</td><td>Calls lazily Action1 &lt;&lt;= Action2</td><td>ShiftLeft_Assign_</td></tr><tr><td>[] (works on vector, map, arrays)</td><td>Calls lazily Action1 [Action2]</td><td>Subscript_</td></tr><tr><td>if_then_else_(Condition,Action1,Action2)</td><td>Returns either the result of calling Acti
on1 or the result of
+ <title>Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="next" href="ch10.html" title="Chapter&nbsp;10.&nbsp; Functional programming"></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">Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch10.html">Next</a></td></tr></table><hr></div><div cl
ass="chapter" title="Chapter&nbsp;9.&nbsp;eUML operators and basic helpers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3379"></a>Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</h2></div></div></div><p>The following table lists the supported operators: </p><p>
+ </p><div class="table"><a name="d0e3386"></a><p class="title"><b>Table&nbsp;9.1.&nbsp;Operators and state machine helpers</b></p><div class="table-contents"><table summary="Operators and state machine helpers" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>eUML function / operator</th><th>Description</th><th>Functor</th></tr></thead><tbody><tr><td>&amp;&amp;</td><td>Calls lazily Action1&amp;&amp; Action2</td><td>And_</td></tr><tr><td>||</td><td>Calls lazily Action1|| Action2</td><td>Or_</td></tr><tr><td>!</td><td>Calls lazily !Action1</td><td>Not_</td></tr><tr><td>!=</td><td>Calls lazily Action1 != Action2</td><td>NotEqualTo_</td></tr><tr><td>==</td><td>Calls lazily Action1 == Action2</td><td>EqualTo_</td></tr><tr><td>&gt;</td><td>Calls lazily Action1 &gt; Action2</td><td>Greater_</td></tr><tr><td>&gt;=</td><td>Calls lazily Action1 &gt;= Action2</td><td>Greater_Equal_</td></tr><tr><td>&lt;</td><td>Calls lazily Action1 &lt; Action2</td><td>Less_</td></tr><tr><td>&lt;=</td><td>C
alls lazily Action1 &lt;= Action2</td><td>Less_Equal_</td></tr><tr><td>&amp;</td><td>Calls lazily Action1 &amp; Action2</td><td>Bitwise_And_</td></tr><tr><td>|</td><td>Calls lazily Action1 | Action2</td><td>Bitwise_Or_</td></tr><tr><td>^</td><td>Calls lazily Action1 ^ Action2</td><td>Bitwise_Xor_</td></tr><tr><td>--</td><td>Calls lazily --Action1 / Action1--</td><td>Pre_Dec_ / Post_Dec_</td></tr><tr><td>++</td><td>Calls lazily ++Action1 / Action1++</td><td>Pre_Inc_ / Post_Inc_</td></tr><tr><td>/</td><td>Calls lazily Action1 / Action2</td><td>Divides_</td></tr><tr><td>/=</td><td>Calls lazily Action1 /= Action2</td><td>Divides_Assign_</td></tr><tr><td>*</td><td>Calls lazily Action1 * Action2</td><td>Multiplies_</td></tr><tr><td>*=</td><td>Calls lazily Action1 *= Action2</td><td>Multiplies_Assign_</td></tr><tr><td>+ (binary)</td><td>Calls lazily Action1 + Action2</td><td>Plus_</td></tr><tr><td>+ (unary)</td><td>Calls lazily +Action1</td><td>Unary_Plus_</td></tr><tr><td>+=</td><td>Calls lazily Action1 += Action2
</td><td>Plus_Assign_</td></tr><tr><td>- (binary)</td><td>Calls lazily Action1 - Action2</td><td>Minus_</td></tr><tr><td>- (unary)</td><td>Calls lazily -Action1</td><td>Unary_Minus_</td></tr><tr><td>-=</td><td>Calls lazily Action1 -= Action2</td><td>Minus_Assign_</td></tr><tr><td>%</td><td>Calls lazily Action1 % Action2</td><td>Modulus_</td></tr><tr><td>%=</td><td>Calls lazily Action1 %= Action2</td><td>Modulus_Assign_</td></tr><tr><td>&gt;&gt;</td><td>Calls lazily Action1 &gt;&gt; Action2</td><td>ShiftRight_</td></tr><tr><td>&gt;&gt;=</td><td>Calls lazily Action1 &gt;&gt;= Action2</td><td>ShiftRight_Assign_</td></tr><tr><td>&lt;&lt;</td><td>Calls lazily Action1 &lt;&lt; Action2</td><td>ShiftLeft_</td></tr><tr><td>&lt;&lt;=</td><td>Calls lazily Action1 &lt;&lt;= Action2</td><td>ShiftLeft_Assign_</td></tr><tr><td>[] (works on vector, map, arrays)</td><td>Calls lazily Action1 [Action2]</td><td>Subscript_</td></tr><tr><td>if_then_else_(Condition,Action1,Action2)</td><td>Returns either the result of calling Acti
on1 or the result of
                                     calling Action2</td><td>If_Else_</td></tr><tr><td>if_then_(Condition,Action)</td><td>Returns the result of calling Action if Condition</td><td>If_Then_</td></tr><tr><td>while_(Condition, Body)</td><td>While Condition(), calls Body(). Returns nothing</td><td>While_Do_</td></tr><tr><td>do_while_(Condition, Body)</td><td>Calls Body() while Condition(). Returns nothing</td><td>Do_While_</td></tr><tr><td>for_(Begin,Stop,EndLoop,Body)</td><td>Calls for(Begin;Stop;EndLoop){Body;}</td><td>For_Loop_</td></tr><tr><td>process_(Event [,fsm1] [,fsm2] [,fsm3] [,fsm4])</td><td>Processes Event on the current state machine (if no fsm
                                     specified) or on up to 4 state machines returned by an
                                     appropriate functor.</td><td>Process_</td></tr><tr><td>process2_(Event, Data [,fsm1] [,fsm2] [,fsm3])</td><td>Processes Event on the current state machine (if no fsm

Modified: trunk/libs/msm/doc/HTML/ch10.html
==============================================================================
--- trunk/libs/msm/doc/HTML/ch10.html (original)
+++ trunk/libs/msm/doc/HTML/ch10.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,33 +1,33 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Chapter&nbsp;10.&nbsp; Functional programming</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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="ch09.html" title="Chapter&nbsp;9.&nbsp;eUML operators and basic helpers"><link rel="next" href="re01.html" title="Common headers"></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">Chapter&nbsp;10.&nbsp;
- Functional programming </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="re01.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;10.&nbsp; Functional programming"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3632"></a>Chapter&nbsp;10.&nbsp;
+ Functional programming </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="re01.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;10.&nbsp; Functional programming"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3723"></a>Chapter&nbsp;10.&nbsp;
                 <span class="command"><strong><a name="eUML-STL-all"></a></strong></span>Functional programming </h2></div></div></div><p>To use these functions, you need to include: </p><p><code class="code">#include &lt;msm/front/euml/stl.hpp&gt;</code></p><p>or the specified header in the following tables.</p><p>The following tables list the supported STL algorithms: </p><p>
                 <span class="command"><strong><a name="eUML-STL-querying"></a></strong></span>
- </p><div class="table"><a name="d0e3650"></a><p class="title"><b>Table&nbsp;10.1.&nbsp;STL algorithms</b></p><div class="table-contents"><table summary="STL algorithms" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL algorithms in querying.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>find_(first, last, value)</td><td>Find_</td></tr><tr><td>find_if_(first, last, value)</td><td>FindIf_</td></tr><tr><td>lower_bound_(first, last, value [,op&#7491;])</td><td>LowerBound_</td></tr><tr><td>upper_bound_(first, last, value [,op&#7491;])</td><td>UpperBound_</td></tr><tr><td>equal_range_(first, last, value [,op&#7491;])</td><td>EqualRange_</td></tr><tr><td>binary_search_(first, last, value [,op&#7491;])</td><td>BinarySearch_</td></tr><tr><td>min_element_(first, last[,op&#7491;])</td><td>MinElement_</td></tr><tr><td>max_element_(first, last[,op&#7491;])</td><td>MaxElement_</td></tr><tr><td>adjacent_find_(first, last[,op&#7491;])</td><td>AdjacentFind_</td></tr><tr><td>find_end_( first1
, last1, first2, last2 [,op &#7491;])</td><td>FindEnd_</td></tr><tr><td>find_first_of_( first1, last1, first2, last2 [,op &#7491;])</td><td>FindFirstOf_</td></tr><tr><td>equal_( first1, last1, first2 [,op &#7491;])</td><td>Equal_</td></tr><tr><td>search_( first1, last1, first2, last2 [,op &#7491;])</td><td>Search_</td></tr><tr><td>includes_( first1, last1, first2, last2 [,op &#7491;])</td><td>Includes_</td></tr><tr><td>lexicographical_compare_ ( first1, last1, first2, last2 [,op
+ </p><div class="table"><a name="d0e3741"></a><p class="title"><b>Table&nbsp;10.1.&nbsp;STL algorithms</b></p><div class="table-contents"><table summary="STL algorithms" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL algorithms in querying.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>find_(first, last, value)</td><td>Find_</td></tr><tr><td>find_if_(first, last, value)</td><td>FindIf_</td></tr><tr><td>lower_bound_(first, last, value [,op&#7491;])</td><td>LowerBound_</td></tr><tr><td>upper_bound_(first, last, value [,op&#7491;])</td><td>UpperBound_</td></tr><tr><td>equal_range_(first, last, value [,op&#7491;])</td><td>EqualRange_</td></tr><tr><td>binary_search_(first, last, value [,op&#7491;])</td><td>BinarySearch_</td></tr><tr><td>min_element_(first, last[,op&#7491;])</td><td>MinElement_</td></tr><tr><td>max_element_(first, last[,op&#7491;])</td><td>MaxElement_</td></tr><tr><td>adjacent_find_(first, last[,op&#7491;])</td><td>AdjacentFind_</td></tr><tr><td>find_end_( first1
, last1, first2, last2 [,op &#7491;])</td><td>FindEnd_</td></tr><tr><td>find_first_of_( first1, last1, first2, last2 [,op &#7491;])</td><td>FindFirstOf_</td></tr><tr><td>equal_( first1, last1, first2 [,op &#7491;])</td><td>Equal_</td></tr><tr><td>search_( first1, last1, first2, last2 [,op &#7491;])</td><td>Search_</td></tr><tr><td>includes_( first1, last1, first2, last2 [,op &#7491;])</td><td>Includes_</td></tr><tr><td>lexicographical_compare_ ( first1, last1, first2, last2 [,op
                                     &#7491;]) </td><td>LexicographicalCompare_</td></tr><tr><td>count_(first, last, value [,size])</td><td>Count_</td></tr><tr><td>count_if_(first, last, op &#7491; [,size])</td><td>CountIf_</td></tr><tr><td>distance_(first, last)</td><td>Distance_</td></tr><tr><td>mismatch _( first1, last1, first2 [,op &#7491;])</td><td>Mismatch_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
                 <span class="command"><strong><a name="eUML-STL-iteration"></a></strong></span>
- </p><div class="table"><a name="d0e3763"></a><p class="title"><b>Table&nbsp;10.2.&nbsp;STL algorithms</b></p><div class="table-contents"><table summary="STL algorithms" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL algorithms in iteration.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>for_each_(first,last, unary op&#7491;)</td><td>ForEach_</td></tr><tr><td>accumulate_first, last, init [,op&#7491;])</td><td>Accumulate_</td></tr></tbody></table></div></div><p><br class="table-break">
+ </p><div class="table"><a name="d0e3854"></a><p class="title"><b>Table&nbsp;10.2.&nbsp;STL algorithms</b></p><div class="table-contents"><table summary="STL algorithms" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL algorithms in iteration.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>for_each_(first,last, unary op&#7491;)</td><td>ForEach_</td></tr><tr><td>accumulate_first, last, init [,op&#7491;])</td><td>Accumulate_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
                 <span class="command"><strong><a name="eUML-STL-transformation"></a></strong></span>
- </p><div class="table"><a name="d0e3791"></a><p class="title"><b>Table&nbsp;10.3.&nbsp;STL algorithms</b></p><div class="table-contents"><table summary="STL algorithms" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL algorithms in transformation.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>copy_(first, last, result)</td><td>Copy_</td></tr><tr><td>copy_backward_(first, last, result)</td><td>CopyBackward_</td></tr><tr><td>reverse_(first, last)</td><td>Reverse_</td></tr><tr><td>reverse_copy_(first, last , result)</td><td>ReverseCopy_</td></tr><tr><td>remove_(first, last, value)</td><td>Remove_</td></tr><tr><td>remove_if_(first, last , op&#7491;)</td><td>RemoveIf_</td></tr><tr><td>remove_copy_(first, last , output, value)</td><td>RemoveCopy_</td></tr><tr><td>remove_copy_if_(first, last, output, op&#7491;)</td><td>RemoveCopyIf_</td></tr><tr><td>fill_(first, last, value)</td><td>Fill_</td></tr><tr><td>fill_n_(first, size, value)&#7495;</td><td>FillN_</td></tr><tr><td>generate_(
first, last, generator&#7491;)</td><td>Generate_</td></tr><tr><td>generate_(first, size, generator&#7491;)&#7495;</td><td>GenerateN_</td></tr><tr><td>unique_(first, last [,op&#7491;])</td><td>Unique_</td></tr><tr><td>unique_copy_(first, last, output [,op&#7491;])</td><td>UniqueCopy_</td></tr><tr><td>random_shuffle_(first, last [,op&#7491;])</td><td>RandomShuffle_</td></tr><tr><td>rotate_copy_(first, middle, last, output)</td><td>RotateCopy_</td></tr><tr><td>partition_ (first, last [,op&#7491;])</td><td>Partition_</td></tr><tr><td>stable_partition_ (first, last [,op&#7491;])</td><td>StablePartition_</td></tr><tr><td>stable_sort_(first, last [,op&#7491;])</td><td>StableSort_</td></tr><tr><td>sort_(first, last [,op&#7491;])</td><td>Sort_</td></tr><tr><td>partial_sort_(first, middle, last [,op&#7491;])</td><td>PartialSort_</td></tr><tr><td>partial_sort_copy_ (first, last, res_first, res_last [,op&#7491;]) </td><td>PartialSortCopy_</td></tr><tr><td>nth_element_(first, nth, last [,op&#7491;])</td><td>NthElement_</
td></tr><tr><td>merge_( first1, last1, first2, last2, output [,op &#7491;])</td><td>Merge_</td></tr><tr><td>inplace_merge_(first, middle, last [,op&#7491;])</td><td>InplaceMerge_</td></tr><tr><td>set_union_(first1, last1, first2, last2, output [,op
+ </p><div class="table"><a name="d0e3882"></a><p class="title"><b>Table&nbsp;10.3.&nbsp;STL algorithms</b></p><div class="table-contents"><table summary="STL algorithms" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL algorithms in transformation.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>copy_(first, last, result)</td><td>Copy_</td></tr><tr><td>copy_backward_(first, last, result)</td><td>CopyBackward_</td></tr><tr><td>reverse_(first, last)</td><td>Reverse_</td></tr><tr><td>reverse_copy_(first, last , result)</td><td>ReverseCopy_</td></tr><tr><td>remove_(first, last, value)</td><td>Remove_</td></tr><tr><td>remove_if_(first, last , op&#7491;)</td><td>RemoveIf_</td></tr><tr><td>remove_copy_(first, last , output, value)</td><td>RemoveCopy_</td></tr><tr><td>remove_copy_if_(first, last, output, op&#7491;)</td><td>RemoveCopyIf_</td></tr><tr><td>fill_(first, last, value)</td><td>Fill_</td></tr><tr><td>fill_n_(first, size, value)&#7495;</td><td>FillN_</td></tr><tr><td>generate_(
first, last, generator&#7491;)</td><td>Generate_</td></tr><tr><td>generate_(first, size, generator&#7491;)&#7495;</td><td>GenerateN_</td></tr><tr><td>unique_(first, last [,op&#7491;])</td><td>Unique_</td></tr><tr><td>unique_copy_(first, last, output [,op&#7491;])</td><td>UniqueCopy_</td></tr><tr><td>random_shuffle_(first, last [,op&#7491;])</td><td>RandomShuffle_</td></tr><tr><td>rotate_copy_(first, middle, last, output)</td><td>RotateCopy_</td></tr><tr><td>partition_ (first, last [,op&#7491;])</td><td>Partition_</td></tr><tr><td>stable_partition_ (first, last [,op&#7491;])</td><td>StablePartition_</td></tr><tr><td>stable_sort_(first, last [,op&#7491;])</td><td>StableSort_</td></tr><tr><td>sort_(first, last [,op&#7491;])</td><td>Sort_</td></tr><tr><td>partial_sort_(first, middle, last [,op&#7491;])</td><td>PartialSort_</td></tr><tr><td>partial_sort_copy_ (first, last, res_first, res_last [,op&#7491;]) </td><td>PartialSortCopy_</td></tr><tr><td>nth_element_(first, nth, last [,op&#7491;])</td><td>NthElement_</
td></tr><tr><td>merge_( first1, last1, first2, last2, output [,op &#7491;])</td><td>Merge_</td></tr><tr><td>inplace_merge_(first, middle, last [,op&#7491;])</td><td>InplaceMerge_</td></tr><tr><td>set_union_(first1, last1, first2, last2, output [,op
                                     &#7491;])</td><td>SetUnion_</td></tr><tr><td>push_heap_(first, last [,op &#7491;])</td><td>PushHeap_</td></tr><tr><td>pop_heap_(first, last [,op &#7491;])</td><td>PopHeap_</td></tr><tr><td>make_heap_(first, last [,op &#7491;])</td><td>MakeHeap_</td></tr><tr><td>sort_heap_(first, last [,op &#7491;])</td><td>SortHeap_</td></tr><tr><td>next_permutation_(first, last [,op &#7491;])</td><td>NextPermutation_</td></tr><tr><td>prev_permutation_(first, last [,op &#7491;])</td><td>PrevPermutation_</td></tr><tr><td>inner_product_(first1, last1, first2, init [,op1&#7491;] [,op2&#7491;]) </td><td>InnerProduct_</td></tr><tr><td>partial_sum_(first, last, output [,op&#7491;])</td><td>PartialSum_</td></tr><tr><td>adjacent_difference_(first, last, output [,op&#7491;])</td><td>AdjacentDifference_</td></tr><tr><td>replace_(first, last, old_value, new_value)</td><td>Replace_</td></tr><tr><td>replace_if_(first, last, op&#7491;, new_value)</td><td>ReplaceIf_</td></tr><tr><td>replace_copy_(first,
 last, result, old_value,
                                     new_value)</td><td>ReplaceCopy_</td></tr><tr><td>replace_copy_if_(first, last, result, op&#7491;, new_value)</td><td>ReplaceCopyIf_</td></tr><tr><td>rotate_(first, middle, last)&#7495;</td><td>Rotate_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
                 <span class="command"><strong><a name="eUML-STL-container"></a></strong></span>
- </p><div class="table"><a name="d0e4009"></a><p class="title"><b>Table&nbsp;10.4.&nbsp;STL container methods</b></p><div class="table-contents"><table summary="STL container methods" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL container methods(common) in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>container::reference front_(container)</td><td>Front_</td></tr><tr><td>container::reference back_(container)</td><td>Back_</td></tr><tr><td>container::iterator begin_(container)</td><td>Begin_</td></tr><tr><td>container::iterator end_(container)</td><td>End_</td></tr><tr><td>container::reverse_iterator rbegin_(container)</td><td>RBegin_</td></tr><tr><td>container::reverse_iterator rend_(container)</td><td>REnd_</td></tr><tr><td>void push_back_(container, value)</td><td>Push_Back_</td></tr><tr><td>void pop_back_(container, value)</td><td>Pop_Back_</td></tr><tr><td>void push_front_(container, value)</td><td>Push_Front_</td></tr><tr><td>void pop_front_(container, va
lue)</td><td>Pop_Front_</td></tr><tr><td>void clear_(container)</td><td>Clear_</td></tr><tr><td>size_type capacity_(container)</td><td>Capacity_</td></tr><tr><td>size_type size_(container)</td><td>Size_</td></tr><tr><td>size_type max_size_(container)</td><td>Max_Size_</td></tr><tr><td>void reserve_(container, value)</td><td>Reserve _</td></tr><tr><td>void resize_(container, value)</td><td>Resize _</td></tr><tr><td>iterator insert_(container, pos, value)</td><td>Insert_</td></tr><tr><td>void insert_( container , pos, first, last)</td><td>Insert_</td></tr><tr><td>void insert_( container , pos, number, value)</td><td>Insert_</td></tr><tr><td>void swap_( container , other_container)</td><td>Swap_</td></tr><tr><td>void erase_( container , pos)</td><td>Erase_</td></tr><tr><td>void erase_( container , first, last) </td><td>Erase_</td></tr><tr><td>bool empty_( container)</td><td>Empty_</td></tr></tbody></table></div></div><p><br class="table-break">
+ </p><div class="table"><a name="d0e4100"></a><p class="title"><b>Table&nbsp;10.4.&nbsp;STL container methods</b></p><div class="table-contents"><table summary="STL container methods" border="1"><colgroup><col><col></colgroup><thead><tr><th>STL container methods(common) in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>container::reference front_(container)</td><td>Front_</td></tr><tr><td>container::reference back_(container)</td><td>Back_</td></tr><tr><td>container::iterator begin_(container)</td><td>Begin_</td></tr><tr><td>container::iterator end_(container)</td><td>End_</td></tr><tr><td>container::reverse_iterator rbegin_(container)</td><td>RBegin_</td></tr><tr><td>container::reverse_iterator rend_(container)</td><td>REnd_</td></tr><tr><td>void push_back_(container, value)</td><td>Push_Back_</td></tr><tr><td>void pop_back_(container, value)</td><td>Pop_Back_</td></tr><tr><td>void push_front_(container, value)</td><td>Push_Front_</td></tr><tr><td>void pop_front_(container, va
lue)</td><td>Pop_Front_</td></tr><tr><td>void clear_(container)</td><td>Clear_</td></tr><tr><td>size_type capacity_(container)</td><td>Capacity_</td></tr><tr><td>size_type size_(container)</td><td>Size_</td></tr><tr><td>size_type max_size_(container)</td><td>Max_Size_</td></tr><tr><td>void reserve_(container, value)</td><td>Reserve _</td></tr><tr><td>void resize_(container, value)</td><td>Resize _</td></tr><tr><td>iterator insert_(container, pos, value)</td><td>Insert_</td></tr><tr><td>void insert_( container , pos, first, last)</td><td>Insert_</td></tr><tr><td>void insert_( container , pos, number, value)</td><td>Insert_</td></tr><tr><td>void swap_( container , other_container)</td><td>Swap_</td></tr><tr><td>void erase_( container , pos)</td><td>Erase_</td></tr><tr><td>void erase_( container , first, last) </td><td>Erase_</td></tr><tr><td>bool empty_( container)</td><td>Empty_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
- </p><div class="table"><a name="d0e4140"></a><p class="title"><b>Table&nbsp;10.5.&nbsp;STL list methods</b></p><div class="table-contents"><table summary="STL list methods" border="1"><colgroup><col><col></colgroup><thead><tr><th>std::list methods in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>void list_remove_(container, value)</td><td>ListRemove_</td></tr><tr><td>void list_remove_if_(container, op&#7491;)</td><td>ListRemove_If_</td></tr><tr><td>void list_merge_(container, other_list)</td><td>ListMerge_</td></tr><tr><td>void list_merge_(container, other_list, op&#7491;)</td><td>ListMerge_</td></tr><tr><td>void splice_(container, iterator, other_list)</td><td>Splice_</td></tr><tr><td>void splice_(container, iterator, other_list,
+ </p><div class="table"><a name="d0e4231"></a><p class="title"><b>Table&nbsp;10.5.&nbsp;STL list methods</b></p><div class="table-contents"><table summary="STL list methods" border="1"><colgroup><col><col></colgroup><thead><tr><th>std::list methods in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>void list_remove_(container, value)</td><td>ListRemove_</td></tr><tr><td>void list_remove_if_(container, op&#7491;)</td><td>ListRemove_If_</td></tr><tr><td>void list_merge_(container, other_list)</td><td>ListMerge_</td></tr><tr><td>void list_merge_(container, other_list, op&#7491;)</td><td>ListMerge_</td></tr><tr><td>void splice_(container, iterator, other_list)</td><td>Splice_</td></tr><tr><td>void splice_(container, iterator, other_list,
                                     iterator)</td><td>Splice_</td></tr><tr><td>void splice_(container, iterator, other_list, first,
                                     last)</td><td>Splice_</td></tr><tr><td>void list_reverse_(container)</td><td>ListReverse_</td></tr><tr><td>void list_unique_(container)</td><td>ListUnique_</td></tr><tr><td>void list_unique_(container, op&#7491;)</td><td>ListUnique_</td></tr><tr><td>void list_sort_(container)</td><td>ListSort_</td></tr><tr><td>void list_sort_(container, op&#7491;)</td><td>ListSort_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
- </p><div class="table"><a name="d0e4216"></a><p class="title"><b>Table&nbsp;10.6.&nbsp;STL associative container methods </b></p><div class="table-contents"><table summary="STL associative container methods " border="1"><colgroup><col><col></colgroup><thead><tr><th>Associative container methods in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>iterator insert_(container, pos, value)</td><td>Insert_</td></tr><tr><td>void insert_( container , first, last)</td><td>Insert_</td></tr><tr><td>pair&lt;iterator, bool&gt; insert_( container , value)</td><td>Insert_</td></tr><tr><td>void associative_erase_( container , pos)</td><td>Associative_Erase_</td></tr><tr><td>void associative_erase_( container , first, last)</td><td>Associative_Erase_</td></tr><tr><td>size_type associative_erase_( container , key)</td><td>Associative_Erase_</td></tr><tr><td>iterator associative_find_( container , key)</td><td>Associative_Find_</td></tr><tr><td>size_type associative_count_( container , key)</td><t
d>AssociativeCount_</td></tr><tr><td>iterator associative_lower_bound_( container , key)</td><td>Associative_Lower_Bound_</td></tr><tr><td>iterator associative_upper_bound_( container , key)</td><td>Associative_Upper_Bound_</td></tr><tr><td>pair&lt;iterator, iterator&gt; associative_equal_range_(
+ </p><div class="table"><a name="d0e4307"></a><p class="title"><b>Table&nbsp;10.6.&nbsp;STL associative container methods </b></p><div class="table-contents"><table summary="STL associative container methods " border="1"><colgroup><col><col></colgroup><thead><tr><th>Associative container methods in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>iterator insert_(container, pos, value)</td><td>Insert_</td></tr><tr><td>void insert_( container , first, last)</td><td>Insert_</td></tr><tr><td>pair&lt;iterator, bool&gt; insert_( container , value)</td><td>Insert_</td></tr><tr><td>void associative_erase_( container , pos)</td><td>Associative_Erase_</td></tr><tr><td>void associative_erase_( container , first, last)</td><td>Associative_Erase_</td></tr><tr><td>size_type associative_erase_( container , key)</td><td>Associative_Erase_</td></tr><tr><td>iterator associative_find_( container , key)</td><td>Associative_Find_</td></tr><tr><td>size_type associative_count_( container , key)</td><t
d>AssociativeCount_</td></tr><tr><td>iterator associative_lower_bound_( container , key)</td><td>Associative_Lower_Bound_</td></tr><tr><td>iterator associative_upper_bound_( container , key)</td><td>Associative_Upper_Bound_</td></tr><tr><td>pair&lt;iterator, iterator&gt; associative_equal_range_(
                                     container , key)</td><td>Associative_Equal_Range_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
- </p><div class="table"><a name="d0e4287"></a><p class="title"><b>Table&nbsp;10.7.&nbsp;STL pair</b></p><div class="table-contents"><table summary="STL pair" border="1"><colgroup><col><col></colgroup><thead><tr><th>std::pair in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>first_type first_(pair&lt;T1, T2&gt;)</td><td>First_</td></tr><tr><td>second_type second_(pair&lt;T1, T2&gt;)</td><td>Second_</td></tr></tbody></table></div></div><p><br class="table-break">
+ </p><div class="table"><a name="d0e4378"></a><p class="title"><b>Table&nbsp;10.7.&nbsp;STL pair</b></p><div class="table-contents"><table summary="STL pair" border="1"><colgroup><col><col></colgroup><thead><tr><th>std::pair in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>first_type first_(pair&lt;T1, T2&gt;)</td><td>First_</td></tr><tr><td>second_type second_(pair&lt;T1, T2&gt;)</td><td>Second_</td></tr></tbody></table></div></div><p><br class="table-break">
             </p><p>
- </p><div class="table"><a name="d0e4313"></a><p class="title"><b>Table&nbsp;10.8.&nbsp;STL string</b></p><div class="table-contents"><table summary="STL string" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>STL string method</th><th>std::string method in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>substr (size_type pos, size_type size)</td><td>string substr_(container, pos, length)</td><td>Substr_</td></tr><tr><td>int compare(string)</td><td>int string_compare_(container, another_string)</td><td>StringCompare_</td></tr><tr><td>int compare(char*)</td><td>int string_compare_(container, another_string)</td><td>StringCompare_</td></tr><tr><td>int compare(size_type pos, size_type size, string)</td><td>int string_compare_(container, pos, size,
+ </p><div class="table"><a name="d0e4404"></a><p class="title"><b>Table&nbsp;10.8.&nbsp;STL string</b></p><div class="table-contents"><table summary="STL string" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>STL string method</th><th>std::string method in container.hpp</th><th>Functor</th></tr></thead><tbody><tr><td>substr (size_type pos, size_type size)</td><td>string substr_(container, pos, length)</td><td>Substr_</td></tr><tr><td>int compare(string)</td><td>int string_compare_(container, another_string)</td><td>StringCompare_</td></tr><tr><td>int compare(char*)</td><td>int string_compare_(container, another_string)</td><td>StringCompare_</td></tr><tr><td>int compare(size_type pos, size_type size, string)</td><td>int string_compare_(container, pos, size,
                                     another_string)</td><td>StringCompare_</td></tr><tr><td>int compare (size_type pos, size_type size, string, size_type
                                     length)</td><td>int string_compare_(container, pos, size, another_string,
                                     length)</td><td>StringCompare_</td></tr><tr><td>string&amp; append(const string&amp;)</td><td>string&amp; append_(container, another_string)</td><td>Append_</td></tr><tr><td>string&amp; append (charT*)</td><td>string&amp; append_(container, another_string)</td><td>Append_</td></tr><tr><td>string&amp; append (string , size_type pos, size_type

Modified: trunk/libs/msm/doc/HTML/examples/CompositeTutorial.cpp
==============================================================================
--- trunk/libs/msm/doc/HTML/examples/CompositeTutorial.cpp (original)
+++ trunk/libs/msm/doc/HTML/examples/CompositeTutorial.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -41,6 +41,11 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&) {std::cout << "entering: Player" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Player" << std::endl;}
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -223,6 +228,12 @@
         p.process_event(stop()); pstate(p);
         // event leading to the same state
         p.process_event(stop()); pstate(p);
+ // stop the fsm (call on_exit's, including the submachines)
+ p.process_event(play());
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
+ std::cout << "restart fsm" << std::endl;
+ p.start();
     }
 }
 

Added: trunk/libs/msm/doc/HTML/examples/ExampleCircularBuffer.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/msm/doc/HTML/examples/ExampleCircularBuffer.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -0,0 +1,299 @@
+#include <vector>
+#include <iostream>
+// back-end
+#include <boost/msm/back/state_machine.hpp>
+// header for support of circular_buffer
+#include <boost/msm/back/queue_container_circular.hpp>
+//front-end
+#include <boost/msm/front/state_machine_def.hpp>
+// functors
+#include <boost/msm/front/functor_row.hpp>
+#include <boost/msm/front/euml/common.hpp>
+// for And_ operator
+#include <boost/msm/front/euml/operator.hpp>
+
+using namespace std;
+namespace msm = boost::msm;
+namespace mpl = boost::mpl;
+using namespace msm::front;
+// for And_ operator
+using namespace msm::front::euml;
+
+namespace // Concrete FSM implementation
+{
+ // events
+ struct play {};
+ struct end_pause {};
+ struct stop {};
+ struct pause {};
+ struct open_close {};
+
+ // A "complicated" event type that carries some data.
+ enum DiskTypeEnum
+ {
+ DISK_CD=0,
+ DISK_DVD=1
+ };
+ struct cd_detected
+ {
+ cd_detected(std::string name, DiskTypeEnum diskType)
+ : name(name),
+ disc_type(diskType)
+ {}
+
+ std::string name;
+ DiskTypeEnum disc_type;
+ };
+
+ // front-end: define the FSM structure
+ struct player_ : public msm::front::state_machine_def<player_>
+ {
+ // The list of FSM states
+ struct Empty : public msm::front::state<>
+ {
+ // every (optional) entry/exit methods get the event passed.
+ template <class Event,class FSM>
+ void on_entry(Event const&,FSM& ) {std::cout << "entering: Empty" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Empty" << std::endl;}
+ };
+ struct Open : public msm::front::state<>
+ {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&) {std::cout << "entering: Open" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Open" << std::endl;}
+ };
+
+ struct Stopped : public msm::front::state<>
+ {
+ // when stopped, the CD is loaded
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&) {std::cout << "entering: Stopped" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Stopped" << std::endl;}
+ };
+
+ struct Playing : public msm::front::state<>
+ {
+ template <class Event,class FSM>
+ void on_entry(Event const&,FSM& ) {std::cout << "entering: Playing" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Playing" << std::endl;}
+ };
+
+ // state not defining any entry or exit
+ struct Paused : public msm::front::state<>
+ {
+ };
+
+ // the initial state of the player SM. Must be defined
+ typedef Empty initial_state;
+
+ // transition actions
+ // as the functors are generic on events, fsm and source/target state,
+ // you can reuse them in another machine if you wish
+ struct TestFct
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const&, FSM&,SourceState& ,TargetState& )
+ {
+ cout << "transition with event:" << typeid(EVT).name() << endl;
+ }
+ };
+ struct start_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::start_playback" << endl;
+ }
+ };
+ struct open_drawer
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::open_drawer" << endl;
+ }
+ };
+ struct close_drawer
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::close_drawer" << endl;
+ }
+ };
+ struct store_cd_info
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const&,FSM& fsm ,SourceState& ,TargetState& )
+ {
+ cout << "player::store_cd_info" << endl;
+ fsm.process_event(play());
+ }
+ };
+ struct stop_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::stop_playback" << endl;
+ }
+ };
+ struct pause_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::pause_playback" << endl;
+ }
+ };
+ struct resume_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::resume_playback" << endl;
+ }
+ };
+ struct stop_and_open
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::stop_and_open" << endl;
+ }
+ };
+ struct stopped_again
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::stopped_again" << endl;
+ }
+ };
+ // guard conditions
+ struct DummyGuard
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ bool operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)
+ {
+ return true;
+ }
+ };
+ struct good_disk_format
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ bool operator()(EVT const& evt ,FSM&,SourceState& ,TargetState& )
+ {
+ // to test a guard condition, let's say we understand only CDs, not DVD
+ if (evt.disc_type != DISK_CD)
+ {
+ std::cout << "wrong disk, sorry" << std::endl;
+ return false;
+ }
+ return true;
+ }
+ };
+ struct always_true
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ bool operator()(EVT const& evt ,FSM&,SourceState& ,TargetState& )
+ {
+ return true;
+ }
+ };
+ // we want to define one row with the classic look.
+ bool auto_start(cd_detected const& evt)
+ {
+ return false;
+ }
+
+ typedef player_ p; // makes transition table cleaner
+
+ // Transition table for player
+ struct transition_table : mpl::vector<
+ // Start Event Next Action Guard
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Stopped , play , Playing , ActionSequence_
+ <mpl::vector<
+ TestFct,start_playback> >
+ , DummyGuard >,
+ Row < Stopped , open_close , Open , open_drawer , none >,
+ Row < Stopped , stop , Stopped , none , none >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Open , open_close , Empty , close_drawer , none >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Empty , open_close , Open , open_drawer , none >,
+ Row < Empty , cd_detected , Stopped , store_cd_info , And_<good_disk_format,
+ always_true> >,
+ // we here also mix with some "classical row"
+ g_row < Empty , cd_detected , Playing , &p::auto_start >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Playing , stop , Stopped , stop_playback , none >,
+ Row < Playing , pause , Paused , pause_playback , none >,
+ Row < Playing , open_close , Open , stop_and_open , none >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Paused , end_pause , Playing , resume_playback , none >,
+ Row < Paused , stop , Stopped , stop_playback , none >,
+ Row < Paused , open_close , Open , stop_and_open , none >
+ // +---------+-------------+---------+---------------------------+----------------------+
+ > {};
+ // Replaces the default no-transition response.
+ template <class FSM,class Event>
+ void no_transition(Event const& e, FSM&,int state)
+ {
+ std::cout << "no transition from state " << state
+ << " on event " << typeid(e).name() << std::endl;
+ }
+ };
+ // Pick a back-end
+ typedef msm::back::state_machine<player_, msm::back::queue_container_circular> player;
+
+ //
+ // Testing utilities.
+ //
+ static char const* const state_names[] = { "Stopped", "Open", "Empty", "Playing", "Paused" };
+ void pstate(player const& p)
+ {
+ std::cout << " -> " << state_names[p.current_state()[0]] << std::endl;
+ }
+
+ void test()
+ {
+ player p;
+ // we get the message queue and limit it to capacity 1
+ // get_message_queue returns the queue container (in this case circular_buffer)
+ p.get_message_queue().set_capacity(1);
+ // needed to start the highest-level SM. This will call on_entry and mark the start of the SM
+ p.start();
+ // go to Open, call on_exit on Empty, then action, then on_entry on Open
+ p.process_event(open_close()); pstate(p);
+ p.process_event(open_close()); pstate(p);
+ // will be rejected, wrong disk type
+ p.process_event(
+ cd_detected("louie, louie",DISK_DVD)); pstate(p);
+ p.process_event(
+ cd_detected("louie, louie",DISK_CD)); pstate(p);
+ // no need to call play() as the previous event does it in its action method
+ //p.process_event(play());
+
+ // at this point, Play is active
+ p.process_event(pause()); pstate(p);
+ // go back to Playing
+ p.process_event(end_pause()); pstate(p);
+ p.process_event(pause()); pstate(p);
+ p.process_event(stop()); pstate(p);
+ // event leading to the same state
+ // no action method called as it is not present in the transition table
+ p.process_event(stop()); pstate(p);
+ }
+}
+
+int main()
+{
+ test();
+ return 0;
+}

Modified: trunk/libs/msm/doc/HTML/examples/Orthogonal-deferred.cpp
==============================================================================
--- trunk/libs/msm/doc/HTML/examples/Orthogonal-deferred.cpp (original)
+++ trunk/libs/msm/doc/HTML/examples/Orthogonal-deferred.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -48,6 +48,16 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -291,6 +301,8 @@
         p.process_event(end_error());pstate(p);
         std::cout << "Trying to generate another event" << std::endl; // will work only if ErrorMode is interrupt state
         p.process_event(play());pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
 
     }
 }

Modified: trunk/libs/msm/doc/HTML/examples/SimpleTutorial.cpp
==============================================================================
--- trunk/libs/msm/doc/HTML/examples/SimpleTutorial.cpp (original)
+++ trunk/libs/msm/doc/HTML/examples/SimpleTutorial.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -27,7 +27,7 @@
     struct open_close {};
 
     // A "complicated" event type that carries some data.
- enum DiskTypeEnum
+ enum DiskTypeEnum
     {
         DISK_CD=0,
         DISK_DVD=1
@@ -46,6 +46,17 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -56,7 +67,7 @@
             void on_exit(Event const&,FSM& ) {std::cout << "leaving: Empty" << std::endl;}
         };
         struct Open : public msm::front::state<>
- {
+ {
             template <class Event,class FSM>
             void on_entry(Event const& ,FSM&) {std::cout << "entering: Open" << std::endl;}
             template <class Event,class FSM>
@@ -65,7 +76,7 @@
 
         // sm_ptr still supported but deprecated as functors are a much better way to do the same thing
         struct Stopped : public msm::front::state<msm::front::default_base_state,msm::front::sm_ptr>
- {
+ {
             template <class Event,class FSM>
             void on_entry(Event const& ,FSM&) {std::cout << "entering: Stopped" << std::endl;}
             template <class Event,class FSM>
@@ -102,7 +113,7 @@
         void pause_playback(pause const&) { std::cout << "player::pause_playback\n"; }
         void resume_playback(end_pause const&) { std::cout << "player::resume_playback\n"; }
         void stop_and_open(open_close const&) { std::cout << "player::stop_and_open\n"; }
- void stopped_again(stop const&){std::cout << "player::stopped_again\n";}
+ void stopped_again(stop const&) {std::cout << "player::stopped_again\n";}
         // guard conditions
         bool good_disk_format(cd_detected const& evt)
         {
@@ -125,7 +136,7 @@
 
         // Transition table for player
         struct transition_table : mpl::vector<
- // Start Event Next Action Guard
+ // Start Event Next Action Guard
             // +---------+-------------+---------+---------------------+----------------------+
           a_row < Stopped , play , Playing , &p::start_playback >,
           a_row < Stopped , open_close , Open , &p::open_drawer >,
@@ -168,7 +179,7 @@
 
     void test()
     {
- player p;
+ player p;
         // needed to start the highest-level SM. This will call on_entry and mark the start of the SM
         p.start();
         // go to Open, call on_exit on Empty, then action, then on_entry on Open
@@ -179,7 +190,7 @@
             cd_detected("louie, louie",DISK_DVD)); pstate(p);
         p.process_event(
             cd_detected("louie, louie",DISK_CD)); pstate(p);
- p.process_event(play());
+ p.process_event(play());
 
         // at this point, Play is active
         p.process_event(pause()); pstate(p);
@@ -190,6 +201,8 @@
         // event leading to the same state
         // no action method called as it is not present in the transition table
         p.process_event(stop()); pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
     }
 }
 

Modified: trunk/libs/msm/doc/HTML/examples/SimpleTutorial2.cpp
==============================================================================
--- trunk/libs/msm/doc/HTML/examples/SimpleTutorial2.cpp (original)
+++ trunk/libs/msm/doc/HTML/examples/SimpleTutorial2.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -48,6 +48,17 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -203,6 +214,9 @@
         // event leading to the same state
         // no action method called as it is not present in the transition table
         p.process_event(stop()); pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
+
     }
 }
 

Modified: trunk/libs/msm/doc/HTML/examples/SimpleTutorialEuml.cpp
==============================================================================
--- trunk/libs/msm/doc/HTML/examples/SimpleTutorialEuml.cpp (original)
+++ trunk/libs/msm/doc/HTML/examples/SimpleTutorialEuml.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -88,9 +88,18 @@
             return true;
         }
     };
+ // it is also possible to use a plain functor, with default-constructor in the transition table
+ struct start_play
+ {
+ template <class FSM,class EVT,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM&,SourceState& ,TargetState& )
+ {
+ cout << "player::start_play" << endl;
+ }
+ };
     // replaces the old transition table
     BOOST_MSM_EUML_TRANSITION_TABLE((
- Playing == Stopped + play / start_playback ,
+ Playing == Stopped + play / start_play() ,
           Playing == Paused + end_pause / resume_playback,
           // +------------------------------------------------------------------------------+
           Empty == Open + open_close / (close_drawer,activate_empty_(target_)),

Modified: trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors.cpp
==============================================================================
--- trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors.cpp (original)
+++ trunk/libs/msm/doc/HTML/examples/SimpleWithFunctors.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -56,6 +56,17 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -294,6 +305,9 @@
         // event leading to the same state
         // no action method called as it is not present in the transition table
         p.process_event(stop()); pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
+
     }
 }
 

Modified: trunk/libs/msm/doc/HTML/index.html
==============================================================================
--- trunk/libs/msm/doc/HTML/index.html (original)
+++ trunk/libs/msm/doc/HTML/index.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -6,12 +6,13 @@
             </p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface">Preface</span></dt><dt><span class="part">I. User' guide</span></dt><dd><dl><dt><span class="chapter">1. Founding idea</span></dt><dt><span class="chapter">2. UML Short Guide</span></dt><dd><dl><dt><span class="sect1">What are state machines?</span></dt><dt><span class="sect1">Concepts</span></dt><dd><dl><dt><span class="sect2">State machine, state, transition, event </span></dt><dt><span class="sect2">Submachines, orthogonal regions, pseudostates </span></dt><dt><span class="sect2"><a href="ch02s02.html#d0e284">
                         History </a></span></dt><dt><span class="sect2"><a href="ch02s02.html#d0e298">Completion transitions / anonymous
                         transitions</a></span></dt><dt><span class="sect2"> Internal transitions </span></dt><dt><span class="sect2"><a href="ch02s02.html#d0e316">
- Conflicting transitions </a></span></dt></dl></dd><dt><span class="sect1">State machine glossary</span></dt></dl></dd><dt><span class="chapter">3. Tutorial</span></dt><dd><dl><dt><span class="sect1">Design</span></dt><dt><span class="sect1">Basic front-end</span></dt><dd><dl><dt><span class="sect2">A simple example</span></dt><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2
">Orthogonal regions, terminate state, event deferring</span></dt><dt><span class="sect2">History</span></dt><dt><span class="sect2">Completion (anonymous) transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">more row types</span></dt><dt><span class="sect2">Explicit entry / entry and exit pseudo-state / fork</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Event Hierarchy</span></dt><dt><span class="sect2">Customizing a state machine / Getting more speed</span></dt><dt><span class="sect2">Choosing the initial event</span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1247"> Containing st
ate machine (deprecated)</a></span></dt></dl></dd><dt><span class="sect1">Functor front-end</span></dt><dd><dl><dt><span class="sect2"> Transition table </span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards (Part 2)?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Anonymous transitions</span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1380">Internal
- transitions</a></span></dt></dl></dd><dt><span class="sect1">eUML (experimental)</span></dt><dd><dl><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">A simple example: rewriting only our transition table</span></dt><dt><span class="sect2">Defining events, actions and states with entry/exit actions</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1699">
- Attributes / Function call</a></span></dt><dt><span class="sect2">Orthogonal regions, flags, event deferring</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1911">
+ Conflicting transitions </a></span></dt></dl></dd><dt><span class="sect1">State machine glossary</span></dt></dl></dd><dt><span class="chapter">3. Tutorial</span></dt><dd><dl><dt><span class="sect1">Design</span></dt><dt><span class="sect1">Basic front-end</span></dt><dd><dl><dt><span class="sect2">A simple example</span></dt><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2
">Orthogonal regions, terminate state, event deferring</span></dt><dt><span class="sect2">History</span></dt><dt><span class="sect2">Completion (anonymous) transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">more row types</span></dt><dt><span class="sect2">Explicit entry / entry and exit pseudo-state / fork</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Event Hierarchy</span></dt><dt><span class="sect2">Customizing a state machine / Getting more speed</span></dt><dt><span class="sect2">Choosing the initial event</span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1259"> Containing st
ate machine (deprecated)</a></span></dt></dl></dd><dt><span class="sect1">Functor front-end</span></dt><dd><dl><dt><span class="sect2"> Transition table </span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards (Part 2)?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Anonymous transitions</span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1396">Internal
+ transitions</a></span></dt></dl></dd><dt><span class="sect1">eUML (experimental)</span></dt><dd><dl><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">A simple example: rewriting only our transition table</span></dt><dt><span class="sect2">Defining events, actions and states with entry/exit actions</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1741">
+ Attributes / Function call</a></span></dt><dt><span class="sect2">Orthogonal regions, flags, event deferring</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1953">
                         Customizing a state machine / Getting
- more speed</a></span></dt><dt><span class="sect2">Completion / Anonymous transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">Other state types</span></dt><dt><span class="sect2">Helper functions</span></dt><dt><span class="sect2">Phoenix-like STL support</span></dt></dl></dd><dt><span class="sect1">Back-end</span></dt><dd><dl><dt><span class="sect2">Creation </span></dt><dt><span class="sect2">Starting a state machine</span></dt><dt><span class="sect2">Event dispatching</span></dt><dt><span class="sect2">Active state(s)</span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2258">Serialization
</a></span></dt><dt><span class="sect2">Base state type </span></dt><dt><span class="sect2">Visitor</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Getting a state</span></dt><dt><span class="sect2"> State machine constructor with arguments </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2446">Trading run-time speed for
- better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2">Compile-time state machine analysis </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2572"> Enqueueing events for later
- processing </a></span></dt><dt><span class="sect2"> Customizing the message queues </span></dt><dt><span class="sect2">Policy definition with Boost.Parameter </span></dt></dl></dd></dl></dd><dt><span class="chapter">4. Performance / Compilers</span></dt><dd><dl><dt><span class="sect1">Speed</span></dt><dt><span class="sect1">Executable size</span></dt><dt><span class="sect1">Supported compilers</span></dt><dt><span class="sect1"> Limitations </span></dt><dt><span class="sect1"> Compilers corner </span></dt></dl></dd><dt><span class="chapter">5. Questions & Answers</span></dt><dt><span class="chapter">6. Internals</span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e2829">Backend: Run To Com
pletion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
- interface</a></span></dt><dt><span class="sect1"> Generated state ids </span></dt><dt><span class="sect1">Metaprogramming tools</span></dt></dl></dd><dt><span class="chapter">7. Acknowledgements</span></dt><dd><dl><dt><span class="sect1">MSM v2</span></dt><dt><span class="sect1"> MSM v1</span></dt></dl></dd><dt><span class="chapter">8. Version history</span></dt><dd><dl><dt><span class="sect1">From V2.12 to V2.20</span></dt><dt><span class="sect1">From V2.10 to V2.12</span></dt><dt><span class="sect1">From V2.0 to V2.12</span></dt></dl></dd></dl></dd><dt><span class="part">II. Reference</span></dt><dd><dl><dt><span class="chapter">9. eUML operators and basic helpers</span></dt><dt><span class="chap
ter"><a href="ch10.html">10.
- Functional programming </a></span></dt><dt><span class="refentrytitle">Common headers</span><span class="refpurpose"> &#8212; The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle">Back-end</span><span class="refpurpose"> &#8212; The back-end headers</span></dt><dt><span class="refentrytitle">Front-end</span><span class="refpurpose"> &#8212; The front-end headers</span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>9.1. Operators and state machine helpers</dt><dt>10.1. STL algorithms</dt><dt>10.2. STL algorithms</dt><dt>10.3. STL algorithms</dt><dt>10.4. STL container methods</dt><dt>10.5. STL list methods</dt><dt>10.6. <a href="ch10.html#d0e4216">STL assoc
iative container methods </a></dt><dt>10.7. STL pair</dt><dt>10.8. STL string</dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right" valign="top">&nbsp;Preface</td></tr></table></div></body></html>
\ No newline at end of file
+ more speed</a></span></dt><dt><span class="sect2">Completion / Anonymous transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">Other state types</span></dt><dt><span class="sect2">Helper functions</span></dt><dt><span class="sect2">Phoenix-like STL support</span></dt></dl></dd><dt><span class="sect1">Back-end</span></dt><dd><dl><dt><span class="sect2">Creation </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2265">Starting and stopping a state
+ machine</a></span></dt><dt><span class="sect2">Event dispatching</span></dt><dt><span class="sect2">Active state(s)</span></dt><dt><span class="sect2">Serialization</span></dt><dt><span class="sect2">Base state type </span></dt><dt><span class="sect2">Visitor</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Getting a state</span></dt><dt><span class="sect2"> State machine constructor with arguments </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2495">Trading run-time speed for
+ better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2">Compile-time state machine analysis </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2621"> Enqueueing events for later
+ processing </a></span></dt><dt><span class="sect2"> Customizing the message queues </span></dt><dt><span class="sect2">Policy definition with Boost.Parameter </span></dt></dl></dd></dl></dd><dt><span class="chapter">4. Performance / Compilers</span></dt><dd><dl><dt><span class="sect1">Speed</span></dt><dt><span class="sect1">Executable size</span></dt><dt><span class="sect1">Supported compilers</span></dt><dt><span class="sect1"> Limitations </span></dt><dt><span class="sect1"> Compilers corner </span></dt></dl></dd><dt><span class="chapter">5. Questions & Answers</span></dt><dt><span class="chapter">6. Internals</span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e2878">Backend: Run To Com
pletion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
+ interface</a></span></dt><dt><span class="sect1"> Generated state ids </span></dt><dt><span class="sect1">Metaprogramming tools</span></dt></dl></dd><dt><span class="chapter">7. Acknowledgements</span></dt><dd><dl><dt><span class="sect1">MSM v2</span></dt><dt><span class="sect1"> MSM v1</span></dt></dl></dd><dt><span class="chapter">8. Version history</span></dt><dd><dl><dt><span class="sect1">From V2.20 to V2.21 (Boost 1.47)</span></dt><dt><span class="sect1">From V2.12 to V2.20 (Boost 1.46)</span></dt><dt><span class="sect1">From V2.10 to V2.12 (Boost 1.45)</span></dt><dt><span class="sect1">From V2.0 to V2.12 (Boost 1.44)</span></dt></dl></dd></dl></dd><dt><span class="part">II. Reference</
span></dt><dd><dl><dt><span class="chapter">9. eUML operators and basic helpers</span></dt><dt><span class="chapter"><a href="ch10.html">10.
+ Functional programming </a></span></dt><dt><span class="refentrytitle">Common headers</span><span class="refpurpose"> &#8212; The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle">Back-end</span><span class="refpurpose"> &#8212; The back-end headers</span></dt><dt><span class="refentrytitle">Front-end</span><span class="refpurpose"> &#8212; The front-end headers</span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>9.1. Operators and state machine helpers</dt><dt>10.1. STL algorithms</dt><dt>10.2. STL algorithms</dt><dt>10.3. STL algorithms</dt><dt>10.4. STL container methods</dt><dt>10.5. STL list methods</dt><dt>10.6. <a href="ch10.html#d0e4307">STL assoc
iative container methods </a></dt><dt>10.7. STL pair</dt><dt>10.8. STL string</dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right" valign="top">&nbsp;Preface</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/pt01.html
==============================================================================
--- trunk/libs/msm/doc/HTML/pt01.html (original)
+++ trunk/libs/msm/doc/HTML/pt01.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -3,11 +3,12 @@
    <title>Part&nbsp;I.&nbsp;User' guide</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.20"><link rel="up" href="index.html" title="Meta State Machine (MSM) V2.20"><link rel="prev" href="pr01.html" title="Preface"><link rel="next" href="ch01.html" title="Chapter&nbsp;1.&nbsp;Founding idea"></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">Part&nbsp;I.&nbsp;User' guide</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Next</a></td></tr></table><hr></div><div class="part" title="Part&nbsp;I.&nbsp;User' guide"><div class="titlepage"><div><div><h1 class="title"
><a name="d0e96"></a>Part&nbsp;I.&nbsp;User' guide</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter">1. Founding idea</span></dt><dt><span class="chapter">2. UML Short Guide</span></dt><dd><dl><dt><span class="sect1">What are state machines?</span></dt><dt><span class="sect1">Concepts</span></dt><dd><dl><dt><span class="sect2">State machine, state, transition, event </span></dt><dt><span class="sect2">Submachines, orthogonal regions, pseudostates </span></dt><dt><span class="sect2"><a href="ch02s02.html#d0e284">
                         History </a></span></dt><dt><span class="sect2"><a href="ch02s02.html#d0e298">Completion transitions / anonymous
                         transitions</a></span></dt><dt><span class="sect2"> Internal transitions </span></dt><dt><span class="sect2"><a href="ch02s02.html#d0e316">
- Conflicting transitions </a></span></dt></dl></dd><dt><span class="sect1">State machine glossary</span></dt></dl></dd><dt><span class="chapter">3. Tutorial</span></dt><dd><dl><dt><span class="sect1">Design</span></dt><dt><span class="sect1">Basic front-end</span></dt><dd><dl><dt><span class="sect2">A simple example</span></dt><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2
">Orthogonal regions, terminate state, event deferring</span></dt><dt><span class="sect2">History</span></dt><dt><span class="sect2">Completion (anonymous) transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">more row types</span></dt><dt><span class="sect2">Explicit entry / entry and exit pseudo-state / fork</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Event Hierarchy</span></dt><dt><span class="sect2">Customizing a state machine / Getting more speed</span></dt><dt><span class="sect2">Choosing the initial event</span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1247"> Containing st
ate machine (deprecated)</a></span></dt></dl></dd><dt><span class="sect1">Functor front-end</span></dt><dd><dl><dt><span class="sect2"> Transition table </span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards (Part 2)?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Anonymous transitions</span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1380">Internal
- transitions</a></span></dt></dl></dd><dt><span class="sect1">eUML (experimental)</span></dt><dd><dl><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">A simple example: rewriting only our transition table</span></dt><dt><span class="sect2">Defining events, actions and states with entry/exit actions</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1699">
- Attributes / Function call</a></span></dt><dt><span class="sect2">Orthogonal regions, flags, event deferring</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1911">
+ Conflicting transitions </a></span></dt></dl></dd><dt><span class="sect1">State machine glossary</span></dt></dl></dd><dt><span class="chapter">3. Tutorial</span></dt><dd><dl><dt><span class="sect1">Design</span></dt><dt><span class="sect1">Basic front-end</span></dt><dd><dl><dt><span class="sect2">A simple example</span></dt><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2
">Orthogonal regions, terminate state, event deferring</span></dt><dt><span class="sect2">History</span></dt><dt><span class="sect2">Completion (anonymous) transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">more row types</span></dt><dt><span class="sect2">Explicit entry / entry and exit pseudo-state / fork</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Event Hierarchy</span></dt><dt><span class="sect2">Customizing a state machine / Getting more speed</span></dt><dt><span class="sect2">Choosing the initial event</span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1259"> Containing st
ate machine (deprecated)</a></span></dt></dl></dd><dt><span class="sect1">Functor front-end</span></dt><dd><dl><dt><span class="sect2"> Transition table </span></dt><dt><span class="sect2">Defining states with entry/exit actions</span></dt><dt><span class="sect2">What do you actually do inside actions / guards (Part 2)?</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Anonymous transitions</span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1396">Internal
+ transitions</a></span></dt></dl></dd><dt><span class="sect1">eUML (experimental)</span></dt><dd><dl><dt><span class="sect2">Transition table</span></dt><dt><span class="sect2">A simple example: rewriting only our transition table</span></dt><dt><span class="sect2">Defining events, actions and states with entry/exit actions</span></dt><dt><span class="sect2">Defining a simple state machine</span></dt><dt><span class="sect2">Defining a submachine</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1741">
+ Attributes / Function call</a></span></dt><dt><span class="sect2">Orthogonal regions, flags, event deferring</span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1953">
                         Customizing a state machine / Getting
- more speed</a></span></dt><dt><span class="sect2">Completion / Anonymous transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">Other state types</span></dt><dt><span class="sect2">Helper functions</span></dt><dt><span class="sect2">Phoenix-like STL support</span></dt></dl></dd><dt><span class="sect1">Back-end</span></dt><dd><dl><dt><span class="sect2">Creation </span></dt><dt><span class="sect2">Starting a state machine</span></dt><dt><span class="sect2">Event dispatching</span></dt><dt><span class="sect2">Active state(s)</span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2258">Serialization
</a></span></dt><dt><span class="sect2">Base state type </span></dt><dt><span class="sect2">Visitor</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Getting a state</span></dt><dt><span class="sect2"> State machine constructor with arguments </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2446">Trading run-time speed for
- better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2">Compile-time state machine analysis </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2572"> Enqueueing events for later
- processing </a></span></dt><dt><span class="sect2"> Customizing the message queues </span></dt><dt><span class="sect2">Policy definition with Boost.Parameter </span></dt></dl></dd></dl></dd><dt><span class="chapter">4. Performance / Compilers</span></dt><dd><dl><dt><span class="sect1">Speed</span></dt><dt><span class="sect1">Executable size</span></dt><dt><span class="sect1">Supported compilers</span></dt><dt><span class="sect1"> Limitations </span></dt><dt><span class="sect1"> Compilers corner </span></dt></dl></dd><dt><span class="chapter">5. Questions & Answers</span></dt><dt><span class="chapter">6. Internals</span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e2829">Backend: Run To Com
pletion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
- interface</a></span></dt><dt><span class="sect1"> Generated state ids </span></dt><dt><span class="sect1">Metaprogramming tools</span></dt></dl></dd><dt><span class="chapter">7. Acknowledgements</span></dt><dd><dl><dt><span class="sect1">MSM v2</span></dt><dt><span class="sect1"> MSM v1</span></dt></dl></dd><dt><span class="chapter">8. Version history</span></dt><dd><dl><dt><span class="sect1">From V2.12 to V2.20</span></dt><dt><span class="sect1">From V2.10 to V2.12</span></dt><dt><span class="sect1">From V2.0 to V2.12</span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pr01.html">Prev</a>&nbsp;</td><td width="20%" align="center"
>&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Founding idea</td></tr></table></div></body></html>
\ No newline at end of file
+ more speed</a></span></dt><dt><span class="sect2">Completion / Anonymous transitions</span></dt><dt><span class="sect2">Internal transitions</span></dt><dt><span class="sect2">Other state types</span></dt><dt><span class="sect2">Helper functions</span></dt><dt><span class="sect2">Phoenix-like STL support</span></dt></dl></dd><dt><span class="sect1">Back-end</span></dt><dd><dl><dt><span class="sect2">Creation </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2265">Starting and stopping a state
+ machine</a></span></dt><dt><span class="sect2">Event dispatching</span></dt><dt><span class="sect2">Active state(s)</span></dt><dt><span class="sect2">Serialization</span></dt><dt><span class="sect2">Base state type </span></dt><dt><span class="sect2">Visitor</span></dt><dt><span class="sect2">Flags</span></dt><dt><span class="sect2">Getting a state</span></dt><dt><span class="sect2"> State machine constructor with arguments </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2495">Trading run-time speed for
+ better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2">Compile-time state machine analysis </span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2621"> Enqueueing events for later
+ processing </a></span></dt><dt><span class="sect2"> Customizing the message queues </span></dt><dt><span class="sect2">Policy definition with Boost.Parameter </span></dt></dl></dd></dl></dd><dt><span class="chapter">4. Performance / Compilers</span></dt><dd><dl><dt><span class="sect1">Speed</span></dt><dt><span class="sect1">Executable size</span></dt><dt><span class="sect1">Supported compilers</span></dt><dt><span class="sect1"> Limitations </span></dt><dt><span class="sect1"> Compilers corner </span></dt></dl></dd><dt><span class="chapter">5. Questions & Answers</span></dt><dt><span class="chapter">6. Internals</span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e2878">Backend: Run To Com
pletion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
+ interface</a></span></dt><dt><span class="sect1"> Generated state ids </span></dt><dt><span class="sect1">Metaprogramming tools</span></dt></dl></dd><dt><span class="chapter">7. Acknowledgements</span></dt><dd><dl><dt><span class="sect1">MSM v2</span></dt><dt><span class="sect1"> MSM v1</span></dt></dl></dd><dt><span class="chapter">8. Version history</span></dt><dd><dl><dt><span class="sect1">From V2.20 to V2.21 (Boost 1.47)</span></dt><dt><span class="sect1">From V2.12 to V2.20 (Boost 1.46)</span></dt><dt><span class="sect1">From V2.10 to V2.12 (Boost 1.45)</span></dt><dt><span class="sect1">From V2.0 to V2.12 (Boost 1.44)</span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary=
"Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pr01.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Founding idea</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/pt02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/pt02.html (original)
+++ trunk/libs/msm/doc/HTML/pt02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,4 +1,4 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Part&nbsp;II.&nbsp;Reference</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.20"><link rel="up" href="index.html" title="Meta State Machine (MSM) V2.20"><link rel="prev" href="ch08s03.html" title="From V2.0 to V2.12"><link rel="next" href="ch09.html" title="Chapter&nbsp;9.&nbsp;eUML operators and basic helpers"></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">Part&nbsp;II.&nbsp;Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch09.html">Next</a></td></tr></table><hr></div><div class="part" title="Part&nbsp;II.&nbsp;Reference"><div class="title
page"><div><div><h1 class="title"><a name="d0e3284"></a>Part&nbsp;II.&nbsp;<span class="command"><strong><a name="Reference-begin"></a></strong></span>Reference</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter">9. eUML operators and basic helpers</span></dt><dt><span class="chapter"><a href="ch10.html">10.
- Functional programming </a></span></dt><dt><span class="refentrytitle">Common headers</span><span class="refpurpose"> &#8212; The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle">Back-end</span><span class="refpurpose"> &#8212; The back-end headers</span></dt><dt><span class="refentrytitle">Front-end</span><span class="refpurpose"> &#8212; The front-end headers</span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08s03.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch09.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">From V2.0 to V2.12&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&n
bsp;9.&nbsp;eUML operators and basic helpers</td></tr></table></div></body></html>
\ No newline at end of file
+ <title>Part&nbsp;II.&nbsp;Reference</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.20"><link rel="up" href="index.html" title="Meta State Machine (MSM) V2.20"><link rel="prev" href="ch08s04.html" title="From V2.0 to V2.12 (Boost 1.44)"><link rel="next" href="ch09.html" title="Chapter&nbsp;9.&nbsp;eUML operators and basic helpers"></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">Part&nbsp;II.&nbsp;Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch09.html">Next</a></td></tr></table><hr></div><div class="part" title="Part&nbsp;II.&nbsp;Reference"><div
 class="titlepage"><div><div><h1 class="title"><a name="d0e3375"></a>Part&nbsp;II.&nbsp;<span class="command"><strong><a name="Reference-begin"></a></strong></span>Reference</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter">9. eUML operators and basic helpers</span></dt><dt><span class="chapter"><a href="ch10.html">10.
+ Functional programming </a></span></dt><dt><span class="refentrytitle">Common headers</span><span class="refpurpose"> &#8212; The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle">Back-end</span><span class="refpurpose"> &#8212; The back-end headers</span></dt><dt><span class="refentrytitle">Front-end</span><span class="refpurpose"> &#8212; The front-end headers</span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch08s04.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch09.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">From V2.0 to V2.12 (Boost 1.44)&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&
nbsp;Chapter&nbsp;9.&nbsp;eUML operators and basic helpers</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/re01.html
==============================================================================
--- trunk/libs/msm/doc/HTML/re01.html (original)
+++ trunk/libs/msm/doc/HTML/re01.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,8 +1,8 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Common headers</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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="ch10.html" title="Chapter&nbsp;10.&nbsp; Functional programming"><link rel="next" 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">Common headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch10.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="re02.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Common headers"><a name="d0e4755"></a><div class="titlepage"></div><div clas
s="refnamediv"><h2>Name</h2><p>Common headers &#8212; The common types used by front- and back-ends</p></div><div class="refsect1" title="msm/common.hpp"><a name="d0e4761"></a><h2>msm/common.hpp</h2><p>This header provides one type, wrap, which is an empty type whose only reason
+ <title>Common headers</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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="ch10.html" title="Chapter&nbsp;10.&nbsp; Functional programming"><link rel="next" 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">Common headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch10.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="re02.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Common headers"><a name="d0e4846"></a><div class="titlepage"></div><div clas
s="refnamediv"><h2>Name</h2><p>Common headers &#8212; The common types used by front- and back-ends</p></div><div class="refsect1" title="msm/common.hpp"><a name="d0e4852"></a><h2>msm/common.hpp</h2><p>This header provides one type, wrap, which is an empty type whose only reason
                     to exist is to be cheap to construct, so that it can be used with mpl::for_each,
- as shown in the Metaprogramming book, chapter 9.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Dummy&gt; wrap{};</span></span>&nbsp;{<br>}</pre></div><div class="refsect1" title="msm/row_tags.hpp"><a name="d0e4770"></a><h2>msm/row_tags.hpp</h2><p>This header contains the row type tags which front-ends can support partially
+ as shown in the Metaprogramming book, chapter 9.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Dummy&gt; wrap{};</span></span>&nbsp;{<br>}</pre></div><div class="refsect1" title="msm/row_tags.hpp"><a name="d0e4861"></a><h2>msm/row_tags.hpp</h2><p>This header contains the row type tags which front-ends can support partially
                     or totally. Please see the <span class="command"><strong><a class="command" href="ch06s02.html#internals-front-back-interface">Internals</a></strong></span> section for a description of the different
                     types.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch10.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="re02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;10.&nbsp;
                 Functional programming &nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Back-end</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/re02.html
==============================================================================
--- trunk/libs/msm/doc/HTML/re02.html (original)
+++ trunk/libs/msm/doc/HTML/re02.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,79 +1,79 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <title>Back-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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="re01.html" title="Common headers"><link rel="next" href="re03.html" title="Front-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">Back-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re01.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="re03.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Back-end"><a name="d0e4778"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Back-end &#8212;
The back-end headers</p></div><div class="refsect1" title="msm/back/state_machine.hpp"><a name="d0e4784"></a><h2>msm/back/state_machine.hpp</h2><p> This header provides one type, state_machine, MSM's state machine engine
+ <title>Back-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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Reference"><link rel="prev" href="re01.html" title="Common headers"><link rel="next" href="re03.html" title="Front-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">Back-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re01.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="re03.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Back-end"><a name="d0e4869"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Back-end &#8212;
The back-end headers</p></div><div class="refsect1" title="msm/back/state_machine.hpp"><a name="d0e4875"></a><h2>msm/back/state_machine.hpp</h2><p> This header provides one type, state_machine, MSM's state machine engine
                     implementation.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Derived,class HistoryPolicy=NoHistory,class
- CompilePolicy=favor_runtime_speed&gt; state_machine</span></span>&nbsp;{<br>}</pre><div class="refsect2" title="Template arguments"><a name="d0e4793"></a><h3> Template arguments </h3><div class="refsect3" title="Derived"><a name="d0e4796"></a><h4> Derived </h4><p>The name of the front-end state machine definition. All three
- front-ends are possible.</p></div><div class="refsect3" title="HistoryPolicy"><a name="d0e4801"></a><h4> HistoryPolicy </h4><p>The desired history. This can be: AlwaysHistory, NoHistory,
- ShallowHistory. Default is NoHistory.</p></div><div class="refsect3" title="CompilePolicy"><a name="d0e4806"></a><h4> CompilePolicy </h4><p>The trade-off performance / compile-time. There are two predefined
+ CompilePolicy=favor_runtime_speed&gt; state_machine</span></span>&nbsp;{<br>}</pre><div class="refsect2" title="Template arguments"><a name="d0e4884"></a><h3> Template arguments </h3><div class="refsect3" title="Derived"><a name="d0e4887"></a><h4> Derived </h4><p>The name of the front-end state machine definition. All three
+ front-ends are possible.</p></div><div class="refsect3" title="HistoryPolicy"><a name="d0e4892"></a><h4> HistoryPolicy </h4><p>The desired history. This can be: AlwaysHistory, NoHistory,
+ ShallowHistory. Default is NoHistory.</p></div><div class="refsect3" title="CompilePolicy"><a name="d0e4897"></a><h4> CompilePolicy </h4><p>The trade-off performance / compile-time. There are two predefined
                             policies, favor_runtime_speed and favor_compile_time. Default is
- favor_runtime_speed, best performance, longer compile-time. See <a class="link" href="ch03s05.html#backend-tradeof-rt-ct">the backend</a>.</p></div></div><div class="refsect2" title="methods"><a name="d0e4814"></a><h3> methods </h3><div class="refsect3" title="start"><a name="d0e4817"></a><h4>start</h4><p> The start methods must be called before any call to process_event. It
+ favor_runtime_speed, best performance, longer compile-time. See <a class="link" href="ch03s05.html#backend-tradeof-rt-ct">the backend</a>.</p></div></div><div class="refsect2" title="methods"><a name="d0e4905"></a><h3> methods </h3><div class="refsect3" title="start"><a name="d0e4908"></a><h4>start</h4><p> The start methods must be called before any call to process_event. It
                             activates the entry action of the initial state(s). This allows you to
- choose when a state machine can start. See <a class="link" href="ch03s05.html#backend-start">backend</a>.</p><code class="methodsynopsis"><span class="methodname">void start</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="process_event"><a name="d0e4830"></a><h4>process_event</h4><p>The event processing method implements the double-dispatch. Each call
+ choose when a state machine can start. See <a class="link" href="ch03s05.html#backend-start">backend</a>.</p><code class="methodsynopsis"><span class="methodname">void start</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="process_event"><a name="d0e4921"></a><h4>process_event</h4><p>The event processing method implements the double-dispatch. Each call
                             to this function with a new event type instantiates a new dispatch
                             algorithm and increases compile-time.</p><code class="methodsynopsis"><span class="methodname">template &lt;class Event&gt; HandledEnum
- process_event</span>(<span class="methodparam">Event const&amp;</span>);</code></div><div class="refsect3" title="current_state"><a name="d0e4841"></a><h4>current_state</h4><p>Returns the ids of currently active states. You will typically need it
- only for debugging or logging purposes.</p><code class="methodsynopsis"><span class="methodname">const int* current_state const</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state_by_id"><a name="d0e4851"></a><h4>get_state_by_id</h4><p>Returns the state whose id is given. As all states of a concrete state
+ process_event</span>(<span class="methodparam">Event const&amp;</span>);</code></div><div class="refsect3" title="current_state"><a name="d0e4932"></a><h4>current_state</h4><p>Returns the ids of currently active states. You will typically need it
+ only for debugging or logging purposes.</p><code class="methodsynopsis"><span class="methodname">const int* current_state const</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state_by_id"><a name="d0e4942"></a><h4>get_state_by_id</h4><p>Returns the state whose id is given. As all states of a concrete state
                             machine share a common base state, the return value is a base state. If
- the id corresponds to no state, a null pointer is returned.</p><code class="methodsynopsis"><span class="methodname">const BaseState* get_state_by_id const</span>(<span class="methodparam">int id</span>);</code></div><div class="refsect3" title="is_contained"><a name="d0e4862"></a><h4>is_contained</h4><p>Helper returning true if the state machine is contained as a
- submachine of another state machine.</p><code class="methodsynopsis"><span class="methodname">bool is_contained const</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state"><a name="d0e4872"></a><h4>get_state</h4><p>Returns the required state of the state machine as a pointer. A
+ the id corresponds to no state, a null pointer is returned.</p><code class="methodsynopsis"><span class="methodname">const BaseState* get_state_by_id const</span>(<span class="methodparam">int id</span>);</code></div><div class="refsect3" title="is_contained"><a name="d0e4953"></a><h4>is_contained</h4><p>Helper returning true if the state machine is contained as a
+ submachine of another state machine.</p><code class="methodsynopsis"><span class="methodname">bool is_contained const</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state"><a name="d0e4963"></a><h4>get_state</h4><p>Returns the required state of the state machine as a pointer. A
                             compile error will occur if the state is not to be found in the state
- machine.</p><code class="methodsynopsis"><span class="methodname">template &lt;class State&gt; State* get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state"><a name="d0e4882"></a><h4>get_state</h4><p>Returns the required state of the state machine as a reference. A
+ machine.</p><code class="methodsynopsis"><span class="methodname">template &lt;class State&gt; State* get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state"><a name="d0e4973"></a><h4>get_state</h4><p>Returns the required state of the state machine as a reference. A
                             compile error will occur if the state is not to be found in the state
- machine.</p><code class="methodsynopsis"><span class="methodname">template &lt;class State&gt; State&amp; get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e4892"></a><h4>is_flag_active</h4><p>Returns true if the given flag is currently active. A flag is active
+ machine.</p><code class="methodsynopsis"><span class="methodname">template &lt;class State&gt; State&amp; get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e4983"></a><h4>is_flag_active</h4><p>Returns true if the given flag is currently active. A flag is active
                             if the active state of one region is tagged with this flag (using OR as
                             BinaryOp) or active states of <span class="underline">all</span>
                             regions (using AND as BinaryOp)</p><code class="methodsynopsis"><span class="methodname">template &lt;class Flag,class BinaryOp&gt; bool
- is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e4905"></a><h4>is_flag_active</h4><p>Returns true if the given flag is currently active. A flag is active
- if the active state of one region is tagged with this flag.</p><code class="methodsynopsis"><span class="methodname">template &lt;class Flag&gt; bool is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="visit_current_states"><a name="d0e4915"></a><h4>visit_current_states</h4><p>Visits all active states and their substates. A state is visited using
+ is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e4996"></a><h4>is_flag_active</h4><p>Returns true if the given flag is currently active. A flag is active
+ if the active state of one region is tagged with this flag.</p><code class="methodsynopsis"><span class="methodname">template &lt;class Flag&gt; bool is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="visit_current_states"><a name="d0e5006"></a><h4>visit_current_states</h4><p>Visits all active states and their substates. A state is visited using
                             the <code class="code">accept</code> method without argument. The base class of all
- states must provide an <code class="code">accept_sig</code> type.</p><code class="methodsynopsis"><span class="methodname">void visit_current_states</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="visit_current_states"><a name="d0e4931"></a><h4>visit_current_states</h4><p>Visits all active states and their substates. A state is visited using
+ states must provide an <code class="code">accept_sig</code> type.</p><code class="methodsynopsis"><span class="methodname">void visit_current_states</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="visit_current_states"><a name="d0e5022"></a><h4>visit_current_states</h4><p>Visits all active states and their substates. A state is visited using
                             the <code class="code">accept</code> method with arguments. The base class of all
                             states must provide an <code class="code">accept_sig</code> type defining the
- signature and thus the number and type of the parameters.</p><code class="methodsynopsis"><span class="methodname">void visit_current_states</span>(<span class="methodparam">any-type param1, any-type param2,...</span>);</code></div><div class="refsect3" title="defer_event"><a name="d0e4948"></a><h4>defer_event</h4><p> Defers the provided event. This method can be called only if at least
+ signature and thus the number and type of the parameters.</p><code class="methodsynopsis"><span class="methodname">void visit_current_states</span>(<span class="methodparam">any-type param1, any-type param2,...</span>);</code></div><div class="refsect3" title="defer_event"><a name="d0e5039"></a><h4>defer_event</h4><p> Defers the provided event. This method can be called only if at least
                             one state defers an event or if the state machine provides the
                                 <code class="code">activate_deferred_events</code>(see <a class="link" href="examples/Orthogonal-deferred2.cpp" target="_top">example</a>) type
                             either directly or using the deferred_events configuration of eUML
- (<code class="code">configure_ &lt;&lt; deferred_events</code>)</p><code class="methodsynopsis"><span class="methodname">template &lt;class Event&gt; void defer_event</span>(<span class="methodparam">Event const&amp;</span>);</code></div></div><div class="refsect2" title="Types"><a name="d0e4968"></a><h3>Types</h3><div class="refsect3" title="nr_regions"><a name="d0e4971"></a><h4>nr_regions </h4><p>The number of orthogonal regions contained in the state machine</p></div><div class="refsect3" title="entry_pt"><a name="d0e4976"></a><h4>entry_pt</h4><p>This nested type provides the necessary typedef for entry point
+ (<code class="code">configure_ &lt;&lt; deferred_events</code>)</p><code class="methodsynopsis"><span class="methodname">template &lt;class Event&gt; void defer_event</span>(<span class="methodparam">Event const&amp;</span>);</code></div></div><div class="refsect2" title="Types"><a name="d0e5059"></a><h3>Types</h3><div class="refsect3" title="nr_regions"><a name="d0e5062"></a><h4>nr_regions </h4><p>The number of orthogonal regions contained in the state machine</p></div><div class="refsect3" title="entry_pt"><a name="d0e5067"></a><h4>entry_pt</h4><p>This nested type provides the necessary typedef for entry point
                             pseudostates.
                                 <code class="code">state_machine&lt;...&gt;::entry_pt&lt;state_name&gt;</code> is a
                             transition's valid target inside the containing state machine's
- transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">entry_pt</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="exit_pt"><a name="d0e4988"></a><h4>exit_pt</h4><p>This nested type provides the necessary typedef for exit point
+ transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">entry_pt</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="exit_pt"><a name="d0e5079"></a><h4>exit_pt</h4><p>This nested type provides the necessary typedef for exit point
                             pseudostates. <code class="code">state_machine&lt;...&gt;::exit_pt&lt;state_name&gt;</code>
                             is a transition's valid source inside the containing state machine's
- transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">exit_pt</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="direct"><a name="d0e5000"></a><h4>direct</h4><p>This nested type provides the necessary typedef for an explicit entry
+ transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">exit_pt</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="direct"><a name="d0e5091"></a><h4>direct</h4><p>This nested type provides the necessary typedef for an explicit entry
                             inside a submachine.
                                 <code class="code">state_machine&lt;...&gt;::direct&lt;state_name&gt;</code> is a
                             transition's valid target inside the containing state machine's
- transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">direct</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="stt"><a name="d0e5012"></a><h4>stt</h4><p>Calling state_machine&lt;frontend&gt;::stt returns a mpl::vector
+ transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">direct</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="stt"><a name="d0e5103"></a><h4>stt</h4><p>Calling state_machine&lt;frontend&gt;::stt returns a mpl::vector
                             containing the transition table of the state machine. This type can then
- be used with generate_state_set or generate_event_set.</p></div></div></div><div class="refsect1" title="args.hpp"><a name="d0e5017"></a><h2>args.hpp</h2><p>This header provides one type, args. which provides the necessary types for a
- visitor implementation.</p></div><div class="refsect1" title="msm/back/history_policies.hpp"><a name="d0e5022"></a><h2><span class="command"><strong><a name="history-interface"></a></strong></span>msm/back/history_policies.hpp</h2><p>This header provides the out-of-the-box history policies supported by MSM.
- There are 3 such policies.</p><div class="refsect2" title="Every history policy must implement the following methods:"><a name="d0e5028"></a><h3>Every history policy must implement the following methods: </h3><div class="refsect3" title="set_initial_states"><a name="d0e5031"></a><h4> set_initial_states </h4><p> This method is called by msm::back::state_machine when constructed.
+ be used with generate_state_set or generate_event_set.</p></div></div></div><div class="refsect1" title="args.hpp"><a name="d0e5108"></a><h2>args.hpp</h2><p>This header provides one type, args. which provides the necessary types for a
+ visitor implementation.</p></div><div class="refsect1" title="msm/back/history_policies.hpp"><a name="d0e5113"></a><h2><span class="command"><strong><a name="history-interface"></a></strong></span>msm/back/history_policies.hpp</h2><p>This header provides the out-of-the-box history policies supported by MSM.
+ There are 3 such policies.</p><div class="refsect2" title="Every history policy must implement the following methods:"><a name="d0e5119"></a><h3>Every history policy must implement the following methods: </h3><div class="refsect3" title="set_initial_states"><a name="d0e5122"></a><h4> set_initial_states </h4><p> This method is called by msm::back::state_machine when constructed.
                             It gives the policy a chance to save the ids of all initial states
                             (passed as array).</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void set_initial_states(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                     <code>(</code>int* const<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="history_exit"><a name="d0e5045"></a><h4> history_exit </h4><p>This method is called by msm::back::state_machine when the submachine
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="history_exit"><a name="d0e5136"></a><h4> history_exit </h4><p>This method is called by msm::back::state_machine when the submachine
                             is exited. It gives the policy a chance to remember the ids of the last
                             active substates of this submachine (passed as array).</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">void history_exit(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                     <code>(</code>int* const<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="history_entry"><a name="d0e5059"></a><h4> history_entry </h4><p>This method is called by msm::back::state_machine when the submachine
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="history_entry"><a name="d0e5150"></a><h4> history_entry </h4><p>This method is called by msm::back::state_machine when the submachine
                             is entered. It gives the policy a chance to set the active states
                             according to the policy's aim. The policy gets as parameter the event
                             which activated the submachine and returns an array of active states
                             ids.</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template &lt;class Event&gt; int* const history_exit(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                     <code>(</code>Event const&amp;<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="Out-of-the-box policies:"><a name="d0e5073"></a><h3>Out-of-the-box policies: </h3><div class="refsect3" title="NoHistory"><a name="d0e5076"></a><h4>NoHistory</h4><p>This policy is the default used by state_machine. No active state of a
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="Out-of-the-box policies:"><a name="d0e5164"></a><h3>Out-of-the-box policies: </h3><div class="refsect3" title="NoHistory"><a name="d0e5167"></a><h4>NoHistory</h4><p>This policy is the default used by state_machine. No active state of a
                             submachine is remembered and at every new activation of the submachine,
- the initial state(s) are activated. </p></div><div class="refsect3" title="AlwaysHistory"><a name="d0e5081"></a><h4>AlwaysHistory</h4><p>This policy is a non-UML-standard extension. The active state(s) of a
+ the initial state(s) are activated. </p></div><div class="refsect3" title="AlwaysHistory"><a name="d0e5172"></a><h4>AlwaysHistory</h4><p>This policy is a non-UML-standard extension. The active state(s) of a
                             submachine is (are) always remembered at every new activation of the
- submachine. </p></div><div class="refsect3" title="ShallowHistory"><a name="d0e5086"></a><h4>ShallowHistory</h4><p>This policy activates the active state(s) of a submachine if the event
- is found in the policy's event list. </p></div></div></div><div class="refsect1" title="msm/back/default_compile_policy.hpp"><a name="d0e5091"></a><h2>msm/back/default_compile_policy.hpp</h2><p>This header contains the definition of favor_runtime_speed. This policy has
+ submachine. </p></div><div class="refsect3" title="ShallowHistory"><a name="d0e5177"></a><h4>ShallowHistory</h4><p>This policy activates the active state(s) of a submachine if the event
+ is found in the policy's event list. </p></div></div></div><div class="refsect1" title="msm/back/default_compile_policy.hpp"><a name="d0e5182"></a><h2>msm/back/default_compile_policy.hpp</h2><p>This header contains the definition of favor_runtime_speed. This policy has
                     two settings:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Submachines dispatch faster because their transitions are added
                                 into their containing machine's transition table instead of simply
- forwarding events.</p></li><li class="listitem"><p>It solves transition conflicts at compile-time</p></li></ul></div></div><div class="refsect1" title="msm/back/favor_compile_time.hpp"><a name="d0e5103"></a><h2>msm/back/favor_compile_time.hpp</h2><p>This header contains the definition of favor_compile_time. This policy has two settings:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Submachines dispatch is slower because all events, even those with
+ forwarding events.</p></li><li class="listitem"><p>It solves transition conflicts at compile-time</p></li></ul></div></div><div class="refsect1" title="msm/back/favor_compile_time.hpp"><a name="d0e5194"></a><h2>msm/back/favor_compile_time.hpp</h2><p>This header contains the definition of favor_compile_time. This policy has two settings:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Submachines dispatch is slower because all events, even those with
                                 no dispatch chance, are forwarded to submachines. In exchange, no
                                 row is added into the containing machine's transition table, which
- reduces compile-time.</p></li><li class="listitem"><p>It solves transition conflicts at run-time.</p></li></ul></div></div><div class="refsect1" title="msm/back/metafunctions.hpp"><a name="d0e5115"></a><h2>msm/back/metafunctions.hpp </h2><p>This header contains metafunctions for use by the library. Three metafunctions
+ reduces compile-time.</p></li><li class="listitem"><p>It solves transition conflicts at run-time.</p></li></ul></div></div><div class="refsect1" title="msm/back/metafunctions.hpp"><a name="d0e5206"></a><h2>msm/back/metafunctions.hpp </h2><p>This header contains metafunctions for use by the library. Three metafunctions
                     can be useful for the user:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">generate_state_set&lt; stt &gt;</code>: generates the list of
                                 all states referenced by the transition table stt. If stt is a
                                 recursive table (generated by
@@ -86,10 +86,10 @@
                                 finds recursively all events of the submachines. A non-recursive
                                 table can be obtained with some_backend_fsm::stt.</p></li><li class="listitem"><p><code class="code">recursive_get_transition_table&lt;fsm&gt;</code>: recursively
                                 extends the transition table of the state machine fsm with tables
- from the submachines.</p></li></ul></div></div><div class="refsect1" title="msm/back/tools.hpp"><a name="d0e5142"></a><h2>msm/back/tools.hpp </h2><p> This header contains a few metaprogramming tools to get some information out
- of a state machine.</p><div class="refsect2" title="fill_state_names"><a name="d0e5147"></a><h3>fill_state_names </h3><div class="refsect3" title="attributes"><a name="d0e5150"></a><h4>attributes </h4><p> fill_state_names has for attribute:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">char const** m_names</code>: an already allocated
+ from the submachines.</p></li></ul></div></div><div class="refsect1" title="msm/back/tools.hpp"><a name="d0e5233"></a><h2>msm/back/tools.hpp </h2><p> This header contains a few metaprogramming tools to get some information out
+ of a state machine.</p><div class="refsect2" title="fill_state_names"><a name="d0e5238"></a><h3>fill_state_names </h3><div class="refsect3" title="attributes"><a name="d0e5241"></a><h4>attributes </h4><p> fill_state_names has for attribute:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">char const** m_names</code>: an already allocated
                                         array of const char* where the typeid-generated names of a
- state machine states will be witten.</p></li></ul></div></div><div class="refsect3" title="constructor"><a name="d0e5161"></a><h4>constructor </h4><code class="constructorsynopsis"><span class="methodparam">char const** names_to_fill</span>(<span class="methodparam">char const** names_to_fill</span>);</code></div><div class="refsect3" title="usage"><a name="d0e5168"></a><h4>usage</h4><p> fill_state_names is made for use in a mpl::for_each iterating on a
+ state machine states will be witten.</p></li></ul></div></div><div class="refsect3" title="constructor"><a name="d0e5252"></a><h4>constructor </h4><code class="constructorsynopsis"><span class="methodparam">char const** names_to_fill</span>(<span class="methodparam">char const** names_to_fill</span>);</code></div><div class="refsect3" title="usage"><a name="d0e5259"></a><h4>usage</h4><p> fill_state_names is made for use in a mpl::for_each iterating on a
                             state list and writing inside a pre-allocated array the state names.
                             Example:</p><pre class="programlisting">typedef some_fsm::stt Stt;
 typedef msm::back::generate_state_set&lt;Stt&gt;::type all_states; //states
@@ -104,10 +104,10 @@
     std::cout &lt;&lt; " -&gt; "
               &lt;&lt; state_names[my_fsm_instance.current_state()[i]]
               &lt;&lt; std::endl;
-}</pre></div></div><div class="refsect2" title="get_state_name"><a name="d0e5175"></a><h3>get_state_name </h3><div class="refsect3" title="attributes"><a name="d0e5178"></a><h4> attributes </h4><p>get_state_name has for attributes:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>std::string&amp; m_name: the return value of the
- iteration</p></li><li class="listitem"><p>int m_state_id: the searched state's id</p></li></ul></div></div><div class="refsect3" title="constructor"><a name="d0e5190"></a><h4>constructor</h4><p>The constructor takes as argument a reference to the string to fill
- with the state name and the id which must be searched.</p><code class="constructorsynopsis"><span class="methodparam">string&amp; name_to_fill,int state_id</span>(<span class="methodparam">string&amp; name_to_fill,int state_id</span>);</code></div><div class="refsect3" title="usage"><a name="d0e5199"></a><h4> usage</h4><p>This type is made for the same search as in the previous example,
+}</pre></div></div><div class="refsect2" title="get_state_name"><a name="d0e5266"></a><h3>get_state_name </h3><div class="refsect3" title="attributes"><a name="d0e5269"></a><h4> attributes </h4><p>get_state_name has for attributes:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>std::string&amp; m_name: the return value of the
+ iteration</p></li><li class="listitem"><p>int m_state_id: the searched state's id</p></li></ul></div></div><div class="refsect3" title="constructor"><a name="d0e5281"></a><h4>constructor</h4><p>The constructor takes as argument a reference to the string to fill
+ with the state name and the id which must be searched.</p><code class="constructorsynopsis"><span class="methodparam">string&amp; name_to_fill,int state_id</span>(<span class="methodparam">string&amp; name_to_fill,int state_id</span>);</code></div><div class="refsect3" title="usage"><a name="d0e5290"></a><h4> usage</h4><p>This type is made for the same search as in the previous example,
                             using a mpl::for_each to iterate on states. After the iteration, the
- state name reference has been set.</p></div></div><div class="refsect2" title="display_type"><a name="d0e5204"></a><h3>display_type </h3><div class="refsect3" title="attributes"><a name="d0e5207"></a><h4> attributes </h4><p>none</p></div><div class="refsect3" title="usage"><a name="d0e5212"></a><h4> usage</h4><p>Reusing the state list from the previous example, we can output all
+ state name reference has been set.</p></div></div><div class="refsect2" title="display_type"><a name="d0e5295"></a><h3>display_type </h3><div class="refsect3" title="attributes"><a name="d0e5298"></a><h4> attributes </h4><p>none</p></div><div class="refsect3" title="usage"><a name="d0e5303"></a><h4> usage</h4><p>Reusing the state list from the previous example, we can output all
                             state names:</p><p><code class="code">mpl::for_each&lt;all_states,boost::msm::wrap&lt;mpl::placeholders::_1&gt;
                                 &gt;(msm::back::display_type ());</code></p></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="re01.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="re03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Common headers&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Front-end</td></tr></table></div></body></html>
\ No newline at end of file

Modified: trunk/libs/msm/doc/HTML/re03.html
==============================================================================
--- trunk/libs/msm/doc/HTML/re03.html (original)
+++ trunk/libs/msm/doc/HTML/re03.html 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -1,11 +1,11 @@
 <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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;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>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="refentry" title="Front-end"><a name="d0e5220"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Front-end &#8212; The front-end headers</p></div><div class="refsect1" title="msm/front/common_states.hpp"><a name
="d0e5226"></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="d0e5238"></a><h2>msm/front/completion_event.hpp</h2><p>This header contains one type, <code class="code">none</code>. This type has several
+ <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.20"><link rel="up" href="pt02.html" title="Part&nbsp;II.&nbsp;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>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Reference</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="refentry" title="Front-end"><a name="d0e5311"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Front-end &#8212; The front-end headers</p></div><div class="refsect1" title="msm/front/common_states.hpp"><a name
="d0e5317"></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="d0e5329"></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="d0e5256"></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="d0e5261"></a><h3>Row</h3><div class="refsect3" title="definition"><a name="d0e5264"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Source,class Event,class Target,class
- Action,class Guard&gt; Row</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5271"></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
+ transition</p></li></ul></div></div><div class="refsect1" title="msm/front/functor_row.hpp"><a name="d0e5347"></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="d0e5352"></a><h3>Row</h3><div class="refsect3" title="definition"><a name="d0e5355"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Source,class Event,class Target,class
+ Action,class Guard&gt; Row</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5362"></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&lt;Source,Event,Target,none,none&gt; a normal transition
                                         without action or guard: <code class="code">typedef _row_tag
@@ -21,7 +21,7 @@
                                         transition with action and guard: <code class="code">typedef irow_tag
                                             row_type_tag;</code></p></li><li class="listitem"><p>Row&lt;Source,Event,none,none,none&gt; 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="d0e5317"></a><h4>methods</h4><p>Like any other front-end, Row implements the two necessary static
+ row_type_tag;</code></p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5408"></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
@@ -33,8 +33,8 @@
                                     class AllStates&gt; static bool guard_call(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                     <code>(</code>Fsm&amp; fsm,Event const&amp;
                                         evt,SourceState&amp;,TargetState,AllStates&amp;<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="Internal"><a name="d0e5340"></a><h3>Internal</h3><div class="refsect3" title="definition"><a name="d0e5343"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Event,class Action,class Guard&gt;
- Internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5350"></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
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="Internal"><a name="d0e5431"></a><h3>Internal</h3><div class="refsect3" title="definition"><a name="d0e5434"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Event,class Action,class Guard&gt;
+ Internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5441"></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&lt;Event,none,none&gt; an internal transition
                                         without action or guard: <code class="code">typedef sm__i_row_tag
@@ -42,7 +42,7 @@
                                         without guard: <code class="code">typedef sm_a_i_row_tag
                                             row_type_tag;</code></p></li><li class="listitem"><p>Internal&lt;Event,none,Guard&gt; 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="d0e5376"></a><h4>methods</h4><p>Like any other front-end, Internal implements the two necessary static
+ row_type_tag;</code></p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5467"></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
@@ -54,9 +54,9 @@
                                     class AllStates&gt; static bool guard_call(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                     <code>(</code>Fsm&amp; fsm,Event const&amp;
                                         evt,SourceState&amp;,TargetState,AllStates&amp;<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="ActionSequence_"><a name="d0e5399"></a><h3>ActionSequence_</h3><p>This functor calls every element of the template Sequence (which are also
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="ActionSequence_"><a name="d0e5490"></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="d0e5404"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Sequence&gt; ActionSequence_</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5411"></a><h4>methods</h4><p>This helper functor is made for use in a transition table and in a
+ eUML sequence grammar (action1,action2,...).</p><div class="refsect3" title="definition"><a name="d0e5495"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class Sequence&gt; ActionSequence_</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5502"></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 &lt;class Evt,class Fsm,class
@@ -65,13 +65,13 @@
                         </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 &lt;class Evt,class Fsm,class State&gt;
                                         operator()(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Evt const&amp;, Fsm&amp;, State&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div><p>
- </p></div></div><div class="refsect2" title="Defer"><a name="d0e5434"></a><h3>Defer</h3><div class="refsect3" title="definition"><a name="d0e5437"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">Defer</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5444"></a><h4>methods</h4><p>This helper functor is made for use in a transition table and
+ </p></div></div><div class="refsect2" title="Defer"><a name="d0e5525"></a><h3>Defer</h3><div class="refsect3" title="definition"><a name="d0e5528"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">Defer</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5535"></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 &lt;class Evt,class Fsm,class SourceState,class
                                     TargetState&gt; operator()(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Evt const&amp;, Fsm&amp; , SourceState&amp;,
- TargetState&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div></div><div class="refsect1" title="msm/front/internal_row.hpp"><a name="d0e5455"></a><h2>msm/front/internal_row.hpp</h2><p>This header implements the internal transition rows for use inside an
+ TargetState&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div></div><div class="refsect1" title="msm/front/internal_row.hpp"><a name="d0e5546"></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="d0e5460"></a><h3>methods</h3><p>Like any other front-end, the following transition row types implements
+ internal_transition_table.</p><div class="refsect2" title="methods"><a name="d0e5551"></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
@@ -83,30 +83,30 @@
                                 class AllStates&gt; static bool guard_call(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                 <code>(</code>Fsm&amp; fsm,Event const&amp;
                                     evt,SourceState&amp;,TargetState,AllStates&amp;<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect2" title="a_internal"><a name="d0e5483"></a><h3>a_internal</h3><div class="refsect3" title="definition"><a name="d0e5486"></a><h4>definition</h4><p>This is an internal transition with an action called during the
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect2" title="a_internal"><a name="d0e5574"></a><h3>a_internal</h3><div class="refsect3" title="definition"><a name="d0e5577"></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&lt; class Event, class CalledForAction, void
                                     (CalledForAction::*action)(Event const&amp;)&gt;
- a_internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5495"></a><h4>template parameters</h4><p>
+ a_internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5586"></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="d0e5511"></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="d0e5516"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Event, class CalledForGuard, bool
+ </p></div></div><div class="refsect2" title="g_internal"><a name="d0e5602"></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="d0e5607"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Event, class CalledForGuard, bool
                                     (CalledForGuard::*guard)(Event const&amp;)&gt;
- g_internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5523"></a><h4>template parameters</h4><p>
+ g_internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5614"></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="d0e5539"></a><h3>internal</h3><p>This is an internal transition with a guard called before the transition
+ </p></div></div><div class="refsect2" title="internal"><a name="d0e5630"></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="d0e5544"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Event, class CalledForAction, void
+ called during the transition.</p><div class="refsect3" title="definition"><a name="d0e5635"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Event, class CalledForAction, void
                                     (CalledForAction::*action)(Event const&amp;), class
                                     CalledForGuard, bool (CalledForGuard::*guard)(Event const&amp;)&gt;
- internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5551"></a><h4>template parameters</h4><p>
+ internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5642"></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
@@ -114,15 +114,15 @@
                                         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="d0e5573"></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="d0e5578"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Event &gt; _internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5585"></a><h4>template parameters</h4><p>
+ </p></div></div><div class="refsect2" title="_internal"><a name="d0e5664"></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="d0e5669"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Event &gt; _internal</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5676"></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="d0e5595"></a><h2>msm/front/row2.hpp</h2><p>This header contains the variants of row2, which are an extension of the
+ </p></div></div></div><div class="refsect1" title="msm/front/row2.hpp"><a name="d0e5686"></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="d0e5600"></a><h3>methods</h3><p>Like any other front-end, the following transition row types implements
+ through their irow2 variants.</p><div class="refsect2" title="methods"><a name="d0e5691"></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
@@ -134,28 +134,28 @@
                                 class AllStates&gt; static bool guard_call(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                 <code>(</code>Fsm&amp; fsm,Event const&amp;
                                     evt,SourceState&amp;,TargetState,AllStates&amp;<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect2" title="_row2"><a name="d0e5623"></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="d0e5628"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target &gt;
- _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5635"></a><h4>template parameters</h4><p>
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect2" title="_row2"><a name="d0e5714"></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="d0e5719"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target &gt;
+ _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5726"></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="d0e5651"></a><h3>a_row2</h3><p>This is a transition with action and without guard.</p><div class="refsect3" title="definition"><a name="d0e5656"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target,
+ </p></div></div><div class="refsect2" title="a_row2"><a name="d0e5742"></a><h3>a_row2</h3><p>This is a transition with action and without guard.</p><div class="refsect3" title="definition"><a name="d0e5747"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target,
                                 </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
- (CalledForAction::*action)(Event const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5667"></a><h4>template parameters</h4><p>
+ (CalledForAction::*action)(Event const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5758"></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="d0e5689"></a><h3>g_row2</h3><p>This is a transition with guard and without action.</p><div class="refsect3" title="definition"><a name="d0e5694"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target,
+ </p></div></div><div class="refsect2" title="g_row2"><a name="d0e5780"></a><h3>g_row2</h3><p>This is a transition with guard and without action.</p><div class="refsect3" title="definition"><a name="d0e5785"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target,
                                 </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
- const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5705"></a><h4>template parameters</h4><p>
+ const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5796"></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="d0e5727"></a><h3>row2</h3><p>This is a transition with guard and action.</p><div class="refsect3" title="definition"><a name="d0e5732"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target,
+ </p></div></div><div class="refsect2" title="row2"><a name="d0e5818"></a><h3>row2</h3><p>This is a transition with guard and action.</p><div class="refsect3" title="definition"><a name="d0e5823"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, class Target,
                                 </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
                                     (CalledForAction::*action)(Event const&amp;), </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
- const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5747"></a><h4>template parameters</h4><p>
+ const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5838"></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
@@ -163,24 +163,24 @@
                                         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="d0e5775"></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="d0e5780"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
- (CalledForAction::*action)(Event const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5791"></a><h4>template parameters</h4><p>
+ </p></div></div><div class="refsect2" title="a_irow2"><a name="d0e5866"></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="d0e5871"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
+ (CalledForAction::*action)(Event const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5882"></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="d0e5810"></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="d0e5815"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
- const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5826"></a><h4>template parameters</h4><p>
+ </p></div></div><div class="refsect2" title="g_irow2"><a name="d0e5901"></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="d0e5906"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
+ const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5917"></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="d0e5845"></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="d0e5850"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
+ </p></div></div><div class="refsect2" title="irow2"><a name="d0e5936"></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="d0e5941"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt; class Source, class Event, </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
                                     (CalledForAction::*action)(Event const&amp;), </span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
- const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5865"></a><h4>template parameters</h4><p>
+ const&amp;) &gt; _row2</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e5956"></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
@@ -188,16 +188,16 @@
                                         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="d0e5890"></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="d0e5900"></a><h3>state_machine_def definition</h3><p>This type is the basic class for a basic (or possibly any other)
+ </p></div></div></div><div class="refsect1" title="msm/front/state_machine_def.hpp"><a name="d0e5981"></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="d0e5991"></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 &lt;class Derived,class BaseState =
- default_base_state&gt; state_machine_def</span></span>&nbsp;{<br>}</pre><div class="refsect3" title="typedefs"><a name="d0e5909"></a><h4>typedefs</h4><p>
+ default_base_state&gt; state_machine_def</span></span>&nbsp;{<br>}</pre><div class="refsect3" title="typedefs"><a name="d0e6000"></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="d0e5925"></a><h4>row methods</h4><p>Like any other front-end, the following transition row types
+ </p></div><div class="refsect3" title="row methods"><a name="d0e6016"></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
@@ -209,30 +209,30 @@
                                     class AllStates&gt; static bool guard_call(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>
                                     <code>(</code>Fsm&amp; fsm,Event const&amp;
                                         evt,SourceState&amp;,TargetState,AllStates&amp;<code>)</code>
- </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="a_row"><a name="d0e5948"></a><h4>a_row</h4><p>This is a transition with action and without guard.</p><p><code class="classname">template&lt; class Source, class Event, class Target,
+ </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="a_row"><a name="d0e6039"></a><h4>a_row</h4><p>This is a transition with action and without guard.</p><p><code class="classname">template&lt; class Source, class Event, class Target,
                                     void (Derived::*action)(Event const&amp;) &gt; 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="d0e5973"></a><h4>g_row</h4><p>This is a transition with guard and without action.</p><p><code class="classname">template&lt; class Source, class Event, class Target,
+ front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_row"><a name="d0e6064"></a><h4>g_row</h4><p>This is a transition with guard and without action.</p><p><code class="classname">template&lt; class Source, class Event, class Target,
                                     bool (Derived::*guard)(Event const&amp;) &gt; 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="d0e5998"></a><h4>row</h4><p>This is a transition with guard and action.</p><p><code class="classname">template&lt; class Source, class Event, class Target,
+ front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="row"><a name="d0e6089"></a><h4>row</h4><p>This is a transition with guard and action.</p><p><code class="classname">template&lt; class Source, class Event, class Target,
                                     void (Derived::*action)(Event const&amp;), bool
                                     (Derived::*guard)(Event const&amp;) &gt; 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="d0e6029"></a><h4>_row</h4><p>This is a transition without action or guard. The state machine only
+ front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="_row"><a name="d0e6120"></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&lt; class Source, class Event, class Target &gt;
- _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="d0e6048"></a><h4>a_irow</h4><p>This is an internal transition for use inside a transition table, with
+ _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="d0e6139"></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&lt; class Source, class Event, void
                                     (Derived::*action)(Event const&amp;) &gt; 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="d0e6070"></a><h4>g_irow</h4><p>This is an internal transition for use inside a transition table, with
+ front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_irow"><a name="d0e6161"></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&lt; class Source, class Event, bool
                                     (Derived::*guard)(Event const&amp;) &gt; 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="d0e6092"></a><h4>irow</h4><p>This is an internal transition for use inside a transition table, with
+ front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="irow"><a name="d0e6183"></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&lt; class Source, class Event, void
                                     (Derived::*action)(Event const&amp;), bool
                                     (Derived::*guard)(Event const&amp;) &gt; 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="d0e6120"></a><h4>_irow</h4><p>This is an internal transition without action or guard. As it does
+ front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="_irow"><a name="d0e6211"></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&lt; class Source, class Event &gt;
- _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="d0e6136"></a><h4>methods</h4><p><code class="code">state_machine_def</code> provides a default implementation in
+ _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="d0e6227"></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
@@ -256,30 +256,30 @@
                                         <code>(</code>Event const&amp; ,Fsm&amp;,
                                             std::exception&amp;<code>)</code>
                                     </code>;</div><div class="funcprototype-spacer">&nbsp;</div></div><p>
- </p></div></div></div><div class="refsect1" title="msm/front/states.hpp"><a name="d0e6180"></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="d0e6185"></a><h3>types</h3><p>This header provides the following types:</p><div class="refsect3" title="no_sm_ptr"><a name="d0e6190"></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="d0e6195"></a><h4>sm_ptr</h4><p>deprecated: state policy. It means that states need to save a pointer
+ </p></div></div></div><div class="refsect1" title="msm/front/states.hpp"><a name="d0e6271"></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="d0e6276"></a><h3>types</h3><p>This header provides the following types:</p><div class="refsect3" title="no_sm_ptr"><a name="d0e6281"></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="d0e6286"></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="d0e6200"></a><h4>state</h4><p>Basic type for simple states. Inherit from this type to define a
+ will call set_sm_ptr(fsm*) and give itself as argument.</p></div><div class="refsect3" title="state"><a name="d0e6291"></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&lt;class Base = default_base_state,class
- SMPtrPolicy = no_sm_ptr&gt; state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="terminate_state"><a name="d0e6209"></a><h4>terminate_state</h4><p>Basic type for terminate states. Inherit from this type to define a
+ SMPtrPolicy = no_sm_ptr&gt; state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="terminate_state"><a name="d0e6300"></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&lt;class Base = default_base_state,class
- SMPtrPolicy = no_sm_ptr&gt; terminate_state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="interrupt_state"><a name="d0e6218"></a><h4>interrupt_state</h4><p>Basic type for interrupt states. Interrupt states prevent any further
+ SMPtrPolicy = no_sm_ptr&gt; terminate_state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="interrupt_state"><a name="d0e6309"></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&lt;class EndInterruptEvent,class Base =
                                     default_base_state,</span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr&gt;
- interrupt_state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="explicit_entry"><a name="d0e6231"></a><h4>explicit_entry</h4><p>Inherit from this type <span class="underline">in
+ interrupt_state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="explicit_entry"><a name="d0e6322"></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 &lt;int ZoneIndex=-1&gt; explicit_entry</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="entry_pseudo_state"><a name="d0e6246"></a><h4>entry_pseudo_state</h4><p>Basic type for entry pseudo states. Entry pseudo states are an
+ <code class="code">initial_state</code> typedef).</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;int ZoneIndex=-1&gt; explicit_entry</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="entry_pseudo_state"><a name="d0e6337"></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).
@@ -287,7 +287,7 @@
                             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&lt;int RegionIndex=-1,class Base =
                                     default_base_state,</span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr&gt;
- entry_pseudo_state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="exit_pseudo_state"><a name="d0e6262"></a><h4>exit_pseudo_state</h4><p>Basic type for exit pseudo states. Exit pseudo states are an
+ entry_pseudo_state</span></span>&nbsp;{<br>}</pre></div><div class="refsect3" title="exit_pseudo_state"><a name="d0e6353"></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
@@ -296,32 +296,32 @@
                             machine) to inherit a basic type for logging or providing a common
                             behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template&lt;class Event,class Base =
                                     default_base_state,</span></span>&nbsp;{<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr&gt;
- exit_pseudo_state</span></span>&nbsp;{<br>}</pre></div></div></div><div class="refsect1" title="msm/front/euml/euml.hpp"><a name="d0e6275"></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="d0e6280"></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="d0e6288"></a><h2>msm/front/euml/algorithm.hpp</h2><p>This header includes all the functors for STL algorithms support in eUML.
+ exit_pseudo_state</span></span>&nbsp;{<br>}</pre></div></div></div><div class="refsect1" title="msm/front/euml/euml.hpp"><a name="d0e6366"></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="d0e6371"></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="d0e6379"></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="d0e6296"></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="d0e6304"></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="d0e6312"></a><h2>msm/front/euml/transformation.hpp</h2><p>This header includes transformation functors for STL support in eUML. This
+ description.</p></div><div class="refsect1" title="msm/front/euml/iteration.hpp"><a name="d0e6387"></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="d0e6395"></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="d0e6403"></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="d0e6320"></a><h2>msm/front/euml/container.hpp</h2><p>This header includes container functors for STL support in eUML (functors
+ description.</p></div><div class="refsect1" title="msm/front/euml/container.hpp"><a name="d0e6411"></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&gt;"><a name="d0e6328"></a><h3>Npos_&lt;container type&gt;</h3><p>Functor returning npos for transition or state behaviors. Like all
+ strings.</p><div class="refsect2" title="Npos_<container type&gt;"><a name="d0e6419"></a><h3>Npos_&lt;container type&gt;</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_&lt;'S'&gt;(),Size_t_&lt;0&gt;()) !=
                             Npos_&lt;string&gt;() // compare result of string::find with
- npos</code></p></div></div><div class="refsect1" title="msm/front/euml/stt_grammar.hpp"><a name="d0e6336"></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="d0e6341"></a><h3>functions</h3><div class="refsect3" title="build_stt"><a name="d0e6344"></a><h4>build_stt</h4><p>The function build_stt evaluates the grammar-conform expression as
+ npos</code></p></div></div><div class="refsect1" title="msm/front/euml/stt_grammar.hpp"><a name="d0e6427"></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="d0e6432"></a><h3>functions</h3><div class="refsect3" title="build_stt"><a name="d0e6435"></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&lt;class Expr&gt; [mpl::vector&lt;...&gt; /
- msm::front::euml::invalid_type] build_stt(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr const&amp; expr</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="build_internal_stt"><a name="d0e6358"></a><h4>build_internal_stt</h4><p>The function build_internal_stt evaluates the grammar-conform
+ msm::front::euml::invalid_type] build_stt(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr const&amp; expr</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div><div class="refsect3" title="build_internal_stt"><a name="d0e6449"></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&lt;class Expr&gt; [mpl::vector&lt;...&gt; /
- msm::front::euml::invalid_type] build_internal_stt(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr const&amp; expr</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="grammars"><a name="d0e6372"></a><h3>grammars</h3><div class="refsect3" title="transition table"><a name="d0e6375"></a><h4><span class="command"><strong><a name="reference-stt-grammar"></a>transition
+ msm::front::euml::invalid_type] build_internal_stt(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr const&amp; expr</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div></div></div><div class="refsect2" title="grammars"><a name="d0e6463"></a><h3>grammars</h3><div class="refsect3" title="transition table"><a name="d0e6466"></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*/
@@ -346,15 +346,15 @@
 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="d0e6387"></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="d0e6396"></a><h2>msm/front/euml/guard_grammar.hpp</h2><p>This header contains the <code class="code">Guard</code> grammar used in the previous
+source + event /action, /* internal transition*/</pre></div><div class="refsect3" title="internal transition table"><a name="d0e6478"></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="d0e6487"></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 '&amp;&amp;' 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="d0e6417"></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="d0e6422"></a><h3>action grammar</h3><p>Like the guard grammar, this grammar supports relevant C++ operators and
+ is a grammar defined in state_grammar.hpp.</p></div><div class="refsect1" title="msm/front/euml/state_grammar.hpp"><a name="d0e6508"></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="d0e6513"></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)
@@ -363,10 +363,10 @@
           | (function(Action,...Action))
 ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: ++ (post/pre), -- (post/pre), dereferencing, +
                         (unary/binary), - (unary/binary), *, /, %, &amp;(bitwise), | (bitwise),
- ^(bitwise), +=, -=, *=, /=, %=, &lt;&lt;=, &gt;&gt;=, &lt;&lt;, &gt;&gt;, =, [].</p></div><div class="refsect2" title="attributes"><a name="d0e6431"></a><h3>attributes</h3><p>This grammar is used to add attributes to states (or state machines) or
+ ^(bitwise), +=, -=, *=, /=, %=, &lt;&lt;=, &gt;&gt;=, &lt;&lt;, &gt;&gt;, =, [].</p></div><div class="refsect2" title="attributes"><a name="d0e6522"></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_ &lt;&lt; no_attributes_</code></p></li><li class="listitem"><p><code class="code">attributes_ &lt;&lt; attribute_1 &lt;&lt; ... &lt;&lt;
                                         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="d0e6447"></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_ &lt;&lt; no_configure_</code></p></li><li class="listitem"><p><code class="code">configure_ &lt;&lt; type_1 &lt;&lt; ... &lt;&lt;
+ requirement).</p></div><div class="refsect2" title="configure"><a name="d0e6538"></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_ &lt;&lt; no_configure_</code></p></li><li class="listitem"><p><code class="code">configure_ &lt;&lt; type_1 &lt;&lt; ... &lt;&lt;
                                         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_ &lt;&lt; some_flag</code> where
                                     some_flag inherits from <code class="code">euml_flag&lt;some_flag&gt;</code> or
                                     is defined using BOOST_MSM_EUML_FLAG.</p></li><li class="listitem"><p>deferred events: <code class="code">configure_ &lt;&lt; some_event</code>
@@ -378,12 +378,12 @@
                                     some_config inherits from
                                         <code class="code">euml_config&lt;some_config&gt;</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="d0e6501"></a><h3>initial states</h3><p>The grammar to define initial states for a state machine is: <code class="code">init_
+ deferred events</p></li></ul></div></li></ul></div></div><div class="refsect2" title="initial states"><a name="d0e6592"></a><h3>initial states</h3><p>The grammar to define initial states for a state machine is: <code class="code">init_
                             &lt;&lt; state_1 &lt;&lt; ... &lt;&lt; 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="d0e6509"></a><h3>functions</h3><div class="refsect3" title="build_sm"><a name="d0e6512"></a><h4>build_sm</h4><p>This function has several overloads. The return type is not relevant
+ BOOST_MSM_EUML_ENTRY_STATE or BOOST_MSM_EUML_EXIT_STATE.</p></div><div class="refsect2" title="functions"><a name="d0e6600"></a><h3>functions</h3><div class="refsect3" title="build_sm"><a name="d0e6603"></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 &lt;class StateNameTag,class Stt,class Init&gt;
                                     func_state_machine&lt;...&gt; build_sm(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Stt ,Init</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class Stt,class Init,class
                                     Expr1&gt; func_state_machine&lt;...&gt; build_sm(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class Stt,class Init,class
@@ -402,7 +402,7 @@
                                     Base&gt; func_state_machine&lt;...&gt; build_sm(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&amp;, Expr2 const&amp;, Attributes
                                     const&amp;, Configure const&amp;, Base</code>;</div><div class="funcprototype-spacer">&nbsp;</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="d0e6567"></a><h4>build_state</h4><p>This function has several overloads. The return type is not relevant
+ but still being different.</p></div><div class="refsect3" title="build_state"><a name="d0e6658"></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&lt;class StateNameTag,...&gt; build_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code></code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class Expr1&gt;
                                     func_state&lt;...&gt; build_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr1 const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class Expr1, class Expr2&gt;
                                     func_state&lt;...&gt; build_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr1 const&amp;,Expr2 const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</div></div><p>Defines a simple state with entry, exit behaviors and
@@ -418,7 +418,7 @@
                                     func_state&lt;...&gt; build_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr1 const&amp;, Expr2 const&amp;, Attributes const&amp;,
                                     Configure const&amp;, Base</code>;</div><div class="funcprototype-spacer">&nbsp;</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="d0e6621"></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="d0e6626"></a><h4>build_interrupt_state</h4><p>This function has several overloads. The return type is not relevant
+ being different.</p></div><div class="refsect3" title="build_terminate_state"><a name="d0e6712"></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="d0e6717"></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 &lt;class StateNameTag,class EndInterruptEvent&gt;
                                     func_state&lt;...&gt; build_interrupt_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class
                                     EndInterruptEvent,class Expr1&gt; func_state&lt;...&gt;
@@ -443,7 +443,7 @@
                                     const&amp;, Attributes const&amp;, Configure const&amp;,
                                     Base</code>;</div><div class="funcprototype-spacer">&nbsp;</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="d0e6681"></a><h4>build_entry_state</h4><p>This function has several overloads. The return type is not relevant
+ being different.</p></div><div class="refsect3" title="build_entry_state"><a name="d0e6772"></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 &lt;class StateNameTag,int RegionIndex&gt;
                                     entry_func_state&lt;...&gt; build_entry_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code></code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,int RegionIndex,class
                                     Expr1&gt; entry_func_state&lt;...&gt; build_entry_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr1 const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,int RegionIndex,class
@@ -462,7 +462,7 @@
                                     Base&gt; entry_func_state&lt;...&gt; build_entry_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Expr1 const&amp;, Expr2 const&amp;, Attributes const&amp;,
                                     Configure const&amp;, Base</code>;</div><div class="funcprototype-spacer">&nbsp;</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="d0e6735"></a><h4>build_exit_state</h4><p>This function has several overloads. The return type is not relevant
+ being different.</p></div><div class="refsect3" title="build_exit_state"><a name="d0e6826"></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 &lt;class StateNameTag,class Event&gt;
                                     exit_func_state&lt;...&gt; build_exit_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Event const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class Event,class Expr1&gt;
                                     exit_func_state&lt;...&gt; build_exit_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Event const&amp;,Expr1 const&amp;</code>;</div><div class="funcprototype-spacer">&nbsp;</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 &lt;class StateNameTag,class Event,class Expr1,
@@ -481,8 +481,8 @@
                                     exit_func_state&lt;...&gt; build_exit_state(</code></td><td><code>)</code>;</td><td>&nbsp;</td></tr></table><div class="paramdef-list"><code>Event const&amp;,Expr1 const&amp;, Expr2 const&amp;,
                                     Attributes const&amp;, Configure const&amp;, Base</code>;</div><div class="funcprototype-spacer">&nbsp;</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="d0e6790"></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="d0e6795"></a><h2>msm/front/euml/common.hpp</h2><div class="refsect2" title="types"><a name="d0e6798"></a><h3>types</h3><div class="refsect3" title="euml_event"><a name="d0e6801"></a><h4>euml_event</h4><p>The basic type for events with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class EventName&gt; euml_event;</span></span>&nbsp;{<br>}</pre><pre class="programlisting">struct play : euml_event&lt;play&gt;{};</pre></div><div class="refsect3" title="euml_state"><a name="d0e6812"></a><h4>euml_state</h4><p>The basic type for states with eUML. You will usually not use this
+ being different.</p></div><div class="refsect3" title="build_explicit_entry_state"><a name="d0e6881"></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="d0e6886"></a><h2>msm/front/euml/common.hpp</h2><div class="refsect2" title="types"><a name="d0e6889"></a><h3>types</h3><div class="refsect3" title="euml_event"><a name="d0e6892"></a><h4>euml_event</h4><p>The basic type for events with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class EventName&gt; euml_event;</span></span>&nbsp;{<br>}</pre><pre class="programlisting">struct play : euml_event&lt;play&gt;{};</pre></div><div class="refsect3" title="euml_state"><a name="d0e6903"></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
@@ -493,7 +493,7 @@
     void foo() {...}
     template &lt;class Event,class Fsm&gt;
     void on_entry(Event const&amp; evt,Fsm&amp; fsm){...}
-};</pre></div><div class="refsect3" title="euml_flag"><a name="d0e6825"></a><h4>euml_flag</h4><p>The basic type for flags with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class FlagName&gt; euml_flag;</span></span>&nbsp;{<br>}</pre><pre class="programlisting">struct PlayingPaused: euml_flag&lt;PlayingPaused&gt;{};</pre></div><div class="refsect3" title="euml_action"><a name="d0e6836"></a><h4>euml_action</h4><p>The basic type for state or transition behaviors and guards with
+};</pre></div><div class="refsect3" title="euml_flag"><a name="d0e6916"></a><h4>euml_flag</h4><p>The basic type for flags with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template &lt;class FlagName&gt; euml_flag;</span></span>&nbsp;{<br>}</pre><pre class="programlisting">struct PlayingPaused: euml_flag&lt;PlayingPaused&gt;{};</pre></div><div class="refsect3" title="euml_action"><a name="d0e6927"></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 &lt;class AcionName&gt; euml_action;</span></span>&nbsp;{<br>}</pre><pre class="programlisting">struct close_drawer : euml_action&lt;close_drawer&gt;
 {
     template &lt;class Fsm,class Evt,class SourceState,class TargetState&gt;
@@ -502,41 +502,41 @@
 {
     template &lt;class Event,class Fsm,class State&gt;
     void operator()(Event const&amp;,Fsm&amp; fsm,State&amp; ){...}
-};</pre></div><div class="refsect3" title="euml_config"><a name="d0e6851"></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 &lt;class ConfigName&gt; euml_config;</span></span>&nbsp;{<br>}</pre><p>You normally do not use this type directly but instead the instances
+};</pre></div><div class="refsect3" title="euml_config"><a name="d0e6942"></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 &lt;class ConfigName&gt; euml_config;</span></span>&nbsp;{<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="d0e6872"></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="d0e6877"></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="d0e6882"></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
+ events</p></li></ul></div></div><div class="refsect3" title="invalid_type"><a name="d0e6963"></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="d0e6968"></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="d0e6973"></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="d0e6902"></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
+ </p><pre class="programlisting">source_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="target_"><a name="d0e6993"></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="d0e6922"></a><h4>state_</h4><p>Generic object or function for the state of a given entry / exit
+ </p><pre class="programlisting">target_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="state_"><a name="d0e7013"></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="d0e6942"></a><h4>event_</h4><p>Generic object or function for the event triggering a given transition
+ </p><pre class="programlisting">state_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="event_"><a name="d0e7033"></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="d0e6962"></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,
+ </p><pre class="programlisting">event_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="fsm_"><a name="d0e7053"></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="d0e6982"></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
+ </p><pre class="programlisting">fsm_(m_counter)++</pre></li></ul></div></div><div class="refsect3" title="substate_"><a name="d0e7073"></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
@@ -544,46 +544,46 @@
                                         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="d0e7002"></a><h4>attribute_</h4><p>Generic object or function returning the attribute passed (by name) as
+ </p><pre class="programlisting">some_user_function_(substate_(my_state,fsm_))</pre></li></ul></div></div><div class="refsect3" title="attribute_"><a name="d0e7093"></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="d0e7012"></a><h4>True_</h4><p>Functor returning true for transition or state behaviors. Like all
+ </p></div><div class="refsect3" title="True_"><a name="d0e7103"></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="d0e7022"></a><h4>False_</h4><p>Functor returning false for transition or state behaviors. Like all
+ </p></div><div class="refsect3" title="False_"><a name="d0e7113"></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&gt;"><a name="d0e7032"></a><h4>Int_&lt;int value&gt;</h4><p>Functor returning an integer value for transition or state behaviors.
+ </p></div><div class="refsect3" title="Int_<int value&gt;"><a name="d0e7123"></a><h4>Int_&lt;int value&gt;</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_&lt;RINGING_TIME&gt;() // RINGING_TIME is a constant</pre><p>
- </p></div><div class="refsect3" title="Char_<char value&gt;"><a name="d0e7042"></a><h4>Char_&lt;char value&gt;</h4><p>Functor returning a char value for transition or state behaviors. Like
+ </p></div><div class="refsect3" title="Char_<char value&gt;"><a name="d0e7133"></a><h4>Char_&lt;char value&gt;</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_&lt;'S'&gt;(),Size_t_&lt;0&gt;()) != Npos_&lt;string&gt;()]</pre><p>
- </p></div><div class="refsect3" title="Size_t_<size_t value&gt;"><a name="d0e7052"></a><h4>Size_t_&lt;size_t value&gt;</h4><p>Functor returning a size_t value for transition or state behaviors.
+ </p></div><div class="refsect3" title="Size_t_<size_t value&gt;"><a name="d0e7143"></a><h4>Size_t_&lt;size_t value&gt;</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_&lt;1&gt;()) // returns a substring of event.m_song</pre><p>
- </p></div><div class="refsect3" title="String_ < mpl::string &gt;"><a name="d0e7062"></a><h4>String_ &lt; mpl::string &gt;</h4><p>Functor returning a string for transition or state behaviors. Like all
+ </p></div><div class="refsect3" title="String_ < mpl::string &gt;"><a name="d0e7153"></a><h4>String_ &lt; mpl::string &gt;</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 &gt;= 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_&lt;mpl::string&lt;'Let','it ','be'&gt; &gt;())</pre><p>
- </p></div><div class="refsect3" title="Predicate_ < some_stl_compatible_functor &gt;"><a name="d0e7074"></a><h4>Predicate_ &lt; some_stl_compatible_functor &gt;</h4><p>This functor eUML-enables a STL functor (for use in an algorithm).
+ </p></div><div class="refsect3" title="Predicate_ < some_stl_compatible_functor &gt;"><a name="d0e7165"></a><h4>Predicate_ &lt; some_stl_compatible_functor &gt;</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&lt;int&gt;())== 1
 accumulate_(begin_(fsm_(m_vec)),end_(fsm_(m_vec)),Int_&lt;1&gt;(),
- Predicate_&lt;std::plus&lt;int&gt; &gt;()) == Int_&lt;1&gt;())</pre></div><div class="refsect3" title="process_"><a name="d0e7083"></a><h4>process_</h4><p>This function sends an event to up to 4 state machines by calling
+ Predicate_&lt;std::plus&lt;int&gt; &gt;()) == Int_&lt;1&gt;())</pre></div><div class="refsect3" title="process_"><a name="d0e7174"></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="d0e7102"></a><h4>process2_</h4><p>This function sends an event to up to 3 state machines by calling
+ argument.</p></li></ul></div></div><div class="refsect3" title="process2_"><a name="d0e7193"></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]
@@ -593,24 +593,24 @@
 // 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&amp; data) // copy-constructor of NotFound</pre></div><div class="refsect3" title="is_flag_"><a name="d0e7132"></a><h4>is_flag_</h4><p>This function tells if a flag is active by calling
+NotFound (const string&amp; data) // copy-constructor of NotFound</pre></div><div class="refsect3" title="is_flag_"><a name="d0e7223"></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="d0e7157"></a><h4>defer_</h4><p>This object defers the current event by calling
+ as argument.</p></li></ul></div></div><div class="refsect3" title="defer_"><a name="d0e7248"></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="d0e7167"></a><h4>explicit_(submachine-name,state-name)</h4><p>Used as transition's target, causes an explicit entry into the given
+ Example:</p><pre class="programlisting">Empty() + play() / defer_</pre></div><div class="refsect3" title="explicit_(submachine-name,state-name)"><a name="d0e7258"></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="d0e7172"></a><h4>entry_pt_(submachine-name,state-name)</h4><p>Used as transition's target from a containing state machine, causes
+ BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE.</p></div><div class="refsect3" title="entry_pt_(submachine-name,state-name)"><a name="d0e7263"></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="d0e7177"></a><h4>exit_pt_(submachine-name,state-name)</h4><p>Used as transition's source from a containing state machine, causes
+ BOOST_MSM_EUML_ENTRY_STATE.</p></div><div class="refsect3" title="exit_pt_(submachine-name,state-name)"><a name="d0e7268"></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="d0e7182"></a><h4>MSM_EUML_FUNCTION</h4><p>This macro creates a eUML function and a functor for use with the
+ BOOST_MSM_EUML_EXIT_STATE.</p></div><div class="refsect3" title="MSM_EUML_FUNCTION"><a name="d0e7273"></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
@@ -618,7 +618,7 @@
                             </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_&lt;9&gt;())</pre><p>
- </p></div><div class="refsect3" title="MSM_EUML_METHOD"><a name="d0e7218"></a><h4>MSM_EUML_METHOD</h4><p>This macro creates a eUML function and a functor for use with the
+ </p></div><div class="refsect3" title="MSM_EUML_METHOD"><a name="d0e7309"></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
@@ -630,40 +630,40 @@
 };
 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="d0e7251"></a><h4>BOOST_MSM_EUML_ACTION(action-instance-name)</h4><p>This macro declares a behavior type and a const instance for use in
+ </p></div><div class="refsect3" title="BOOST_MSM_EUML_ACTION(action-instance-name)"><a name="d0e7342"></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 &lt;class Fsm,class Evt,class SourceState,class TargetState&gt;
      void/bool operator()(Evt const&amp; evt,Fsm&amp;,SourceState&amp; ,TargetState&amp; ){...}
-};</pre></div><div class="refsect3" title="BOOST_MSM_EUML_FLAG(flag-instance-name)"><a name="d0e7258"></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="d0e7263"></a><h4>BOOST_MSM_EUML_FLAG_NAME(flag-instance-name)</h4><p>This macro returns the name of the flag type generated by
+};</pre></div><div class="refsect3" title="BOOST_MSM_EUML_FLAG(flag-instance-name)"><a name="d0e7349"></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="d0e7354"></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&lt;BOOST_MSM_EUML_FLAG_NAME(CDLoaded)&gt;()</pre></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)"><a name="d0e7270"></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.
+ with the back-end method is_flag_active). For example:</p><pre class="programlisting">fsm.is_flag_active&lt;BOOST_MSM_EUML_FLAG_NAME(CDLoaded)&gt;()</pre></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)"><a name="d0e7361"></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="d0e7275"></a><h4>BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)</h4><p>This macro declares an attribute list called attributes-name based on
+ BOOST_MSM_EUML_ATTRIBUTES.</p></div><div class="refsect3" title="BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)"><a name="d0e7366"></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_ &lt;&lt; m_song ), FoundDef)</pre></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT(event-instance name)"><a name="d0e7284"></a><h4>BOOST_MSM_EUML_EVENT(event-instance name)</h4><p>This macro defines an event type (event-instance-name_helper) and
+BOOST_MSM_EUML_ATTRIBUTES((attributes_ &lt;&lt; m_song ), FoundDef)</pre></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT(event-instance name)"><a name="d0e7375"></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="d0e7289"></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
+ 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="d0e7380"></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="d0e7303"></a><h4>BOOST_MSM_EUML_EVENT_NAME(event-instance-name)</h4><p>This macro returns the name of the event type generated by
+ is possible.</p></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT_NAME(event-instance-name)"><a name="d0e7394"></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&lt;Playing_,
 msm::back::ShallowHistory&lt;mpl::vector&lt;BOOST_MSM_EUML_EVENT_NAME(end_pause)
 &gt; &gt; &gt; Playing_type;</pre><p>
- </p></div><div class="refsect3" title="BOOST_MSM_EUML_STATE(build-expression,state-instance-name)"><a name="d0e7313"></a><h4>BOOST_MSM_EUML_STATE(build-expression,state-instance-name)</h4><p>This macro defines a state type (state-instance-name_helper) and
+ </p></div><div class="refsect3" title="BOOST_MSM_EUML_STATE(build-expression,state-instance-name)"><a name="d0e7404"></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
@@ -672,7 +672,7 @@
                                         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="d0e7339"></a><h4>BOOST_MSM_EUML_INTERRUPT_STATE(build-expression,state-instance-name)</h4><p>This macro defines an interrupt state type
+ 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="d0e7430"></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
@@ -689,7 +689,7 @@
                                         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="d0e7365"></a><h4>BOOST_MSM_EUML_TERMINATE_STATE(build-expression,state-instance-name)</h4><p>This macro defines a terminate pseudo-state type
+ MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_TERMINATE_STATE(build-expression,state-instance-name)"><a name="d0e7456"></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
@@ -703,7 +703,7 @@
                                         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="d0e7391"></a><h4>BOOST_MSM_EUML_EXIT_STATE(build-expression,state-instance-name)</h4><p>This macro defines an exit pseudo-state type
+ MSM).</p></li></ul></div></div><div class="refsect3" title="BOOST_MSM_EUML_EXIT_STATE(build-expression,state-instance-name)"><a name="d0e7482"></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
@@ -719,7 +719,7 @@
                                         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="d0e7419"></a><h4>BOOST_MSM_EUML_ENTRY_STATE(int
+ 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="d0e7510"></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
@@ -734,7 +734,7 @@
                                         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="d0e7445"></a><h4>BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE(int
+ 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="d0e7536"></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
@@ -745,28 +745,28 @@
                                         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="d0e7471"></a><h4>BOOST_MSM_EUML_STATE_NAME(state-instance-name)</h4><p>This macro returns the name of the state type generated by
+ 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="d0e7562"></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&lt;BOOST_MSM_EUML_STATE_NAME(StringFind)&amp;&gt;().some_state_function();</pre><p>
- </p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)"><a name="d0e7481"></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="d0e7486"></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="d0e7491"></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="d0e7496"></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="d0e7501"></a><h4>BOOST_MSM_EUML_DECLARE_ENTRY_STATE(int
+ </p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)"><a name="d0e7572"></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="d0e7577"></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="d0e7582"></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="d0e7587"></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="d0e7592"></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="d0e7506"></a><h4>BOOST_MSM_EUML_DECLARE_EXPLICIT_ENTRY_STATE(int
+ 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="d0e7597"></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="d0e7511"></a><h4>BOOST_MSM_EUML_TRANSITION_TABLE(expression,
+ instance, simply a type declaration.</p></div><div class="refsect3" title="BOOST_MSM_EUML_TRANSITION_TABLE(expression, table-instance-name)"><a name="d0e7602"></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="d0e7519"></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="d0e7524"></a><h4>BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expression,
+ table grammar</a></strong></span>.</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(iexpression,table-instance-name)"><a name="d0e7610"></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="d0e7615"></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="d0e7532"></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,
+ 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="d0e7623"></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

Modified: trunk/libs/msm/doc/PDF/examples/CompositeTutorial.cpp
==============================================================================
--- trunk/libs/msm/doc/PDF/examples/CompositeTutorial.cpp (original)
+++ trunk/libs/msm/doc/PDF/examples/CompositeTutorial.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -41,6 +41,11 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&) {std::cout << "entering: Player" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Player" << std::endl;}
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -223,6 +228,12 @@
         p.process_event(stop()); pstate(p);
         // event leading to the same state
         p.process_event(stop()); pstate(p);
+ // stop the fsm (call on_exit's, including the submachines)
+ p.process_event(play());
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
+ std::cout << "restart fsm" << std::endl;
+ p.start();
     }
 }
 

Added: trunk/libs/msm/doc/PDF/examples/ExampleCircularBuffer.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/msm/doc/PDF/examples/ExampleCircularBuffer.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -0,0 +1,299 @@
+#include <vector>
+#include <iostream>
+// back-end
+#include <boost/msm/back/state_machine.hpp>
+// header for support of circular_buffer
+#include <boost/msm/back/queue_container_circular.hpp>
+//front-end
+#include <boost/msm/front/state_machine_def.hpp>
+// functors
+#include <boost/msm/front/functor_row.hpp>
+#include <boost/msm/front/euml/common.hpp>
+// for And_ operator
+#include <boost/msm/front/euml/operator.hpp>
+
+using namespace std;
+namespace msm = boost::msm;
+namespace mpl = boost::mpl;
+using namespace msm::front;
+// for And_ operator
+using namespace msm::front::euml;
+
+namespace // Concrete FSM implementation
+{
+ // events
+ struct play {};
+ struct end_pause {};
+ struct stop {};
+ struct pause {};
+ struct open_close {};
+
+ // A "complicated" event type that carries some data.
+ enum DiskTypeEnum
+ {
+ DISK_CD=0,
+ DISK_DVD=1
+ };
+ struct cd_detected
+ {
+ cd_detected(std::string name, DiskTypeEnum diskType)
+ : name(name),
+ disc_type(diskType)
+ {}
+
+ std::string name;
+ DiskTypeEnum disc_type;
+ };
+
+ // front-end: define the FSM structure
+ struct player_ : public msm::front::state_machine_def<player_>
+ {
+ // The list of FSM states
+ struct Empty : public msm::front::state<>
+ {
+ // every (optional) entry/exit methods get the event passed.
+ template <class Event,class FSM>
+ void on_entry(Event const&,FSM& ) {std::cout << "entering: Empty" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Empty" << std::endl;}
+ };
+ struct Open : public msm::front::state<>
+ {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&) {std::cout << "entering: Open" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Open" << std::endl;}
+ };
+
+ struct Stopped : public msm::front::state<>
+ {
+ // when stopped, the CD is loaded
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&) {std::cout << "entering: Stopped" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Stopped" << std::endl;}
+ };
+
+ struct Playing : public msm::front::state<>
+ {
+ template <class Event,class FSM>
+ void on_entry(Event const&,FSM& ) {std::cout << "entering: Playing" << std::endl;}
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& ) {std::cout << "leaving: Playing" << std::endl;}
+ };
+
+ // state not defining any entry or exit
+ struct Paused : public msm::front::state<>
+ {
+ };
+
+ // the initial state of the player SM. Must be defined
+ typedef Empty initial_state;
+
+ // transition actions
+ // as the functors are generic on events, fsm and source/target state,
+ // you can reuse them in another machine if you wish
+ struct TestFct
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const&, FSM&,SourceState& ,TargetState& )
+ {
+ cout << "transition with event:" << typeid(EVT).name() << endl;
+ }
+ };
+ struct start_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::start_playback" << endl;
+ }
+ };
+ struct open_drawer
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::open_drawer" << endl;
+ }
+ };
+ struct close_drawer
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::close_drawer" << endl;
+ }
+ };
+ struct store_cd_info
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const&,FSM& fsm ,SourceState& ,TargetState& )
+ {
+ cout << "player::store_cd_info" << endl;
+ fsm.process_event(play());
+ }
+ };
+ struct stop_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::stop_playback" << endl;
+ }
+ };
+ struct pause_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::pause_playback" << endl;
+ }
+ };
+ struct resume_playback
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::resume_playback" << endl;
+ }
+ };
+ struct stop_and_open
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::stop_and_open" << endl;
+ }
+ };
+ struct stopped_again
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM& ,SourceState& ,TargetState& )
+ {
+ cout << "player::stopped_again" << endl;
+ }
+ };
+ // guard conditions
+ struct DummyGuard
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ bool operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)
+ {
+ return true;
+ }
+ };
+ struct good_disk_format
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ bool operator()(EVT const& evt ,FSM&,SourceState& ,TargetState& )
+ {
+ // to test a guard condition, let's say we understand only CDs, not DVD
+ if (evt.disc_type != DISK_CD)
+ {
+ std::cout << "wrong disk, sorry" << std::endl;
+ return false;
+ }
+ return true;
+ }
+ };
+ struct always_true
+ {
+ template <class EVT,class FSM,class SourceState,class TargetState>
+ bool operator()(EVT const& evt ,FSM&,SourceState& ,TargetState& )
+ {
+ return true;
+ }
+ };
+ // we want to define one row with the classic look.
+ bool auto_start(cd_detected const& evt)
+ {
+ return false;
+ }
+
+ typedef player_ p; // makes transition table cleaner
+
+ // Transition table for player
+ struct transition_table : mpl::vector<
+ // Start Event Next Action Guard
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Stopped , play , Playing , ActionSequence_
+ <mpl::vector<
+ TestFct,start_playback> >
+ , DummyGuard >,
+ Row < Stopped , open_close , Open , open_drawer , none >,
+ Row < Stopped , stop , Stopped , none , none >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Open , open_close , Empty , close_drawer , none >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Empty , open_close , Open , open_drawer , none >,
+ Row < Empty , cd_detected , Stopped , store_cd_info , And_<good_disk_format,
+ always_true> >,
+ // we here also mix with some "classical row"
+ g_row < Empty , cd_detected , Playing , &p::auto_start >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Playing , stop , Stopped , stop_playback , none >,
+ Row < Playing , pause , Paused , pause_playback , none >,
+ Row < Playing , open_close , Open , stop_and_open , none >,
+ // +---------+-------------+---------+---------------------------+----------------------+
+ Row < Paused , end_pause , Playing , resume_playback , none >,
+ Row < Paused , stop , Stopped , stop_playback , none >,
+ Row < Paused , open_close , Open , stop_and_open , none >
+ // +---------+-------------+---------+---------------------------+----------------------+
+ > {};
+ // Replaces the default no-transition response.
+ template <class FSM,class Event>
+ void no_transition(Event const& e, FSM&,int state)
+ {
+ std::cout << "no transition from state " << state
+ << " on event " << typeid(e).name() << std::endl;
+ }
+ };
+ // Pick a back-end
+ typedef msm::back::state_machine<player_, msm::back::queue_container_circular> player;
+
+ //
+ // Testing utilities.
+ //
+ static char const* const state_names[] = { "Stopped", "Open", "Empty", "Playing", "Paused" };
+ void pstate(player const& p)
+ {
+ std::cout << " -> " << state_names[p.current_state()[0]] << std::endl;
+ }
+
+ void test()
+ {
+ player p;
+ // we get the message queue and limit it to capacity 1
+ // get_message_queue returns the queue container (in this case circular_buffer)
+ p.get_message_queue().set_capacity(1);
+ // needed to start the highest-level SM. This will call on_entry and mark the start of the SM
+ p.start();
+ // go to Open, call on_exit on Empty, then action, then on_entry on Open
+ p.process_event(open_close()); pstate(p);
+ p.process_event(open_close()); pstate(p);
+ // will be rejected, wrong disk type
+ p.process_event(
+ cd_detected("louie, louie",DISK_DVD)); pstate(p);
+ p.process_event(
+ cd_detected("louie, louie",DISK_CD)); pstate(p);
+ // no need to call play() as the previous event does it in its action method
+ //p.process_event(play());
+
+ // at this point, Play is active
+ p.process_event(pause()); pstate(p);
+ // go back to Playing
+ p.process_event(end_pause()); pstate(p);
+ p.process_event(pause()); pstate(p);
+ p.process_event(stop()); pstate(p);
+ // event leading to the same state
+ // no action method called as it is not present in the transition table
+ p.process_event(stop()); pstate(p);
+ }
+}
+
+int main()
+{
+ test();
+ return 0;
+}

Modified: trunk/libs/msm/doc/PDF/examples/Orthogonal-deferred.cpp
==============================================================================
--- trunk/libs/msm/doc/PDF/examples/Orthogonal-deferred.cpp (original)
+++ trunk/libs/msm/doc/PDF/examples/Orthogonal-deferred.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -48,6 +48,16 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -291,6 +301,8 @@
         p.process_event(end_error());pstate(p);
         std::cout << "Trying to generate another event" << std::endl; // will work only if ErrorMode is interrupt state
         p.process_event(play());pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
 
     }
 }

Modified: trunk/libs/msm/doc/PDF/examples/SimpleTutorial.cpp
==============================================================================
--- trunk/libs/msm/doc/PDF/examples/SimpleTutorial.cpp (original)
+++ trunk/libs/msm/doc/PDF/examples/SimpleTutorial.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -27,7 +27,7 @@
     struct open_close {};
 
     // A "complicated" event type that carries some data.
- enum DiskTypeEnum
+ enum DiskTypeEnum
     {
         DISK_CD=0,
         DISK_DVD=1
@@ -46,6 +46,17 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -56,7 +67,7 @@
             void on_exit(Event const&,FSM& ) {std::cout << "leaving: Empty" << std::endl;}
         };
         struct Open : public msm::front::state<>
- {
+ {
             template <class Event,class FSM>
             void on_entry(Event const& ,FSM&) {std::cout << "entering: Open" << std::endl;}
             template <class Event,class FSM>
@@ -65,7 +76,7 @@
 
         // sm_ptr still supported but deprecated as functors are a much better way to do the same thing
         struct Stopped : public msm::front::state<msm::front::default_base_state,msm::front::sm_ptr>
- {
+ {
             template <class Event,class FSM>
             void on_entry(Event const& ,FSM&) {std::cout << "entering: Stopped" << std::endl;}
             template <class Event,class FSM>
@@ -102,7 +113,7 @@
         void pause_playback(pause const&) { std::cout << "player::pause_playback\n"; }
         void resume_playback(end_pause const&) { std::cout << "player::resume_playback\n"; }
         void stop_and_open(open_close const&) { std::cout << "player::stop_and_open\n"; }
- void stopped_again(stop const&){std::cout << "player::stopped_again\n";}
+ void stopped_again(stop const&) {std::cout << "player::stopped_again\n";}
         // guard conditions
         bool good_disk_format(cd_detected const& evt)
         {
@@ -125,7 +136,7 @@
 
         // Transition table for player
         struct transition_table : mpl::vector<
- // Start Event Next Action Guard
+ // Start Event Next Action Guard
             // +---------+-------------+---------+---------------------+----------------------+
           a_row < Stopped , play , Playing , &p::start_playback >,
           a_row < Stopped , open_close , Open , &p::open_drawer >,
@@ -168,7 +179,7 @@
 
     void test()
     {
- player p;
+ player p;
         // needed to start the highest-level SM. This will call on_entry and mark the start of the SM
         p.start();
         // go to Open, call on_exit on Empty, then action, then on_entry on Open
@@ -179,7 +190,7 @@
             cd_detected("louie, louie",DISK_DVD)); pstate(p);
         p.process_event(
             cd_detected("louie, louie",DISK_CD)); pstate(p);
- p.process_event(play());
+ p.process_event(play());
 
         // at this point, Play is active
         p.process_event(pause()); pstate(p);
@@ -190,6 +201,8 @@
         // event leading to the same state
         // no action method called as it is not present in the transition table
         p.process_event(stop()); pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
     }
 }
 

Modified: trunk/libs/msm/doc/PDF/examples/SimpleTutorial2.cpp
==============================================================================
--- trunk/libs/msm/doc/PDF/examples/SimpleTutorial2.cpp (original)
+++ trunk/libs/msm/doc/PDF/examples/SimpleTutorial2.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -48,6 +48,17 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -203,6 +214,9 @@
         // event leading to the same state
         // no action method called as it is not present in the transition table
         p.process_event(stop()); pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
+
     }
 }
 

Modified: trunk/libs/msm/doc/PDF/examples/SimpleTutorialEuml.cpp
==============================================================================
--- trunk/libs/msm/doc/PDF/examples/SimpleTutorialEuml.cpp (original)
+++ trunk/libs/msm/doc/PDF/examples/SimpleTutorialEuml.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -88,9 +88,18 @@
             return true;
         }
     };
+ // it is also possible to use a plain functor, with default-constructor in the transition table
+ struct start_play
+ {
+ template <class FSM,class EVT,class SourceState,class TargetState>
+ void operator()(EVT const& ,FSM&,SourceState& ,TargetState& )
+ {
+ cout << "player::start_play" << endl;
+ }
+ };
     // replaces the old transition table
     BOOST_MSM_EUML_TRANSITION_TABLE((
- Playing == Stopped + play / start_playback ,
+ Playing == Stopped + play / start_play() ,
           Playing == Paused + end_pause / resume_playback,
           // +------------------------------------------------------------------------------+
           Empty == Open + open_close / (close_drawer,activate_empty_(target_)),

Modified: trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors.cpp
==============================================================================
--- trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors.cpp (original)
+++ trunk/libs/msm/doc/PDF/examples/SimpleWithFunctors.cpp 2011-05-18 17:05:53 EDT (Wed, 18 May 2011)
@@ -56,6 +56,17 @@
     // front-end: define the FSM structure
     struct player_ : public msm::front::state_machine_def<player_>
     {
+ template <class Event,class FSM>
+ void on_entry(Event const& ,FSM&)
+ {
+ std::cout << "entering: Player" << std::endl;
+ }
+ template <class Event,class FSM>
+ void on_exit(Event const&,FSM& )
+ {
+ std::cout << "leaving: Player" << std::endl;
+ }
+
         // The list of FSM states
         struct Empty : public msm::front::state<>
         {
@@ -294,6 +305,9 @@
         // event leading to the same state
         // no action method called as it is not present in the transition table
         p.process_event(stop()); pstate(p);
+ std::cout << "stop fsm" << std::endl;
+ p.stop();
+
     }
 }
 

Modified: trunk/libs/msm/doc/PDF/msm.pdf
==============================================================================
Binary files. No diff available.


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk