mirror of
https://github.com/boostorg/msm.git
synced 2026-02-02 09:02:09 +00:00
Sync from upstream.
This commit is contained in:
@@ -5,9 +5,9 @@
|
||||
Attributes / Function call</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e1906">Orthogonal regions, flags, event deferring</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2018">
|
||||
Customizing a state machine / Getting
|
||||
more speed</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2053">Completion / Anonymous transitions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2071">Internal transitions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2102">Kleene(any) event)</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2117">Other state types</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2181">Helper functions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2284">Phoenix-like STL support</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2337">Writing actions with Boost.Phoenix (in development)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s06.html">Back-end</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s06.html#d0e2396">Creation </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2405">Starting and stopping a state
|
||||
machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2424">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2433">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2447">Upper State Machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2452">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2505">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2531">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2574">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2587">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2600"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2640">Trading run-time speed for
|
||||
better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2722">Compile-time state machine analysis </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2766"> Enqueueing events for later
|
||||
processing </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2789"> Customizing the message queues </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2804">Policy definition with Boost.Parameter </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2812">Choosing when to switch active
|
||||
machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2424">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2433">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2447">Upper State Machine (msm::back11 only)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2452">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2505">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2531">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2574">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2587">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2600"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2640">Trading run-time speed for
|
||||
better compile-time / multi-TU compilation (msm::back only)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2726">Compile-time state machine analysis </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2770"> Enqueueing events for later
|
||||
processing </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2793"> Customizing the message queues </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2808">Policy definition with Boost.Parameter </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2816">Choosing when to switch active
|
||||
states </a></span></dt></dl></dd></dl></div><div class="sect1" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e325"></a>Design</h2></div></div></div><p>MSM is divided between front–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
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<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)"><link rel="up" href="ch03.html" title="Chapter 3. Tutorial"><link rel="prev" href="ch03s05.html" title="eUML"><link rel="next" href="ch04.html" title="Chapter 4. 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="ch03s05.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Tutorial</th><td width="20%" align="right"> <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="clear: both"><a name="d0e2391"></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
|
||||
runtime speed is due to a constant-time double-dispatch and self-adapting
|
||||
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="d0e2396"></a>Creation </h3></div></div></div><p>MSM being divided between front and back-end, one needs to first define a
|
||||
<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)"><link rel="up" href="ch03.html" title="Chapter 3. Tutorial"><link rel="prev" href="ch03s05.html" title="eUML"><link rel="next" href="ch04.html" title="Chapter 4. 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="ch03s05.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Tutorial</th><td width="20%" align="right"> <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="clear: both"><a name="d0e2391"></a>Back-end</h2></div></div></div><p>There are, at the moment, two back-ends. msm::back is using C++03, msm::back11
|
||||
is using C++11 and should be used by default if possible as it removes some
|
||||
pre-C++11 limitations (mpl::vector of limited size). 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 runtime speed is due to a constant-time double-dispatch and
|
||||
self-adapting 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="d0e2396"></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::back11::state_machine<my_front_end> my_fsm;</pre><p>We now have a fully functional state machine type. The next sections will
|
||||
@@ -41,7 +43,7 @@ some_event e1; fsm.process_event(e1)</pre><p>Creating an event on the fly will b
|
||||
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="Upper State Machine"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2447"></a>Upper State Machine</h3></div></div></div><p>The FSM template argument passed to functors or entry/exit actions is the
|
||||
know how state ids are generated.</p></div><div class="sect2" title="Upper State Machine (msm::back11 only)"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2447"></a>Upper State Machine (msm::back11 only)</h3></div></div></div><p>The FSM template argument passed to functors or entry/exit actions is the
|
||||
current state machine, which might not be what is wanted as th upper state
|
||||
machine makes more sense. The back-end provides a get_upper() function
|
||||
returning a pointer to the upper state machine, which is usually what you
|
||||
@@ -213,8 +215,8 @@ player p(boost::ref(data),3);
|
||||
where some data is passed:</p><pre class="programlisting">player p( back::states_ << Playing(back::states_ << 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_ << state_1 << ... << 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="d0e2640"></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.
|
||||
</p><pre class="programlisting">p.set_states( back::states_ << state_1 << ... << 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 (msm::back only)"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2640"></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 (msm::back only)</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
|
||||
be satisfied by a performance roughly the same as most state machine
|
||||
@@ -222,7 +224,7 @@ player p(boost::ref(data),3);
|
||||
it, if you are using a VC compiler, deactivate the /Gm compiler option
|
||||
(default for debug builds). This option can cause builds to be 3 times
|
||||
longer... If the compile-time still is a problem, read further. MSM offers a
|
||||
policy which will speed up compiling in two main cases:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>many transition conflicts</p></li><li class="listitem"><p>submachines</p></li></ul></div><p>The back-end <code class="code">msm::back11::state_machine</code> has a policy argument
|
||||
policy which will speed up compiling in two main cases:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>many transition conflicts</p></li><li class="listitem"><p>submachines</p></li></ul></div><p><span class="underline">Important warning</span>msm::back11 is not supporting this feature yet.</p><p>The back-end <code class="code">msm::back::state_machine</code> has a policy argument
|
||||
(first is the front-end, then the history policy) defaulting to
|
||||
<code class="code">favor_runtime_speed</code>. To switch to
|
||||
<code class="code">favor_compile_time</code>, which is declared in
|
||||
@@ -244,7 +246,7 @@ BOOST_MSM_BACK_GENERATE_PROCESS_EVENT(mysubmachine)</pre></li><li class="listite
|
||||
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="d0e2722"></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="d0e2726"></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
|
||||
@@ -258,14 +260,14 @@ BOOST_MSM_BACK_GENERATE_PROCESS_EVENT(mysubmachine)</pre></li><li class="listite
|
||||
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="d0e2766"></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="d0e2770"></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&)</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&)</code> instead. Calling <code class="code">execute_queued_events()</code>
|
||||
will then process all enqueued events (in FIFO order). Calling
|
||||
<code class="code">execute_single_queued_event()</code> will execute the oldest
|
||||
enqueued event.</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="d0e2789"></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
|
||||
enqueued event.</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="d0e2793"></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
|
||||
@@ -276,14 +278,14 @@ BOOST_MSM_BACK_GENERATE_PROCESS_EVENT(mysubmachine)</pre></li><li class="listite
|
||||
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="d0e2804"></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="d0e2808"></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
|
||||
back11::state_machine<> 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
|
||||
number. For example: </p><pre class="programlisting"> typedef msm::back11::state_machine< player_,msm::back::mpl_graph_fsm_check> player;
|
||||
typedef msm::back11::state_machine< player_,msm::back::AlwaysHistory> player;
|
||||
typedef msm::back11::state_machine< player_,msm::back::mpl_graph_fsm_check,msm::back::AlwaysHistory> player;
|
||||
typedef msm::back11::state_machine< player_,msm::back::AlwaysHistory,msm::back::mpl_graph_fsm_check> player; </pre></div><div class="sect2" title="Choosing when to switch active states"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2812"></a><span class="command"><strong><a name="backend-state-switch"></a></strong></span>Choosing when to switch active
|
||||
typedef msm::back11::state_machine< player_,msm::back::AlwaysHistory,msm::back::mpl_graph_fsm_check> player; </pre></div><div class="sect2" title="Choosing when to switch active states"><div class="titlepage"><div><div><h3 class="title"><a name="d0e2816"></a><span class="command"><strong><a name="backend-state-switch"></a></strong></span>Choosing when to switch active
|
||||
states </h3></div></div></div><p>The UML Standard is silent about a very important question: when a
|
||||
transition fires, at which exact point is the target state the new active
|
||||
state of a state machine? At the end of the transition? After the source
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 4. 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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch03s06.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 4. Performance / Compilers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s06.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 4. Performance / Compilers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2871"></a>Chapter 4. Performance / Compilers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch04.html#d0e2893">Speed</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Executable size</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Supported compilers</a></span></dt><dt><span class="sect1"><a href="ch04s04.html"> Limitations </a></span></dt><dt><span class="sect1"><a href="ch04s05.html"> Compilers corner </a></span></dt></dl></div><p>Tests were made on different PCs running Windows XP and Vista and compiled with
|
||||
<title>Chapter 4. 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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch03s06.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 4. Performance / Compilers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s06.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 4. Performance / Compilers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e2875"></a>Chapter 4. Performance / Compilers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch04.html#d0e2897">Speed</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Executable size</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Supported compilers</a></span></dt><dt><span class="sect1"><a href="ch04s04.html"> Limitations </a></span></dt><dt><span class="sect1"><a href="ch04s05.html"> Compilers corner </a></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="d0e2893"></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="d0e2897"></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="ch03s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Back-end </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Executable size</td></tr></table></div></body></html>
|
||||
@@ -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)"><link rel="up" href="ch04.html" title="Chapter 4. Performance / Compilers"><link rel="prev" href="ch04.html" title="Chapter 4. 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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Executable size"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2914"></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)"><link rel="up" href="ch04.html" title="Chapter 4. Performance / Compilers"><link rel="prev" href="ch04.html" title="Chapter 4. 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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Executable size"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2918"></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.
|
||||
|
||||
@@ -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)"><link rel="up" href="ch04.html" title="Chapter 4. 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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <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="d0e2919"></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)"><link rel="up" href="ch04.html" title="Chapter 4. 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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <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="d0e2923"></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
|
||||
|
||||
@@ -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)"><link rel="up" href="ch04.html" title="Chapter 4. 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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <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="d0e2950"></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)"><link rel="up" href="ch04.html" title="Chapter 4. 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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <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="d0e2954"></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 > 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
|
||||
|
||||
@@ -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)"><link rel="up" href="ch04.html" title="Chapter 4. Performance / Compilers"><link rel="prev" href="ch04s04.html" title="Limitations"><link rel="next" href="ch05.html" title="Chapter 5. Questions & Answers, tips"></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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <a accesskey="n" href="ch05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Compilers corner"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2971"></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)"><link rel="up" href="ch04.html" title="Chapter 4. Performance / Compilers"><link rel="prev" href="ch04s04.html" title="Limitations"><link rel="next" href="ch05.html" title="Chapter 5. Questions & Answers, tips"></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> </td><th width="60%" align="center">Chapter 4. Performance / Compilers</th><td width="20%" align="right"> <a accesskey="n" href="ch05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Compilers corner"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2975"></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’
|
||||
entertainment.</p><p><span class="underline">VC8</span>: </p><pre class="programlisting">template <class StateType>
|
||||
typename ::boost::enable_if<
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 5. Questions & Answers, tips</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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch04s05.html" title="Compilers corner"><link rel="next" href="ch06.html" title="Chapter 6. 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 5. Questions & Answers, tips</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s05.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch06.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 5. Questions & Answers, tips"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3021"></a>Chapter 5. Questions & Answers, tips</h2></div></div></div><p><span class="underline">Where should I define a state machine?</span>: The
|
||||
<title>Chapter 5. Questions & Answers, tips</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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch04s05.html" title="Compilers corner"><link rel="next" href="ch06.html" title="Chapter 6. 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 5. Questions & Answers, tips</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s05.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch06.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 5. Questions & Answers, tips"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3025"></a>Chapter 5. Questions & Answers, tips</h2></div></div></div><p><span class="underline">Where should I define a state machine?</span>: The
|
||||
tutorials are implemented in a simple cpp source file for simplicity. I want to
|
||||
model dynamic behavior of a class as a state machine, how should I define the state
|
||||
machine?</p><p><span class="underline">Answer</span>: Usually you'll want to implement the
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 6. 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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch05.html" title="Chapter 5. Questions & Answers, tips"><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 6. Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch06s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 6. Internals"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3106"></a>Chapter 6. Internals</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch06.html#d0e3111">Backend: Run To Completion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
|
||||
<title>Chapter 6. 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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch05.html" title="Chapter 5. Questions & Answers, tips"><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 6. Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch06s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 6. Internals"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3110"></a>Chapter 6. Internals</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch06.html#d0e3115">Backend: Run To Completion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
|
||||
interface</a></span></dt><dt><span class="sect1"><a href="ch06s03.html"> Generated state ids </a></span></dt><dt><span class="sect1"><a href="ch06s04.html">Metaprogramming tools</a></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="d0e3111"></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="d0e3115"></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
|
||||
|
||||
@@ -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)"><link rel="up" href="ch06.html" title="Chapter 6. Internals"><link rel="prev" href="ch06.html" title="Chapter 6. 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> </td><th width="60%" align="center">Chapter 6. Internals</th><td width="20%" align="right"> <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="d0e3177"></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> </td><th width="60%" align="center">Chapter 6. Internals</th><td width="20%" align="right"> <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="d0e3181"></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
|
||||
|
||||
@@ -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)"><link rel="up" href="ch06.html" title="Chapter 6. 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> </td><th width="60%" align="center">Chapter 6. Internals</th><td width="20%" align="right"> <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="d0e3355"></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)"><link rel="up" href="ch06.html" title="Chapter 6. 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> </td><th width="60%" align="center">Chapter 6. Internals</th><td width="20%" align="right"> <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="d0e3359"></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
|
||||
|
||||
@@ -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)"><link rel="up" href="ch06.html" title="Chapter 6. Internals"><link rel="prev" href="ch06s03.html" title="Generated state ids"><link rel="next" href="ch07.html" title="Chapter 7. 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> </td><th width="60%" align="center">Chapter 6. Internals</th><td width="20%" align="right"> <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="d0e3367"></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)"><link rel="up" href="ch06.html" title="Chapter 6. Internals"><link rel="prev" href="ch06s03.html" title="Generated state ids"><link rel="next" href="ch07.html" title="Chapter 7. 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> </td><th width="60%" align="center">Chapter 6. Internals</th><td width="20%" align="right"> <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="d0e3371"></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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 7. 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)"><link rel="up" href="pt01.html" title="Part I. 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 7. Acknowledgements</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s04.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch07s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 7. Acknowledgements"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3401"></a>Chapter 7. Acknowledgements</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch07.html#d0e3406">MSM v2</a></span></dt><dt><span class="sect1"><a href="ch07s02.html"> MSM v1</a></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="d0e3406"></a>MSM v2</h2></div></div></div><p>
|
||||
<title>Chapter 7. 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)"><link rel="up" href="pt01.html" title="Part I. 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 7. Acknowledgements</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch06s04.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch07s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 7. Acknowledgements"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3405"></a>Chapter 7. Acknowledgements</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch07.html#d0e3410">MSM v2</a></span></dt><dt><span class="sect1"><a href="ch07s02.html"> MSM v1</a></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="d0e3410"></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.
|
||||
|
||||
@@ -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)"><link rel="up" href="ch07.html" title="Chapter 7. Acknowledgements"><link rel="prev" href="ch07.html" title="Chapter 7. Acknowledgements"><link rel="next" href="ch08.html" title="Chapter 8. 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> </td><th width="60%" align="center">Chapter 7. Acknowledgements</th><td width="20%" align="right"> <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="title" style="clear: both"><a name="d0e3434"></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)"><link rel="up" href="ch07.html" title="Chapter 7. Acknowledgements"><link rel="prev" href="ch07.html" title="Chapter 7. Acknowledgements"><link rel="next" href="ch08.html" title="Chapter 8. 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> </td><th width="60%" align="center">Chapter 7. Acknowledgements</th><td width="20%" align="right"> <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="title" style="clear: both"><a name="d0e3438"></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, “C++
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 8. 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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch07s02.html" title="MSM v1"><link rel="next" href="ch08s02.html" title="Boost 1.72"></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 8. Version history</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07s02.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch08s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 8. Version history"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3450"></a>Chapter 8. Version history</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch08.html#d0e3453">Boost 1.85</a></span></dt><dt><span class="sect1"><a href="ch08s02.html">Boost 1.72</a></span></dt><dt><span class="sect1"><a href="ch08s03.html">Boost 1.57</a></span></dt><dt><span class="sect1"><a href="ch08s04.html">Boost 1.56</a></span></dt><dt><span class="sect1"><a href="ch08s05.html">Boost 1.55</a></span></dt><dt><span class="sect1"><a href="ch08s06.html">Boost 1.54</a></span></dt><dt><span class="sect1"><a href="ch08s07.html">From V2.23 to V2.24 (Boost 1.51)</a></span></dt><dt><span class="sect1"><a href="ch08s08.html">From V2.22 to V2.23 (Boost 1.50)</a></span></dt><dt><span class="sect1"><a href="ch08s09.html">From V2.21 to V2.22 (Boost 1.48)</a></span></dt><dt><span class="sect1"><a href="ch08s10.html">From V2.20 to V2.21 (Boost 1.47)</a></span></dt><dt><span class="sect1"><a href="ch08s11.html">From V2.12 to V2.20 (Boost 1.46)</a></span></dt><dt><span class="sect1"><a href="ch08s12.html">From V2.10 to V2.12 (Boost 1.45)</a></span></dt><dt><span class="sect1"><a href="ch08s13.html">From V2.0 to V2.12 (Boost 1.44)</a></span></dt></dl></div><div class="sect1" title="Boost 1.85"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3453"></a>Boost 1.85</h2></div></div></div><p>
|
||||
<title>Chapter 8. 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)"><link rel="up" href="pt01.html" title="Part I. User' guide"><link rel="prev" href="ch07s02.html" title="MSM v1"><link rel="next" href="ch08s02.html" title="Boost 1.72"></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 8. Version history</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07s02.html">Prev</a> </td><th width="60%" align="center">Part I. User' guide</th><td width="20%" align="right"> <a accesskey="n" href="ch08s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 8. Version history"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3454"></a>Chapter 8. Version history</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch08.html#d0e3457">Boost 1.85</a></span></dt><dt><span class="sect1"><a href="ch08s02.html">Boost 1.72</a></span></dt><dt><span class="sect1"><a href="ch08s03.html">Boost 1.57</a></span></dt><dt><span class="sect1"><a href="ch08s04.html">Boost 1.56</a></span></dt><dt><span class="sect1"><a href="ch08s05.html">Boost 1.55</a></span></dt><dt><span class="sect1"><a href="ch08s06.html">Boost 1.54</a></span></dt><dt><span class="sect1"><a href="ch08s07.html">From V2.23 to V2.24 (Boost 1.51)</a></span></dt><dt><span class="sect1"><a href="ch08s08.html">From V2.22 to V2.23 (Boost 1.50)</a></span></dt><dt><span class="sect1"><a href="ch08s09.html">From V2.21 to V2.22 (Boost 1.48)</a></span></dt><dt><span class="sect1"><a href="ch08s10.html">From V2.20 to V2.21 (Boost 1.47)</a></span></dt><dt><span class="sect1"><a href="ch08s11.html">From V2.12 to V2.20 (Boost 1.46)</a></span></dt><dt><span class="sect1"><a href="ch08s12.html">From V2.10 to V2.12 (Boost 1.45)</a></span></dt><dt><span class="sect1"><a href="ch08s13.html">From V2.0 to V2.12 (Boost 1.44)</a></span></dt></dl></div><div class="sect1" title="Boost 1.85"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3457"></a>Boost 1.85</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Backend update (back11). Requires C++ 11. The documentation now
|
||||
uses it as default.</p></li><li class="listitem"><p>New front-end (PlantUML). Requires C++ 20</p></li><li class="listitem"><p>Div. bugfixes</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="ch07s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch08s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> MSM v1 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Boost 1.72</td></tr></table></div></body></html>
|
||||
@@ -1,5 +1,5 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Boost 1.72</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08.html" title="Chapter 8. Version history"><link rel="next" href="ch08s03.html" title="Boost 1.57"></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">Boost 1.72</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.72"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3469"></a>Boost 1.72</h2></div></div></div><p>
|
||||
<title>Boost 1.72</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08.html" title="Chapter 8. Version history"><link rel="next" href="ch08s03.html" title="Boost 1.57"></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">Boost 1.72</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s03.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.72"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3473"></a>Boost 1.72</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Merged from develop new implementation of deferred events</p></li><li class="listitem"><p>Div. 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> </td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch08s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. Version history </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Boost 1.57</td></tr></table></div></body></html>
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Boost 1.57</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s02.html" title="Boost 1.72"><link rel="next" href="ch08s04.html" title="Boost 1.56"></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">Boost 1.57</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s02.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.57"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3482"></a>Boost 1.57</h2></div></div></div><p>
|
||||
<title>Boost 1.57</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s02.html" title="Boost 1.72"><link rel="next" href="ch08s04.html" title="Boost 1.56"></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">Boost 1.57</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s02.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s04.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.57"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3486"></a>Boost 1.57</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Fixed BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES (broken in
|
||||
1.56).</p></li><li class="listitem"><p>Fixed execute_queued_events, added
|
||||
execute_single_queued_event</p></li><li class="listitem"><p>Fixed warnings for unused variables</p></li></ul></div><p>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Boost 1.56</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s03.html" title="Boost 1.57"><link rel="next" href="ch08s05.html" title="Boost 1.55"></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">Boost 1.56</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s03.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.56"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3498"></a>Boost 1.56</h2></div></div></div><p>
|
||||
<title>Boost 1.56</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s03.html" title="Boost 1.57"><link rel="next" href="ch08s05.html" title="Boost 1.55"></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">Boost 1.56</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s03.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s05.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.56"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3502"></a>Boost 1.56</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Bugfix: no_transition in case of an exception.</p></li><li class="listitem"><p>Bugfix: Trac 9280</p></li><li class="listitem"><p>Bugfix: incomplete namespace names in eUML</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> </td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch08s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Boost 1.57 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Boost 1.55</td></tr></table></div></body></html>
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Boost 1.55</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s04.html" title="Boost 1.56"><link rel="next" href="ch08s06.html" title="Boost 1.54"></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">Boost 1.55</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s04.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s06.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.55"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3514"></a>Boost 1.55</h2></div></div></div><p>
|
||||
<title>Boost 1.55</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s04.html" title="Boost 1.56"><link rel="next" href="ch08s06.html" title="Boost 1.54"></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">Boost 1.55</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s04.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s06.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.55"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3518"></a>Boost 1.55</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>New feature: interrupt states now support a sequence of events to
|
||||
end the interruption</p></li><li class="listitem"><p>Bugfix: Trac 8686.</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="ch08s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch08s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Boost 1.56 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Boost 1.54</td></tr></table></div></body></html>
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Boost 1.54</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s05.html" title="Boost 1.55"><link rel="next" href="ch08s07.html" title="From V2.23 to V2.24 (Boost 1.51)"></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">Boost 1.54</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s05.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s07.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.54"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3527"></a>Boost 1.54</h2></div></div></div><p>
|
||||
<title>Boost 1.54</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s05.html" title="Boost 1.55"><link rel="next" href="ch08s07.html" title="From V2.23 to V2.24 (Boost 1.51)"></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">Boost 1.54</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s05.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s07.html">Next</a></td></tr></table><hr></div><div class="sect1" title="Boost 1.54"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3531"></a>Boost 1.54</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Bugfix: Exit points broken for the favor_compile_time
|
||||
policy.</p></li><li class="listitem"><p>Bugfix: copy breaks exit points of subsubmachines.</p></li><li class="listitem"><p>Bugfix: Trac 8046.</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="ch08s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch08.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch08s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Boost 1.55 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> From V2.23 to V2.24 (Boost 1.51)</td></tr></table></div></body></html>
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>From V2.23 to V2.24 (Boost 1.51)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s06.html" title="Boost 1.54"><link rel="next" href="ch08s08.html" title="From V2.22 to V2.23 (Boost 1.50)"></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.23 to V2.24 (Boost 1.51)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s06.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s08.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.23 to V2.24 (Boost 1.51)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3543"></a>From V2.23 to V2.24 (Boost 1.51)</h2></div></div></div><p>
|
||||
<title>From V2.23 to V2.24 (Boost 1.51)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s06.html" title="Boost 1.54"><link rel="next" href="ch08s08.html" title="From V2.22 to V2.23 (Boost 1.50)"></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.23 to V2.24 (Boost 1.51)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s06.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s08.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.23 to V2.24 (Boost 1.51)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3547"></a>From V2.23 to V2.24 (Boost 1.51)</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="ch03s03.html#any-event">boost::any</a></strong></span>
|
||||
or <span class="command"><strong><a class="command" href="ch03s05.html#kleene-event">kleene</a></strong></span> as an
|
||||
acceptable event.</p></li><li class="listitem"><p>Bugfix: compiler error with fsm internal table and
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>From V2.22 to V2.23 (Boost 1.50)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s07.html" title="From V2.23 to V2.24 (Boost 1.51)"><link rel="next" href="ch08s09.html" title="From V2.21 to V2.22 (Boost 1.48)"></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.22 to V2.23 (Boost 1.50)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s07.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s09.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.22 to V2.23 (Boost 1.50)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3571"></a>From V2.22 to V2.23 (Boost 1.50)</h2></div></div></div><p>
|
||||
<title>From V2.22 to V2.23 (Boost 1.50)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s07.html" title="From V2.23 to V2.24 (Boost 1.51)"><link rel="next" href="ch08s09.html" title="From V2.21 to V2.22 (Boost 1.48)"></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.22 to V2.23 (Boost 1.50)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s07.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s09.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.22 to V2.23 (Boost 1.50)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3575"></a>From V2.22 to V2.23 (Boost 1.50)</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> <span class="command"><strong><a class="command" href="ch03s05.html#eUML-composite-table">eUML</a></strong></span> : better syntax
|
||||
for front-ends defined with eUML as transititon table only. Caution:
|
||||
Breaking Change!</p></li><li class="listitem"><p>Bugfix: graph building was only working if
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>From V2.21 to V2.22 (Boost 1.48)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s08.html" title="From V2.22 to V2.23 (Boost 1.50)"><link rel="next" href="ch08s10.html" title="From V2.20 to V2.21 (Boost 1.47)"></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.21 to V2.22 (Boost 1.48)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s08.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s10.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.21 to V2.22 (Boost 1.48)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3608"></a>From V2.21 to V2.22 (Boost 1.48)</h2></div></div></div><p>
|
||||
<title>From V2.21 to V2.22 (Boost 1.48)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s08.html" title="From V2.22 to V2.23 (Boost 1.50)"><link rel="next" href="ch08s10.html" title="From V2.20 to V2.21 (Boost 1.47)"></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.21 to V2.22 (Boost 1.48)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s08.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s10.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.21 to V2.22 (Boost 1.48)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3612"></a>From V2.21 to V2.22 (Boost 1.48)</h2></div></div></div><p>
|
||||
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>eUML: added easier event reprocessing:
|
||||
<code class="code">process(event_)</code> and <code class="code">reprocess()</code></p></li><li class="listitem"><p>Rewrite of internal transition tables. There were a few bugs
|
||||
(failing recursivity in internal transition tables of sub-sub
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>From V2.20 to V2.21 (Boost 1.47)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s09.html" title="From V2.21 to V2.22 (Boost 1.48)"><link rel="next" href="ch08s11.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">From V2.20 to V2.21 (Boost 1.47)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s09.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s11.html">Next</a></td></tr></table><hr></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="d0e3656"></a>From V2.20 to V2.21 (Boost 1.47)</h2></div></div></div><p>
|
||||
<title>From V2.20 to V2.21 (Boost 1.47)</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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s09.html" title="From V2.21 to V2.22 (Boost 1.48)"><link rel="next" href="ch08s11.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">From V2.20 to V2.21 (Boost 1.47)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s09.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s11.html">Next</a></td></tr></table><hr></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="d0e3660"></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="ch03s06.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="ch03s05.html#eUML-phoenix">Added partial support for
|
||||
Boost.Phoenix functors in eUML</a></strong></span></p></li><li class="listitem"><p>Added the possibility to choose when <span class="command"><strong><a class="command" href="ch03s06.html#backend-state-switch">state switching</a></strong></span>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s10.html" title="From V2.20 to V2.21 (Boost 1.47)"><link rel="next" href="ch08s12.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="ch08s10.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s12.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.12 to V2.20 (Boost 1.46)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3704"></a>From V2.12 to V2.20 (Boost 1.46)</h2></div></div></div><p>
|
||||
<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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s10.html" title="From V2.20 to V2.21 (Boost 1.47)"><link rel="next" href="ch08s12.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="ch08s10.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s12.html">Next</a></td></tr></table><hr></div><div class="sect1" title="From V2.12 to V2.20 (Boost 1.46)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3708"></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="ch03s06.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="ch03s06.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="ch03s06.html#backend-boost-parameter">Boost.Parameter interface definition</a></strong></span> for
|
||||
msm::back::state_machine<> template arguments.</p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s06.html#backend-queues">Possibility to provide a
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s11.html" title="From V2.12 to V2.20 (Boost 1.46)"><link rel="next" href="ch08s13.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="ch08s11.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s13.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="d0e3762"></a>From V2.10 to V2.12 (Boost 1.45)</h2></div></div></div><p>
|
||||
<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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s11.html" title="From V2.12 to V2.20 (Boost 1.46)"><link rel="next" href="ch08s13.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="ch08s11.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <a accesskey="n" href="ch08s13.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="d0e3766"></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="ch03s06.html#back-end-serialization">serialization</a></strong></span></p></li><li class="listitem"><p><span class="command"><strong><a class="command" href="ch03s05.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="ch03s06.html#backend-fsm-constructor-args">New constructors</a></strong></span> where substates / submachines can be taken as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s12.html" title="From V2.10 to V2.12 (Boost 1.45)"><link rel="next" href="pt02.html" title="Part II. 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="ch08s12.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <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="d0e3787"></a>From V2.0 to V2.12 (Boost 1.44)</h2></div></div></div><p>
|
||||
<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)"><link rel="up" href="ch08.html" title="Chapter 8. Version history"><link rel="prev" href="ch08s12.html" title="From V2.10 to V2.12 (Boost 1.45)"><link rel="next" href="pt02.html" title="Part II. 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="ch08s12.html">Prev</a> </td><th width="60%" align="center">Chapter 8. Version history</th><td width="20%" align="right"> <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="d0e3791"></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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 9. External references to MSM</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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="pt02.html" title="Part II. Reference"><link rel="next" href="ch10.html" title="Chapter 10. 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">Chapter 9. External references to MSM</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt02.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="ch10.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 9. External references to MSM"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3824"></a>Chapter 9. External references to MSM</h2></div></div></div><p>An interesting mapping UML <-> MSM from Takatoshi Kondo can be found at
|
||||
<title>Chapter 9. External references to MSM</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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="pt02.html" title="Part II. Reference"><link rel="next" href="ch10.html" title="Chapter 10. 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">Chapter 9. External references to MSM</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt02.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="ch10.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 9. External references to MSM"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3828"></a>Chapter 9. External references to MSM</h2></div></div></div><p>An interesting mapping UML <-> MSM from Takatoshi Kondo can be found at
|
||||
<span class="command"><strong><a class="command" href="http://redboltz.wikidot.com/boost-msm-guide" target="_top">Redboltz</a></strong></span>.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pt02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch10.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. eUML operators and basic helpers</td></tr></table></div></body></html>
|
||||
@@ -1,7 +1,7 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 10. 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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="ch09.html" title="Chapter 9. External references to MSM"><link rel="next" href="ch11.html" title="Chapter 11. 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 10. eUML operators and basic helpers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="ch11.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 10. eUML operators and basic helpers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3832"></a>Chapter 10. 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="d0e3839"></a><p class="title"><b>Table 10.1. 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>&&</td><td>Calls lazily Action1&& 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>></td><td>Calls lazily Action1 > Action2</td><td>Greater_</td></tr><tr><td>>=</td><td>Calls lazily Action1 >= Action2</td><td>Greater_Equal_</td></tr><tr><td><</td><td>Calls lazily Action1 < Action2</td><td>Less_</td></tr><tr><td><=</td><td>Calls lazily Action1 <= Action2</td><td>Less_Equal_</td></tr><tr><td>&</td><td>Calls lazily Action1 & 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>>></td><td>Calls lazily Action1 >> Action2</td><td>ShiftRight_</td></tr><tr><td>>>=</td><td>Calls lazily Action1 >>= Action2</td><td>ShiftRight_Assign_</td></tr><tr><td><<</td><td>Calls lazily Action1 << Action2</td><td>ShiftLeft_</td></tr><tr><td><<=</td><td>Calls lazily Action1 <<= 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 Action1 or the result of
|
||||
<title>Chapter 10. 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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="ch09.html" title="Chapter 9. External references to MSM"><link rel="next" href="ch11.html" title="Chapter 11. 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 10. eUML operators and basic helpers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="ch11.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 10. eUML operators and basic helpers"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3836"></a>Chapter 10. 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="d0e3843"></a><p class="title"><b>Table 10.1. 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>&&</td><td>Calls lazily Action1&& 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>></td><td>Calls lazily Action1 > Action2</td><td>Greater_</td></tr><tr><td>>=</td><td>Calls lazily Action1 >= Action2</td><td>Greater_Equal_</td></tr><tr><td><</td><td>Calls lazily Action1 < Action2</td><td>Less_</td></tr><tr><td><=</td><td>Calls lazily Action1 <= Action2</td><td>Less_Equal_</td></tr><tr><td>&</td><td>Calls lazily Action1 & 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>>></td><td>Calls lazily Action1 >> Action2</td><td>ShiftRight_</td></tr><tr><td>>>=</td><td>Calls lazily Action1 >>= Action2</td><td>ShiftRight_Assign_</td></tr><tr><td><<</td><td>Calls lazily Action1 << Action2</td><td>ShiftLeft_</td></tr><tr><td><<=</td><td>Calls lazily Action1 <<= 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 Action1 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
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Chapter 11. 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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="ch10.html" title="Chapter 10. 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 11.
|
||||
Functional programming </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch10.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="re01.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 11. Functional programming"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4176"></a>Chapter 11.
|
||||
Functional programming </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch10.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="re01.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 11. Functional programming"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4180"></a>Chapter 11.
|
||||
<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 <msm/front/euml/stl.hpp></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="d0e4194"></a><p class="title"><b>Table 11.1. 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ᵃ])</td><td>LowerBound_</td></tr><tr><td>upper_bound_(first, last, value [,opᵃ])</td><td>UpperBound_</td></tr><tr><td>equal_range_(first, last, value [,opᵃ])</td><td>EqualRange_</td></tr><tr><td>binary_search_(first, last, value [,opᵃ])</td><td>BinarySearch_</td></tr><tr><td>min_element_(first, last[,opᵃ])</td><td>MinElement_</td></tr><tr><td>max_element_(first, last[,opᵃ])</td><td>MaxElement_</td></tr><tr><td>adjacent_find_(first, last[,opᵃ])</td><td>AdjacentFind_</td></tr><tr><td>find_end_( first1, last1, first2, last2 [,op ᵃ])</td><td>FindEnd_</td></tr><tr><td>find_first_of_( first1, last1, first2, last2 [,op ᵃ])</td><td>FindFirstOf_</td></tr><tr><td>equal_( first1, last1, first2 [,op ᵃ])</td><td>Equal_</td></tr><tr><td>search_( first1, last1, first2, last2 [,op ᵃ])</td><td>Search_</td></tr><tr><td>includes_( first1, last1, first2, last2 [,op ᵃ])</td><td>Includes_</td></tr><tr><td>lexicographical_compare_ ( first1, last1, first2, last2 [,op
|
||||
</p><div class="table"><a name="d0e4198"></a><p class="title"><b>Table 11.1. 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ᵃ])</td><td>LowerBound_</td></tr><tr><td>upper_bound_(first, last, value [,opᵃ])</td><td>UpperBound_</td></tr><tr><td>equal_range_(first, last, value [,opᵃ])</td><td>EqualRange_</td></tr><tr><td>binary_search_(first, last, value [,opᵃ])</td><td>BinarySearch_</td></tr><tr><td>min_element_(first, last[,opᵃ])</td><td>MinElement_</td></tr><tr><td>max_element_(first, last[,opᵃ])</td><td>MaxElement_</td></tr><tr><td>adjacent_find_(first, last[,opᵃ])</td><td>AdjacentFind_</td></tr><tr><td>find_end_( first1, last1, first2, last2 [,op ᵃ])</td><td>FindEnd_</td></tr><tr><td>find_first_of_( first1, last1, first2, last2 [,op ᵃ])</td><td>FindFirstOf_</td></tr><tr><td>equal_( first1, last1, first2 [,op ᵃ])</td><td>Equal_</td></tr><tr><td>search_( first1, last1, first2, last2 [,op ᵃ])</td><td>Search_</td></tr><tr><td>includes_( first1, last1, first2, last2 [,op ᵃ])</td><td>Includes_</td></tr><tr><td>lexicographical_compare_ ( first1, last1, first2, last2 [,op
|
||||
ᵃ]) </td><td>LexicographicalCompare_</td></tr><tr><td>count_(first, last, value [,size])</td><td>Count_</td></tr><tr><td>count_if_(first, last, op ᵃ [,size])</td><td>CountIf_</td></tr><tr><td>distance_(first, last)</td><td>Distance_</td></tr><tr><td>mismatch _( first1, last1, first2 [,op ᵃ])</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="d0e4307"></a><p class="title"><b>Table 11.2. 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ᵃ)</td><td>ForEach_</td></tr><tr><td>accumulate_first, last, init [,opᵃ])</td><td>Accumulate_</td></tr></tbody></table></div></div><p><br class="table-break">
|
||||
</p><div class="table"><a name="d0e4311"></a><p class="title"><b>Table 11.2. 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ᵃ)</td><td>ForEach_</td></tr><tr><td>accumulate_first, last, init [,opᵃ])</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="d0e4335"></a><p class="title"><b>Table 11.3. 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ᵃ)</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ᵃ)</td><td>RemoveCopyIf_</td></tr><tr><td>fill_(first, last, value)</td><td>Fill_</td></tr><tr><td>fill_n_(first, size, value)ᵇ</td><td>FillN_</td></tr><tr><td>generate_(first, last, generatorᵃ)</td><td>Generate_</td></tr><tr><td>generate_(first, size, generatorᵃ)ᵇ</td><td>GenerateN_</td></tr><tr><td>unique_(first, last [,opᵃ])</td><td>Unique_</td></tr><tr><td>unique_copy_(first, last, output [,opᵃ])</td><td>UniqueCopy_</td></tr><tr><td>random_shuffle_(first, last [,opᵃ])</td><td>RandomShuffle_</td></tr><tr><td>rotate_copy_(first, middle, last, output)</td><td>RotateCopy_</td></tr><tr><td>partition_ (first, last [,opᵃ])</td><td>Partition_</td></tr><tr><td>stable_partition_ (first, last [,opᵃ])</td><td>StablePartition_</td></tr><tr><td>stable_sort_(first, last [,opᵃ])</td><td>StableSort_</td></tr><tr><td>sort_(first, last [,opᵃ])</td><td>Sort_</td></tr><tr><td>partial_sort_(first, middle, last [,opᵃ])</td><td>PartialSort_</td></tr><tr><td>partial_sort_copy_ (first, last, res_first, res_last [,opᵃ]) </td><td>PartialSortCopy_</td></tr><tr><td>nth_element_(first, nth, last [,opᵃ])</td><td>NthElement_</td></tr><tr><td>merge_( first1, last1, first2, last2, output [,op ᵃ])</td><td>Merge_</td></tr><tr><td>inplace_merge_(first, middle, last [,opᵃ])</td><td>InplaceMerge_</td></tr><tr><td>set_union_(first1, last1, first2, last2, output [,op
|
||||
</p><div class="table"><a name="d0e4339"></a><p class="title"><b>Table 11.3. 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ᵃ)</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ᵃ)</td><td>RemoveCopyIf_</td></tr><tr><td>fill_(first, last, value)</td><td>Fill_</td></tr><tr><td>fill_n_(first, size, value)ᵇ</td><td>FillN_</td></tr><tr><td>generate_(first, last, generatorᵃ)</td><td>Generate_</td></tr><tr><td>generate_(first, size, generatorᵃ)ᵇ</td><td>GenerateN_</td></tr><tr><td>unique_(first, last [,opᵃ])</td><td>Unique_</td></tr><tr><td>unique_copy_(first, last, output [,opᵃ])</td><td>UniqueCopy_</td></tr><tr><td>random_shuffle_(first, last [,opᵃ])</td><td>RandomShuffle_</td></tr><tr><td>rotate_copy_(first, middle, last, output)</td><td>RotateCopy_</td></tr><tr><td>partition_ (first, last [,opᵃ])</td><td>Partition_</td></tr><tr><td>stable_partition_ (first, last [,opᵃ])</td><td>StablePartition_</td></tr><tr><td>stable_sort_(first, last [,opᵃ])</td><td>StableSort_</td></tr><tr><td>sort_(first, last [,opᵃ])</td><td>Sort_</td></tr><tr><td>partial_sort_(first, middle, last [,opᵃ])</td><td>PartialSort_</td></tr><tr><td>partial_sort_copy_ (first, last, res_first, res_last [,opᵃ]) </td><td>PartialSortCopy_</td></tr><tr><td>nth_element_(first, nth, last [,opᵃ])</td><td>NthElement_</td></tr><tr><td>merge_( first1, last1, first2, last2, output [,op ᵃ])</td><td>Merge_</td></tr><tr><td>inplace_merge_(first, middle, last [,opᵃ])</td><td>InplaceMerge_</td></tr><tr><td>set_union_(first1, last1, first2, last2, output [,op
|
||||
ᵃ])</td><td>SetUnion_</td></tr><tr><td>push_heap_(first, last [,op ᵃ])</td><td>PushHeap_</td></tr><tr><td>pop_heap_(first, last [,op ᵃ])</td><td>PopHeap_</td></tr><tr><td>make_heap_(first, last [,op ᵃ])</td><td>MakeHeap_</td></tr><tr><td>sort_heap_(first, last [,op ᵃ])</td><td>SortHeap_</td></tr><tr><td>next_permutation_(first, last [,op ᵃ])</td><td>NextPermutation_</td></tr><tr><td>prev_permutation_(first, last [,op ᵃ])</td><td>PrevPermutation_</td></tr><tr><td>inner_product_(first1, last1, first2, init [,op1ᵃ] [,op2ᵃ]) </td><td>InnerProduct_</td></tr><tr><td>partial_sum_(first, last, output [,opᵃ])</td><td>PartialSum_</td></tr><tr><td>adjacent_difference_(first, last, output [,opᵃ])</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ᵃ, 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ᵃ, new_value)</td><td>ReplaceCopyIf_</td></tr><tr><td>rotate_(first, middle, last)ᵇ</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="d0e4553"></a><p class="title"><b>Table 11.4. 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, value)</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="d0e4557"></a><p class="title"><b>Table 11.4. 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, value)</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="d0e4684"></a><p class="title"><b>Table 11.5. 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ᵃ)</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ᵃ)</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="d0e4688"></a><p class="title"><b>Table 11.5. 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ᵃ)</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ᵃ)</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ᵃ)</td><td>ListUnique_</td></tr><tr><td>void list_sort_(container)</td><td>ListSort_</td></tr><tr><td>void list_sort_(container, opᵃ)</td><td>ListSort_</td></tr></tbody></table></div></div><p><br class="table-break">
|
||||
</p><p>
|
||||
</p><div class="table"><a name="d0e4760"></a><p class="title"><b>Table 11.6. 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<iterator, bool> 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><td>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<iterator, iterator> associative_equal_range_(
|
||||
</p><div class="table"><a name="d0e4764"></a><p class="title"><b>Table 11.6. 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<iterator, bool> 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><td>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<iterator, iterator> 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="d0e4831"></a><p class="title"><b>Table 11.7. 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<T1, T2>)</td><td>First_</td></tr><tr><td>second_type second_(pair<T1, T2>)</td><td>Second_</td></tr></tbody></table></div></div><p><br class="table-break">
|
||||
</p><div class="table"><a name="d0e4835"></a><p class="title"><b>Table 11.7. 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<T1, T2>)</td><td>First_</td></tr><tr><td>second_type second_(pair<T1, T2>)</td><td>Second_</td></tr></tbody></table></div></div><p><br class="table-break">
|
||||
</p><p>
|
||||
</p><div class="table"><a name="d0e4857"></a><p class="title"><b>Table 11.8. 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="d0e4861"></a><p class="title"><b>Table 11.8. 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& append(const string&)</td><td>string& append_(container, another_string)</td><td>Append_</td></tr><tr><td>string& append (charT*)</td><td>string& append_(container, another_string)</td><td>Append_</td></tr><tr><td>string& append (string , size_type pos, size_type
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace msm = boost::msm;
|
||||
|
||||
struct MenuMode_ : public msm::front::state_machine_def<MenuMode_>
|
||||
{
|
||||
typedef mpl::vector1<MenuActive> flag_list;
|
||||
typedef boost::mpl::vector1<MenuActive> flag_list;
|
||||
struct WaitingForSongChoice : public msm::front::state<>
|
||||
{
|
||||
template <class Event,class FSM>
|
||||
@@ -49,7 +49,7 @@ struct MenuMode_ : public msm::front::state_machine_def<MenuMode_>
|
||||
typedef WaitingForSongChoice initial_state;
|
||||
typedef MenuMode_ fsm; // makes transition table cleaner
|
||||
// Transition table for player
|
||||
struct transition_table : mpl::vector2<
|
||||
struct transition_table : boost::mpl::vector2<
|
||||
// Start Event Next Action Guard
|
||||
// +---------------------+------------------+-------------------+---------------------+----------------------+
|
||||
_row < WaitingForSongChoice , MenuMiddleButton , StartCurrentSong >,
|
||||
|
||||
@@ -110,7 +110,7 @@ struct PlayingMode_ : public msm::front::state_machine_def<PlayingMode_>
|
||||
};
|
||||
struct SetPosition : public msm::front::state<>
|
||||
{
|
||||
typedef mpl::vector1<NoFastFwd> flag_list;
|
||||
typedef boost::mpl::vector1<NoFastFwd> flag_list;
|
||||
template <class Event,class FSM>
|
||||
void on_entry(Event const&,FSM& ) {std::cout << "starting: PlayingMode::SetPosition" << std::endl;}
|
||||
template <class Event,class FSM>
|
||||
@@ -204,11 +204,11 @@ struct PlayingMode_ : public msm::front::state_machine_def<PlayingMode_>
|
||||
}
|
||||
};
|
||||
// initial states / orthogonal zones
|
||||
typedef mpl::vector5<Playing,WaitingForNextPrev,WaitingForEnd,NoForward,StdDisplay>
|
||||
typedef boost::mpl::vector5<Playing,WaitingForNextPrev,WaitingForEnd,NoForward,StdDisplay>
|
||||
initial_state;
|
||||
typedef PlayingMode_ fsm; // makes transition table cleaner
|
||||
// Transition table for player
|
||||
struct transition_table : mpl::vector19<
|
||||
struct transition_table : boost::mpl::vector19<
|
||||
// Start Event Next Action Guard
|
||||
// +--------------------+---------------------+--------------------+--------------------------+----------------------+
|
||||
_row < Playing , PlayPause , Paused >,
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace // Concrete FSM implementation
|
||||
};
|
||||
|
||||
// the initial state of the player SM. Must be defined
|
||||
typedef mpl::vector5<NotHolding,NotPlaying,NoMenuMode,NoOnOffButton,CheckMiddleButton>
|
||||
typedef boost::mpl::vector5<NotHolding,NotPlaying,NoMenuMode,NoOnOffButton,CheckMiddleButton>
|
||||
initial_state;
|
||||
// transition actions
|
||||
void send_ActivateMenu(EndPlay const&)
|
||||
@@ -142,7 +142,7 @@ namespace // Concrete FSM implementation
|
||||
typedef iPod_ fsm; // makes transition table cleaner
|
||||
|
||||
// Transition table for player
|
||||
struct transition_table : mpl::vector<
|
||||
struct transition_table : boost::mpl::vector<
|
||||
// Start Event Next Action Guard
|
||||
// +-------------------+---------------+-------------------+--------------------------------+----------------------+
|
||||
_row < NotHolding , Hold , Holding >,
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
Attributes / Function call</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e1906">Orthogonal regions, flags, event deferring</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2018">
|
||||
Customizing a state machine / Getting
|
||||
more speed</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2053">Completion / Anonymous transitions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2071">Internal transitions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2102">Kleene(any) event)</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2117">Other state types</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2181">Helper functions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2284">Phoenix-like STL support</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2337">Writing actions with Boost.Phoenix (in development)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s06.html">Back-end</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s06.html#d0e2396">Creation </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2405">Starting and stopping a state
|
||||
machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2424">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2433">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2447">Upper State Machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2452">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2505">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2531">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2574">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2587">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2600"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2640">Trading run-time speed for
|
||||
better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2722">Compile-time state machine analysis </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2766"> Enqueueing events for later
|
||||
processing </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2789"> Customizing the message queues </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2804">Policy definition with Boost.Parameter </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2812">Choosing when to switch active
|
||||
states </a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Performance / Compilers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#d0e2893">Speed</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Executable size</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Supported compilers</a></span></dt><dt><span class="sect1"><a href="ch04s04.html"> Limitations </a></span></dt><dt><span class="sect1"><a href="ch04s05.html"> Compilers corner </a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. Questions & Answers, tips</a></span></dt><dt><span class="chapter"><a href="ch06.html">6. Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e3111">Backend: Run To Completion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
|
||||
interface</a></span></dt><dt><span class="sect1"><a href="ch06s03.html"> Generated state ids </a></span></dt><dt><span class="sect1"><a href="ch06s04.html">Metaprogramming tools</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch07.html">7. Acknowledgements</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch07.html#d0e3406">MSM v2</a></span></dt><dt><span class="sect1"><a href="ch07s02.html"> MSM v1</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch08.html">8. Version history</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch08.html#d0e3453">Boost 1.85</a></span></dt><dt><span class="sect1"><a href="ch08s02.html">Boost 1.72</a></span></dt><dt><span class="sect1"><a href="ch08s03.html">Boost 1.57</a></span></dt><dt><span class="sect1"><a href="ch08s04.html">Boost 1.56</a></span></dt><dt><span class="sect1"><a href="ch08s05.html">Boost 1.55</a></span></dt><dt><span class="sect1"><a href="ch08s06.html">Boost 1.54</a></span></dt><dt><span class="sect1"><a href="ch08s07.html">From V2.23 to V2.24 (Boost 1.51)</a></span></dt><dt><span class="sect1"><a href="ch08s08.html">From V2.22 to V2.23 (Boost 1.50)</a></span></dt><dt><span class="sect1"><a href="ch08s09.html">From V2.21 to V2.22 (Boost 1.48)</a></span></dt><dt><span class="sect1"><a href="ch08s10.html">From V2.20 to V2.21 (Boost 1.47)</a></span></dt><dt><span class="sect1"><a href="ch08s11.html">From V2.12 to V2.20 (Boost 1.46)</a></span></dt><dt><span class="sect1"><a href="ch08s12.html">From V2.10 to V2.12 (Boost 1.45)</a></span></dt><dt><span class="sect1"><a href="ch08s13.html">From V2.0 to V2.12 (Boost 1.44)</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="pt02.html">II. Reference</a></span></dt><dd><dl><dt><span class="chapter"><a href="ch09.html">9. External references to MSM</a></span></dt><dt><span class="chapter"><a href="ch10.html">10. eUML operators and basic helpers</a></span></dt><dt><span class="chapter"><a href="ch11.html">11.
|
||||
Functional programming </a></span></dt><dt><span class="refentrytitle"><a href="re01.html">Common headers</a></span><span class="refpurpose"> — The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle"><a href="re02.html">Back-end</a></span><span class="refpurpose"> — The back-end headers</span></dt><dt><span class="refentrytitle"><a href="re03.html">Front-end</a></span><span class="refpurpose"> — The front-end headers</span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>10.1. <a href="ch10.html#d0e3839">Operators and state machine helpers</a></dt><dt>11.1. <a href="ch11.html#d0e4194">STL algorithms</a></dt><dt>11.2. <a href="ch11.html#d0e4307">STL algorithms</a></dt><dt>11.3. <a href="ch11.html#d0e4335">STL algorithms</a></dt><dt>11.4. <a href="ch11.html#d0e4553">STL container methods</a></dt><dt>11.5. <a href="ch11.html#d0e4684">STL list methods</a></dt><dt>11.6. <a href="ch11.html#d0e4760">STL associative container methods </a></dt><dt>11.7. <a href="ch11.html#d0e4831">STL pair</a></dt><dt>11.8. <a href="ch11.html#d0e4857">STL string</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Preface</td></tr></table></div></body></html>
|
||||
machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2424">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2433">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2447">Upper State Machine (msm::back11 only)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2452">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2505">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2531">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2574">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2587">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2600"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2640">Trading run-time speed for
|
||||
better compile-time / multi-TU compilation (msm::back only)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2726">Compile-time state machine analysis </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2770"> Enqueueing events for later
|
||||
processing </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2793"> Customizing the message queues </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2808">Policy definition with Boost.Parameter </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2816">Choosing when to switch active
|
||||
states </a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Performance / Compilers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#d0e2897">Speed</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Executable size</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Supported compilers</a></span></dt><dt><span class="sect1"><a href="ch04s04.html"> Limitations </a></span></dt><dt><span class="sect1"><a href="ch04s05.html"> Compilers corner </a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. Questions & Answers, tips</a></span></dt><dt><span class="chapter"><a href="ch06.html">6. Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e3115">Backend: Run To Completion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
|
||||
interface</a></span></dt><dt><span class="sect1"><a href="ch06s03.html"> Generated state ids </a></span></dt><dt><span class="sect1"><a href="ch06s04.html">Metaprogramming tools</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch07.html">7. Acknowledgements</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch07.html#d0e3410">MSM v2</a></span></dt><dt><span class="sect1"><a href="ch07s02.html"> MSM v1</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch08.html">8. Version history</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch08.html#d0e3457">Boost 1.85</a></span></dt><dt><span class="sect1"><a href="ch08s02.html">Boost 1.72</a></span></dt><dt><span class="sect1"><a href="ch08s03.html">Boost 1.57</a></span></dt><dt><span class="sect1"><a href="ch08s04.html">Boost 1.56</a></span></dt><dt><span class="sect1"><a href="ch08s05.html">Boost 1.55</a></span></dt><dt><span class="sect1"><a href="ch08s06.html">Boost 1.54</a></span></dt><dt><span class="sect1"><a href="ch08s07.html">From V2.23 to V2.24 (Boost 1.51)</a></span></dt><dt><span class="sect1"><a href="ch08s08.html">From V2.22 to V2.23 (Boost 1.50)</a></span></dt><dt><span class="sect1"><a href="ch08s09.html">From V2.21 to V2.22 (Boost 1.48)</a></span></dt><dt><span class="sect1"><a href="ch08s10.html">From V2.20 to V2.21 (Boost 1.47)</a></span></dt><dt><span class="sect1"><a href="ch08s11.html">From V2.12 to V2.20 (Boost 1.46)</a></span></dt><dt><span class="sect1"><a href="ch08s12.html">From V2.10 to V2.12 (Boost 1.45)</a></span></dt><dt><span class="sect1"><a href="ch08s13.html">From V2.0 to V2.12 (Boost 1.44)</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="pt02.html">II. Reference</a></span></dt><dd><dl><dt><span class="chapter"><a href="ch09.html">9. External references to MSM</a></span></dt><dt><span class="chapter"><a href="ch10.html">10. eUML operators and basic helpers</a></span></dt><dt><span class="chapter"><a href="ch11.html">11.
|
||||
Functional programming </a></span></dt><dt><span class="refentrytitle"><a href="re01.html">Common headers</a></span><span class="refpurpose"> — The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle"><a href="re02.html">Back-end</a></span><span class="refpurpose"> — The back-end headers</span></dt><dt><span class="refentrytitle"><a href="re03.html">Front-end</a></span><span class="refpurpose"> — The front-end headers</span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>10.1. <a href="ch10.html#d0e3843">Operators and state machine helpers</a></dt><dt>11.1. <a href="ch11.html#d0e4198">STL algorithms</a></dt><dt>11.2. <a href="ch11.html#d0e4311">STL algorithms</a></dt><dt>11.3. <a href="ch11.html#d0e4339">STL algorithms</a></dt><dt>11.4. <a href="ch11.html#d0e4557">STL container methods</a></dt><dt>11.5. <a href="ch11.html#d0e4688">STL list methods</a></dt><dt>11.6. <a href="ch11.html#d0e4764">STL associative container methods </a></dt><dt>11.7. <a href="ch11.html#d0e4835">STL pair</a></dt><dt>11.8. <a href="ch11.html#d0e4861">STL string</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Preface</td></tr></table></div></body></html>
|
||||
@@ -8,8 +8,8 @@
|
||||
Attributes / Function call</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e1906">Orthogonal regions, flags, event deferring</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2018">
|
||||
Customizing a state machine / Getting
|
||||
more speed</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2053">Completion / Anonymous transitions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2071">Internal transitions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2102">Kleene(any) event)</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2117">Other state types</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2181">Helper functions</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2284">Phoenix-like STL support</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2337">Writing actions with Boost.Phoenix (in development)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s06.html">Back-end</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s06.html#d0e2396">Creation </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2405">Starting and stopping a state
|
||||
machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2424">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2433">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2447">Upper State Machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2452">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2505">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2531">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2574">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2587">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2600"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2640">Trading run-time speed for
|
||||
better compile-time / multi-TU compilation</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2722">Compile-time state machine analysis </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2766"> Enqueueing events for later
|
||||
processing </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2789"> Customizing the message queues </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2804">Policy definition with Boost.Parameter </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2812">Choosing when to switch active
|
||||
states </a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Performance / Compilers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#d0e2893">Speed</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Executable size</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Supported compilers</a></span></dt><dt><span class="sect1"><a href="ch04s04.html"> Limitations </a></span></dt><dt><span class="sect1"><a href="ch04s05.html"> Compilers corner </a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. Questions & Answers, tips</a></span></dt><dt><span class="chapter"><a href="ch06.html">6. Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e3111">Backend: Run To Completion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
|
||||
interface</a></span></dt><dt><span class="sect1"><a href="ch06s03.html"> Generated state ids </a></span></dt><dt><span class="sect1"><a href="ch06s04.html">Metaprogramming tools</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch07.html">7. Acknowledgements</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch07.html#d0e3406">MSM v2</a></span></dt><dt><span class="sect1"><a href="ch07s02.html"> MSM v1</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch08.html">8. Version history</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch08.html#d0e3453">Boost 1.85</a></span></dt><dt><span class="sect1"><a href="ch08s02.html">Boost 1.72</a></span></dt><dt><span class="sect1"><a href="ch08s03.html">Boost 1.57</a></span></dt><dt><span class="sect1"><a href="ch08s04.html">Boost 1.56</a></span></dt><dt><span class="sect1"><a href="ch08s05.html">Boost 1.55</a></span></dt><dt><span class="sect1"><a href="ch08s06.html">Boost 1.54</a></span></dt><dt><span class="sect1"><a href="ch08s07.html">From V2.23 to V2.24 (Boost 1.51)</a></span></dt><dt><span class="sect1"><a href="ch08s08.html">From V2.22 to V2.23 (Boost 1.50)</a></span></dt><dt><span class="sect1"><a href="ch08s09.html">From V2.21 to V2.22 (Boost 1.48)</a></span></dt><dt><span class="sect1"><a href="ch08s10.html">From V2.20 to V2.21 (Boost 1.47)</a></span></dt><dt><span class="sect1"><a href="ch08s11.html">From V2.12 to V2.20 (Boost 1.46)</a></span></dt><dt><span class="sect1"><a href="ch08s12.html">From V2.10 to V2.12 (Boost 1.45)</a></span></dt><dt><span class="sect1"><a href="ch08s13.html">From V2.0 to V2.12 (Boost 1.44)</a></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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Founding idea</td></tr></table></div></body></html>
|
||||
machine</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2424">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2433">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2447">Upper State Machine (msm::back11 only)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2452">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2505">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2531">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2574">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2587">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2600"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2640">Trading run-time speed for
|
||||
better compile-time / multi-TU compilation (msm::back only)</a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2726">Compile-time state machine analysis </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2770"> Enqueueing events for later
|
||||
processing </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2793"> Customizing the message queues </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2808">Policy definition with Boost.Parameter </a></span></dt><dt><span class="sect2"><a href="ch03s06.html#d0e2816">Choosing when to switch active
|
||||
states </a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Performance / Compilers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#d0e2897">Speed</a></span></dt><dt><span class="sect1"><a href="ch04s02.html">Executable size</a></span></dt><dt><span class="sect1"><a href="ch04s03.html">Supported compilers</a></span></dt><dt><span class="sect1"><a href="ch04s04.html"> Limitations </a></span></dt><dt><span class="sect1"><a href="ch04s05.html"> Compilers corner </a></span></dt></dl></dd><dt><span class="chapter"><a href="ch05.html">5. Questions & Answers, tips</a></span></dt><dt><span class="chapter"><a href="ch06.html">6. Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch06.html#d0e3115">Backend: Run To Completion</a></span></dt><dt><span class="sect1"><a href="ch06s02.html">Frontend / Backend
|
||||
interface</a></span></dt><dt><span class="sect1"><a href="ch06s03.html"> Generated state ids </a></span></dt><dt><span class="sect1"><a href="ch06s04.html">Metaprogramming tools</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch07.html">7. Acknowledgements</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch07.html#d0e3410">MSM v2</a></span></dt><dt><span class="sect1"><a href="ch07s02.html"> MSM v1</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch08.html">8. Version history</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch08.html#d0e3457">Boost 1.85</a></span></dt><dt><span class="sect1"><a href="ch08s02.html">Boost 1.72</a></span></dt><dt><span class="sect1"><a href="ch08s03.html">Boost 1.57</a></span></dt><dt><span class="sect1"><a href="ch08s04.html">Boost 1.56</a></span></dt><dt><span class="sect1"><a href="ch08s05.html">Boost 1.55</a></span></dt><dt><span class="sect1"><a href="ch08s06.html">Boost 1.54</a></span></dt><dt><span class="sect1"><a href="ch08s07.html">From V2.23 to V2.24 (Boost 1.51)</a></span></dt><dt><span class="sect1"><a href="ch08s08.html">From V2.22 to V2.23 (Boost 1.50)</a></span></dt><dt><span class="sect1"><a href="ch08s09.html">From V2.21 to V2.22 (Boost 1.48)</a></span></dt><dt><span class="sect1"><a href="ch08s10.html">From V2.20 to V2.21 (Boost 1.47)</a></span></dt><dt><span class="sect1"><a href="ch08s11.html">From V2.12 to V2.20 (Boost 1.46)</a></span></dt><dt><span class="sect1"><a href="ch08s12.html">From V2.10 to V2.12 (Boost 1.45)</a></span></dt><dt><span class="sect1"><a href="ch08s13.html">From V2.0 to V2.12 (Boost 1.44)</a></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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Founding idea</td></tr></table></div></body></html>
|
||||
@@ -1,4 +1,4 @@
|
||||
<html><head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Part II. 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)"><link rel="up" href="index.html" title="Meta State Machine (MSM)"><link rel="prev" href="ch08s13.html" title="From V2.0 to V2.12 (Boost 1.44)"><link rel="next" href="ch09.html" title="Chapter 9. External references to MSM"></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 II. Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s13.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch09.html">Next</a></td></tr></table><hr></div><div class="part" title="Part II. Reference"><div class="titlepage"><div><div><h1 class="title"><a name="d0e3820"></a>Part II. <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"><a href="ch09.html">9. External references to MSM</a></span></dt><dt><span class="chapter"><a href="ch10.html">10. eUML operators and basic helpers</a></span></dt><dt><span class="chapter"><a href="ch11.html">11.
|
||||
<title>Part II. 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)"><link rel="up" href="index.html" title="Meta State Machine (MSM)"><link rel="prev" href="ch08s13.html" title="From V2.0 to V2.12 (Boost 1.44)"><link rel="next" href="ch09.html" title="Chapter 9. External references to MSM"></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 II. Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch08s13.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch09.html">Next</a></td></tr></table><hr></div><div class="part" title="Part II. Reference"><div class="titlepage"><div><div><h1 class="title"><a name="d0e3824"></a>Part II. <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"><a href="ch09.html">9. External references to MSM</a></span></dt><dt><span class="chapter"><a href="ch10.html">10. eUML operators and basic helpers</a></span></dt><dt><span class="chapter"><a href="ch11.html">11.
|
||||
Functional programming </a></span></dt><dt><span class="refentrytitle"><a href="re01.html">Common headers</a></span><span class="refpurpose"> — The common types used by front- and back-ends</span></dt><dt><span class="refentrytitle"><a href="re02.html">Back-end</a></span><span class="refpurpose"> — The back-end headers</span></dt><dt><span class="refentrytitle"><a href="re03.html">Front-end</a></span><span class="refpurpose"> — 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="ch08s13.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <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) </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. External references to MSM</td></tr></table></div></body></html>
|
||||
@@ -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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="ch11.html" title="Chapter 11. 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="ch11.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="re02.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Common headers"><a name="d0e5299"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Common headers — The common types used by front- and back-ends</p></div><div class="refsect1" title="msm/common.hpp"><a name="d0e5305"></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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="ch11.html" title="Chapter 11. 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="ch11.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="re02.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Common headers"><a name="d0e5303"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Common headers — The common types used by front- and back-ends</p></div><div class="refsect1" title="msm/common.hpp"><a name="d0e5309"></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 <class Dummy> wrap{};</span></span> {<br>}</pre></div><div class="refsect1" title="msm/row_tags.hpp"><a name="d0e5314"></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 <class Dummy> wrap{};</span></span> {<br>}</pre></div><div class="refsect1" title="msm/row_tags.hpp"><a name="d0e5318"></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="ch11.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="re02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11.
|
||||
Functional programming </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Back-end</td></tr></table></div></body></html>
|
||||
@@ -1,79 +1,85 @@
|
||||
<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)"><link rel="up" href="pt02.html" title="Part II. 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> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="re03.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Back-end"><a name="d0e5322"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Back-end — The back-end headers</p></div><div class="refsect1" title="msm/back/state_machine.hpp"><a name="d0e5328"></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)"><link rel="up" href="pt02.html" title="Part II. 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> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> <a accesskey="n" href="re03.html">Next</a></td></tr></table><hr></div><div class="refentry" title="Back-end"><a name="d0e5326"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Back-end — The back-end headers</p></div><div class="refsect1" title="msm/back/state_machine.hpp"><a name="d0e5332"></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 <class Derived,class HistoryPolicy=NoHistory,class
|
||||
CompilePolicy=favor_runtime_speed> state_machine</span></span> {<br>}</pre><div class="refsect2" title="Template arguments"><a name="d0e5337"></a><h3> Template arguments </h3><div class="refsect3" title="Derived"><a name="d0e5340"></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="d0e5345"></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="d0e5350"></a><h4> CompilePolicy </h4><p>The trade-off performance / compile-time. There are two predefined
|
||||
CompilePolicy=favor_runtime_speed> state_machine</span></span> {<br>}</pre><div class="refsect2" title="Template arguments"><a name="d0e5341"></a><h3> Template arguments </h3><div class="refsect3" title="Derived"><a name="d0e5344"></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="d0e5349"></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="d0e5354"></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="ch03s06.html#backend-tradeof-rt-ct">the backend</a>.</p></div></div><div class="refsect2" title="methods"><a name="d0e5358"></a><h3> methods </h3><div class="refsect3" title="start"><a name="d0e5361"></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="ch03s06.html#backend-tradeof-rt-ct">the backend</a>.</p></div></div><div class="refsect2" title="methods"><a name="d0e5362"></a><h3> methods </h3><div class="refsect3" title="start"><a name="d0e5365"></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="ch03s06.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="d0e5374"></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="ch03s06.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="d0e5378"></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 <class Event> HandledEnum
|
||||
process_event</span>(<span class="methodparam">Event const&</span>);</code></div><div class="refsect3" title="current_state"><a name="d0e5385"></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="d0e5395"></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&</span>);</code></div><div class="refsect3" title="current_state"><a name="d0e5389"></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="d0e5399"></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="d0e5406"></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="d0e5416"></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="d0e5410"></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="d0e5420"></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 <class State> State* get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state"><a name="d0e5426"></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 <class State> State* get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="get_state"><a name="d0e5430"></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 <class State> State& get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e5436"></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 <class State> State& get_state</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e5440"></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 <class Flag,class BinaryOp> bool
|
||||
is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="is_flag_active"><a name="d0e5449"></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 <class Flag> bool is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="visit_current_states"><a name="d0e5459"></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="d0e5453"></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 <class Flag> bool is_flag_active</span>(<span class="methodparam"></span>);</code></div><div class="refsect3" title="visit_current_states"><a name="d0e5463"></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="d0e5475"></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="d0e5479"></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="d0e5492"></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="d0e5496"></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_ << deferred_events</code>)</p><code class="methodsynopsis"><span class="methodname">template <class Event> void defer_event</span>(<span class="methodparam">Event const&</span>);</code></div></div><div class="refsect2" title="Types"><a name="d0e5512"></a><h3>Types</h3><div class="refsect3" title="nr_regions"><a name="d0e5515"></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="d0e5520"></a><h4>entry_pt</h4><p>This nested type provides the necessary typedef for entry point
|
||||
(<code class="code">configure_ << deferred_events</code>)</p><code class="methodsynopsis"><span class="methodname">template <class Event> void defer_event</span>(<span class="methodparam">Event const&</span>);</code></div></div><div class="refsect2" title="Types"><a name="d0e5516"></a><h3>Types</h3><div class="refsect3" title="nr_regions"><a name="d0e5519"></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="d0e5524"></a><h4>entry_pt</h4><p>This nested type provides the necessary typedef for entry point
|
||||
pseudostates.
|
||||
<code class="code">state_machine<...>::entry_pt<state_name></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> {<br>}</pre></div><div class="refsect3" title="exit_pt"><a name="d0e5532"></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> {<br>}</pre></div><div class="refsect3" title="exit_pt"><a name="d0e5536"></a><h4>exit_pt</h4><p>This nested type provides the necessary typedef for exit point
|
||||
pseudostates. <code class="code">state_machine<...>::exit_pt<state_name></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> {<br>}</pre></div><div class="refsect3" title="direct"><a name="d0e5544"></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> {<br>}</pre></div><div class="refsect3" title="direct"><a name="d0e5548"></a><h4>direct</h4><p>This nested type provides the necessary typedef for an explicit entry
|
||||
inside a submachine.
|
||||
<code class="code">state_machine<...>::direct<state_name></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> {<br>}</pre></div><div class="refsect3" title="stt"><a name="d0e5556"></a><h4>stt</h4><p>Calling state_machine<frontend>::stt returns a mpl::vector
|
||||
transition table.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">direct</span></span> {<br>}</pre></div><div class="refsect3" title="stt"><a name="d0e5560"></a><h4>stt</h4><p>Calling state_machine<frontend>::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="d0e5561"></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="d0e5566"></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="d0e5572"></a><h3>Every history policy must implement the following methods: </h3><div class="refsect3" title="set_initial_states"><a name="d0e5575"></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="msm/back11/state_machine.hpp"><a name="d0e5565"></a><h2>msm/back11/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 <class Derived, class UpperFsm = void, class
|
||||
HistoryPolicy=NoHistory,class CompilePolicy=favor_runtime_speed>
|
||||
state_machine</span></span> {<br>}</pre><div class="refsect2" title="Template arguments"><a name="d0e5574"></a><h3> Template arguments </h3><p>The arguments are the same as for msm::back, with one exception:</p><div class="refsect3" title="UpperFsm"><a name="d0e5579"></a><h4> UpperFsm </h4><p>The type of the upper state machine in case the current state machine
|
||||
is used as a submachine. Calling <code class="code">get_upper()</code> will then return it. This
|
||||
should be used to call <code class="code">process_event()</code> from within the
|
||||
submachine.</p></div></div></div><div class="refsect1" title="args.hpp"><a name="d0e5590"></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="d0e5595"></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="d0e5601"></a><h3>Every history policy must implement the following methods: </h3><div class="refsect3" title="set_initial_states"><a name="d0e5604"></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> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>int* const<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="history_exit"><a name="d0e5589"></a><h4> history_exit </h4><p>This method is called by msm::back::state_machine when the submachine
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="history_exit"><a name="d0e5618"></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> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>int* const<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="history_entry"><a name="d0e5603"></a><h4> history_entry </h4><p>This method is called by msm::back::state_machine when the submachine
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="history_entry"><a name="d0e5632"></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 <class Event> int* const history_exit(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>Event const&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="Out-of-the-box policies:"><a name="d0e5617"></a><h3>Out-of-the-box policies: </h3><div class="refsect3" title="NoHistory"><a name="d0e5620"></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"> </div></div></div></div><div class="refsect2" title="Out-of-the-box policies:"><a name="d0e5646"></a><h3>Out-of-the-box policies: </h3><div class="refsect3" title="NoHistory"><a name="d0e5649"></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="d0e5625"></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="d0e5654"></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="d0e5630"></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="d0e5635"></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="d0e5659"></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="d0e5664"></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="d0e5647"></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="d0e5676"></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="d0e5659"></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="d0e5688"></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< stt ></code>: generates the list of
|
||||
all states referenced by the transition table stt. If stt is a
|
||||
recursive table (generated by
|
||||
@@ -86,10 +92,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<fsm></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="d0e5686"></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="d0e5691"></a><h3>fill_state_names </h3><div class="refsect3" title="attributes"><a name="d0e5694"></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="d0e5715"></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="d0e5720"></a><h3>fill_state_names </h3><div class="refsect3" title="attributes"><a name="d0e5723"></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="d0e5705"></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="d0e5712"></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="d0e5734"></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="d0e5741"></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<Stt>::type all_states; //states
|
||||
@@ -104,9 +110,9 @@ for (unsigned int i=0;i<some_fsm::nr_regions::value;++i)
|
||||
std::cout << " -> "
|
||||
<< state_names[my_fsm_instance.current_state()[i]]
|
||||
<< std::endl;
|
||||
}</pre></div></div><div class="refsect2" title="get_state_name"><a name="d0e5719"></a><h3>get_state_name </h3><div class="refsect3" title="attributes"><a name="d0e5722"></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& 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="d0e5734"></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& name_to_fill,int state_id</span>(<span class="methodparam">string& name_to_fill,int state_id</span>);</code></div><div class="refsect3" title="usage"><a name="d0e5743"></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="d0e5748"></a><h3>get_state_name </h3><div class="refsect3" title="attributes"><a name="d0e5751"></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& 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="d0e5763"></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& name_to_fill,int state_id</span>(<span class="methodparam">string& name_to_fill,int state_id</span>);</code></div><div class="refsect3" title="usage"><a name="d0e5772"></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><pre class="programlisting">// we need a fsm's table
|
||||
typedef player::stt Stt;
|
||||
@@ -115,6 +121,6 @@ std::string name_of_open; // id of Open is 1
|
||||
// fill name_of_open for state of id 1
|
||||
boost::mpl::for_each<all_states,boost::msm::wrap<mpl::placeholders::_1> >
|
||||
(msm::back::get_state_name<Stt>(name_of_open,1));
|
||||
std::cout << "typeid-generated name Open is: " << name_of_open << std::endl;</pre></div></div><div class="refsect2" title="display_type"><a name="d0e5750"></a><h3>display_type </h3><div class="refsect3" title="attributes"><a name="d0e5753"></a><h4> attributes </h4><p>none</p></div><div class="refsect3" title="usage"><a name="d0e5758"></a><h4> usage</h4><p>Reusing the state list from the previous example, we can output all
|
||||
std::cout << "typeid-generated name Open is: " << name_of_open << std::endl;</pre></div></div><div class="refsect2" title="display_type"><a name="d0e5779"></a><h3>display_type </h3><div class="refsect3" title="attributes"><a name="d0e5782"></a><h4> attributes </h4><p>none</p></div><div class="refsect3" title="usage"><a name="d0e5787"></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<all_states,boost::msm::wrap<mpl::placeholders::_1>
|
||||
>(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> </td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="re03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Common headers </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Front-end</td></tr></table></div></body></html>
|
||||
@@ -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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="re02.html" title="Back-end"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Front-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re02.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="refentry" title="Front-end"><a name="d0e5766"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Front-end — The front-end headers</p></div><div class="refsect1" title="msm/front/common_states.hpp"><a name="d0e5772"></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="d0e5784"></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)"><link rel="up" href="pt02.html" title="Part II. Reference"><link rel="prev" href="re02.html" title="Back-end"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Front-end</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re02.html">Prev</a> </td><th width="60%" align="center">Part II. Reference</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="refentry" title="Front-end"><a name="d0e5795"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Front-end — The front-end headers</p></div><div class="refsect1" title="msm/front/common_states.hpp"><a name="d0e5801"></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="d0e5813"></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="d0e5802"></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="d0e5807"></a><h3>Row</h3><div class="refsect3" title="definition"><a name="d0e5810"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Source,class Event,class Target,class
|
||||
Action,class Guard> Row</span></span> {<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5817"></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="d0e5831"></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="d0e5836"></a><h3>Row</h3><div class="refsect3" title="definition"><a name="d0e5839"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Source,class Event,class Target,class
|
||||
Action,class Guard> Row</span></span> {<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5846"></a><h4>tags</h4><p>row_type_tag is defined differently for every specialization:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>all 5 template parameters means a normal transition with
|
||||
action and guard: <code class="code">typedef row_tag
|
||||
row_type_tag;</code></p></li><li class="listitem"><p>Row<Source,Event,Target,none,none> a normal transition
|
||||
without action or guard: <code class="code">typedef _row_tag
|
||||
@@ -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<Source,Event,none,none,none> an internal transition
|
||||
without action or guard: <code class="code">typedef _irow_tag
|
||||
row_type_tag;</code></p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5863"></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="d0e5892"></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> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>Fsm& fsm,Event const&
|
||||
evt,SourceState&,TargetState,AllStates&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="Internal"><a name="d0e5886"></a><h3>Internal</h3><div class="refsect3" title="definition"><a name="d0e5889"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Event,class Action,class Guard>
|
||||
Internal</span></span> {<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5896"></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"> </div></div></div></div><div class="refsect2" title="Internal"><a name="d0e5915"></a><h3>Internal</h3><div class="refsect3" title="definition"><a name="d0e5918"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Event,class Action,class Guard>
|
||||
Internal</span></span> {<br>}</pre></div><div class="refsect3" title="tags"><a name="d0e5925"></a><h4>tags</h4><p>row_type_tag is defined differently for every specialization:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>all 3 template parameters means an internal transition
|
||||
with action and guard: <code class="code">typedef sm_i_row_tag
|
||||
row_type_tag;</code></p></li><li class="listitem"><p>Internal<Event,none,none> an internal transition
|
||||
without action or guard: <code class="code">typedef sm__i_row_tag
|
||||
@@ -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<Event,none,Guard> an internal transition
|
||||
without action: <code class="code">typedef sm_g_i_row_tag
|
||||
row_type_tag;</code></p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e5922"></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="d0e5951"></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> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>Fsm& fsm,Event const&
|
||||
evt,SourceState&,TargetState,AllStates&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="ActionSequence_"><a name="d0e5945"></a><h3>ActionSequence_</h3><p>This functor calls every element of the template Sequence (which are also
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="ActionSequence_"><a name="d0e5974"></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="d0e5950"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Sequence> ActionSequence_</span></span> {<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5957"></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="d0e5979"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Sequence> ActionSequence_</span></span> {<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5986"></a><h4>methods</h4><p>This helper functor is made for use in a transition table and in a
|
||||
state behavior and therefore implements an operator() with 3 and with 4
|
||||
arguments:</p><p>
|
||||
</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Evt,class Fsm,class
|
||||
@@ -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 <class Evt,class Fsm,class State>
|
||||
operator()(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Evt const&, Fsm&, State&</code>;</div><div class="funcprototype-spacer"> </div></div><p>
|
||||
</p></div></div><div class="refsect2" title="Defer"><a name="d0e5980"></a><h3>Defer</h3><div class="refsect3" title="definition"><a name="d0e5983"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">Defer</span></span> {<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e5990"></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="d0e6009"></a><h3>Defer</h3><div class="refsect3" title="definition"><a name="d0e6012"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">Defer</span></span> {<br>}</pre></div><div class="refsect3" title="methods"><a name="d0e6019"></a><h4>methods</h4><p>This helper functor is made for use in a transition table and
|
||||
therefore implements an operator() with 4 arguments:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class Evt,class Fsm,class SourceState,class
|
||||
TargetState> operator()(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Evt const&, Fsm& , SourceState&,
|
||||
TargetState&</code>;</div><div class="funcprototype-spacer"> </div></div></div></div></div><div class="refsect1" title="msm/front/internal_row.hpp"><a name="d0e6001"></a><h2>msm/front/internal_row.hpp</h2><p>This header implements the internal transition rows for use inside an
|
||||
TargetState&</code>;</div><div class="funcprototype-spacer"> </div></div></div></div></div><div class="refsect1" title="msm/front/internal_row.hpp"><a name="d0e6030"></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="d0e6006"></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="d0e6035"></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> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>Fsm& fsm,Event const&
|
||||
evt,SourceState&,TargetState,AllStates&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect2" title="a_internal"><a name="d0e6029"></a><h3>a_internal</h3><div class="refsect3" title="definition"><a name="d0e6032"></a><h4>definition</h4><p>This is an internal transition with an action called during the
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect2" title="a_internal"><a name="d0e6058"></a><h3>a_internal</h3><div class="refsect3" title="definition"><a name="d0e6061"></a><h4>definition</h4><p>This is an internal transition with an action called during the
|
||||
transition.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&)>
|
||||
a_internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6041"></a><h4>template parameters</h4><p>
|
||||
a_internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6070"></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="d0e6057"></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="d0e6062"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForGuard, bool
|
||||
</p></div></div><div class="refsect2" title="g_internal"><a name="d0e6086"></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="d0e6091"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForGuard, bool
|
||||
(CalledForGuard::*guard)(Event const&)>
|
||||
g_internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6069"></a><h4>template parameters</h4><p>
|
||||
g_internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6098"></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="d0e6085"></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="d0e6114"></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="d0e6090"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForAction, void
|
||||
called during the transition.</p><div class="refsect3" title="definition"><a name="d0e6119"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event, class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&), class
|
||||
CalledForGuard, bool (CalledForGuard::*guard)(Event const&)>
|
||||
internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6097"></a><h4>template parameters</h4><p>
|
||||
internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6126"></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="d0e6119"></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="d0e6124"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event > _internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6131"></a><h4>template parameters</h4><p>
|
||||
</p></div></div><div class="refsect2" title="_internal"><a name="d0e6148"></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="d0e6153"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Event > _internal</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6160"></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="d0e6141"></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="d0e6170"></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="d0e6146"></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="d0e6175"></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> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>Fsm& fsm,Event const&
|
||||
evt,SourceState&,TargetState,AllStates&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect2" title="_row2"><a name="d0e6169"></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="d0e6174"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target >
|
||||
_row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6181"></a><h4>template parameters</h4><p>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect2" title="_row2"><a name="d0e6198"></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="d0e6203"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target >
|
||||
_row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6210"></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="d0e6197"></a><h3>a_row2</h3><p>This is a transition with action and without guard.</p><div class="refsect3" title="definition"><a name="d0e6202"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target,
|
||||
</p></div></div><div class="refsect2" title="a_row2"><a name="d0e6226"></a><h3>a_row2</h3><p>This is a transition with action and without guard.</p><div class="refsect3" title="definition"><a name="d0e6231"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target,
|
||||
</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6213"></a><h4>template parameters</h4><p>
|
||||
(CalledForAction::*action)(Event const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6242"></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="d0e6235"></a><h3>g_row2</h3><p>This is a transition with guard and without action.</p><div class="refsect3" title="definition"><a name="d0e6240"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target,
|
||||
</p></div></div><div class="refsect2" title="g_row2"><a name="d0e6264"></a><h3>g_row2</h3><p>This is a transition with guard and without action.</p><div class="refsect3" title="definition"><a name="d0e6269"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target,
|
||||
</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6251"></a><h4>template parameters</h4><p>
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6280"></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="d0e6273"></a><h3>row2</h3><p>This is a transition with guard and action.</p><div class="refsect3" title="definition"><a name="d0e6278"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target,
|
||||
</p></div></div><div class="refsect2" title="row2"><a name="d0e6302"></a><h3>row2</h3><p>This is a transition with guard and action.</p><div class="refsect3" title="definition"><a name="d0e6307"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, class Target,
|
||||
</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&), </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6293"></a><h4>template parameters</h4><p>
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6322"></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="d0e6321"></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="d0e6326"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6337"></a><h4>template parameters</h4><p>
|
||||
</p></div></div><div class="refsect2" title="a_irow2"><a name="d0e6350"></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="d0e6355"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6366"></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="d0e6356"></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="d0e6361"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6372"></a><h4>template parameters</h4><p>
|
||||
</p></div></div><div class="refsect2" title="g_irow2"><a name="d0e6385"></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="d0e6390"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6401"></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="d0e6391"></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="d0e6396"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
|
||||
</p></div></div><div class="refsect2" title="irow2"><a name="d0e6420"></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="d0e6425"></a><h4>definition</h4><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template< class Source, class Event, </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForAction, void
|
||||
(CalledForAction::*action)(Event const&), </span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class CalledForGuard, bool (CalledForGuard::*guard)(Event
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6411"></a><h4>template parameters</h4><p>
|
||||
const&) > _row2</span></span> {<br>}</pre></div><div class="refsect3" title="template parameters"><a name="d0e6440"></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="d0e6436"></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="d0e6446"></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="d0e6465"></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="d0e6475"></a><h3>state_machine_def definition</h3><p>This type is the basic class for a basic (or possibly any other)
|
||||
front-end. It provides the standard row types (which includes internal
|
||||
transitions) and a default implementation of the required methods and
|
||||
typedefs.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class Derived,class BaseState =
|
||||
default_base_state> state_machine_def</span></span> {<br>}</pre><div class="refsect3" title="typedefs"><a name="d0e6455"></a><h4>typedefs</h4><p>
|
||||
default_base_state> state_machine_def</span></span> {<br>}</pre><div class="refsect3" title="typedefs"><a name="d0e6484"></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="d0e6471"></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="d0e6500"></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> static bool guard_call(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>
|
||||
<code>(</code>Fsm& fsm,Event const&
|
||||
evt,SourceState&,TargetState,AllStates&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="a_row"><a name="d0e6494"></a><h4>a_row</h4><p>This is a transition with action and without guard.</p><p><code class="classname">template< class Source, class Event, class Target,
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="a_row"><a name="d0e6523"></a><h4>a_row</h4><p>This is a transition with action and without guard.</p><p><code class="classname">template< class Source, class Event, class Target,
|
||||
void (Derived::*action)(Event const&) > a_row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_row"><a name="d0e6519"></a><h4>g_row</h4><p>This is a transition with guard and without action.</p><p><code class="classname">template< class Source, class Event, class Target,
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_row"><a name="d0e6548"></a><h4>g_row</h4><p>This is a transition with guard and without action.</p><p><code class="classname">template< class Source, class Event, class Target,
|
||||
bool (Derived::*guard)(Event const&) > g_row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="row"><a name="d0e6544"></a><h4>row</h4><p>This is a transition with guard and action.</p><p><code class="classname">template< class Source, class Event, class Target,
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="row"><a name="d0e6573"></a><h4>row</h4><p>This is a transition with guard and action.</p><p><code class="classname">template< class Source, class Event, class Target,
|
||||
void (Derived::*action)(Event const&), bool
|
||||
(Derived::*guard)(Event const&) > row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="_row"><a name="d0e6575"></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="d0e6604"></a><h4>_row</h4><p>This is a transition without action or guard. The state machine only
|
||||
changes active state.</p><p><code class="classname">template< class Source, class Event, class Target >
|
||||
_row</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>Target: the target state of the transition.</p></li></ul></div></div><div class="refsect3" title="a_irow"><a name="d0e6594"></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="d0e6623"></a><h4>a_irow</h4><p>This is an internal transition for use inside a transition table, with
|
||||
action and without guard.</p><p><code class="classname">template< class Source, class Event, void
|
||||
(Derived::*action)(Event const&) > a_irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="g_irow"><a name="d0e6616"></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="d0e6645"></a><h4>g_irow</h4><p>This is an internal transition for use inside a transition table, with
|
||||
guard and without action.</p><p><code class="classname">template< class Source, class Event, bool
|
||||
(Derived::*guard)(Event const&) > g_irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="irow"><a name="d0e6638"></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="d0e6667"></a><h4>irow</h4><p>This is an internal transition for use inside a transition table, with
|
||||
guard and action.</p><p><code class="classname">template< class Source, class Event, void
|
||||
(Derived::*action)(Event const&), bool
|
||||
(Derived::*guard)(Event const&) > irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li><li class="listitem"><p>action: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li><li class="listitem"><p>guard: a pointer to the method provided by the concrete
|
||||
front-end (represented by <code class="code">Derived</code>).</p></li></ul></div></div><div class="refsect3" title="_irow"><a name="d0e6666"></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="d0e6695"></a><h4>_irow</h4><p>This is an internal transition without action or guard. As it does
|
||||
nothing, it means "ignore event".</p><p><code class="classname">template< class Source, class Event >
|
||||
_irow</code></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Event: the event triggering the transition.</p></li><li class="listitem"><p>Source: the source state of the transition.</p></li></ul></div></div><div class="refsect3" title="methods"><a name="d0e6682"></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="d0e6711"></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,19 +256,19 @@
|
||||
<code>(</code>Event const& ,Fsm&,
|
||||
std::exception&<code>)</code>
|
||||
</code>;</div><div class="funcprototype-spacer"> </div></div><p>
|
||||
</p></div></div></div><div class="refsect1" title="msm/front/states.hpp"><a name="d0e6726"></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="d0e6731"></a><h3>types</h3><p>This header provides the following types:</p><div class="refsect3" title="no_sm_ptr"><a name="d0e6736"></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="d0e6741"></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="d0e6755"></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="d0e6760"></a><h3>types</h3><p>This header provides the following types:</p><div class="refsect3" title="no_sm_ptr"><a name="d0e6765"></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="d0e6770"></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="d0e6746"></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="d0e6775"></a><h4>state</h4><p>Basic type for simple states. Inherit from this type to define a
|
||||
simple state. The first argument is needed if you want your state (and
|
||||
all others used in a concrete state machine) to inherit a basic type for
|
||||
logging or providing a common behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class Base = default_base_state,class
|
||||
SMPtrPolicy = no_sm_ptr> state</span></span> {<br>}</pre></div><div class="refsect3" title="terminate_state"><a name="d0e6755"></a><h4>terminate_state</h4><p>Basic type for terminate states. Inherit from this type to define a
|
||||
SMPtrPolicy = no_sm_ptr> state</span></span> {<br>}</pre></div><div class="refsect3" title="terminate_state"><a name="d0e6784"></a><h4>terminate_state</h4><p>Basic type for terminate states. Inherit from this type to define a
|
||||
terminate state. The first argument is needed if you want your state
|
||||
(and all others used in a concrete state machine) to inherit a basic
|
||||
type for logging or providing a common behavior.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class Base = default_base_state,class
|
||||
SMPtrPolicy = no_sm_ptr> terminate_state</span></span> {<br>}</pre></div><div class="refsect3" title="interrupt_state"><a name="d0e6764"></a><h4>interrupt_state</h4><p>Basic type for interrupt states. Interrupt states prevent any further
|
||||
SMPtrPolicy = no_sm_ptr> terminate_state</span></span> {<br>}</pre></div><div class="refsect3" title="interrupt_state"><a name="d0e6793"></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
|
||||
@@ -276,11 +276,11 @@
|
||||
basic type for logging or providing a common behavior.</p><p>The EndInterruptEvent can also be a sequence of events:
|
||||
mpl::vector<EndInterruptEvent,EndInterruptEvent2>.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template<class EndInterruptEvent,class Base =
|
||||
default_base_state,</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr>
|
||||
interrupt_state</span></span> {<br>}</pre></div><div class="refsect3" title="explicit_entry"><a name="d0e6779"></a><h4>explicit_entry</h4><p>Inherit from this type <span class="underline">in
|
||||
interrupt_state</span></span> {<br>}</pre></div><div class="refsect3" title="explicit_entry"><a name="d0e6808"></a><h4>explicit_entry</h4><p>Inherit from this type <span class="underline">in
|
||||
addition</span> to the desired state type to enable this state
|
||||
for direct entering. The template parameter gives the region id of the
|
||||
state (regions are numbered in the order of the
|
||||
<code class="code">initial_state</code> typedef).</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <int ZoneIndex=-1> explicit_entry</span></span> {<br>}</pre></div><div class="refsect3" title="entry_pseudo_state"><a name="d0e6794"></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 <int ZoneIndex=-1> explicit_entry</span></span> {<br>}</pre></div><div class="refsect3" title="entry_pseudo_state"><a name="d0e6823"></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).
|
||||
@@ -288,7 +288,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<int RegionIndex=-1,class Base =
|
||||
default_base_state,</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr>
|
||||
entry_pseudo_state</span></span> {<br>}</pre></div><div class="refsect3" title="exit_pseudo_state"><a name="d0e6810"></a><h4>exit_pseudo_state</h4><p>Basic type for exit pseudo states. Exit pseudo states are an
|
||||
entry_pseudo_state</span></span> {<br>}</pre></div><div class="refsect3" title="exit_pseudo_state"><a name="d0e6839"></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
|
||||
@@ -297,32 +297,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<class Event,class Base =
|
||||
default_base_state,</span></span> {<br>}</pre><pre class="classsynopsis"> <span class="ooclass"><span class="classname">class SMPtrPolicy = no_sm_ptr>
|
||||
exit_pseudo_state</span></span> {<br>}</pre></div></div></div><div class="refsect1" title="msm/front/euml/euml.hpp"><a name="d0e6823"></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="d0e6828"></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="ch11.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="d0e6836"></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> {<br>}</pre></div></div></div><div class="refsect1" title="msm/front/euml/euml.hpp"><a name="d0e6852"></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="d0e6857"></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="ch11.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="d0e6865"></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="ch11.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="d0e6844"></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="ch11.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="d0e6852"></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="ch11.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="d0e6860"></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="d0e6873"></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="ch11.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="d0e6881"></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="ch11.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="d0e6889"></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="ch11.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="d0e6868"></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="d0e6897"></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="ch11.html#eUML-STL-container">tables</a></strong></span> shows a full description. It also provides npos for
|
||||
strings.</p><div class="refsect2" title="Npos_<container type>"><a name="d0e6876"></a><h3>Npos_<container type></h3><p>Functor returning npos for transition or state behaviors. Like all
|
||||
strings.</p><div class="refsect2" title="Npos_<container type>"><a name="d0e6905"></a><h3>Npos_<container type></h3><p>Functor returning npos for transition or state behaviors. Like all
|
||||
constants, only the functor form exists, so parenthesis are necessary.
|
||||
Example:</p><p><code class="code">string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) !=
|
||||
Npos_<string>() // compare result of string::find with
|
||||
npos</code></p></div></div><div class="refsect1" title="msm/front/euml/stt_grammar.hpp"><a name="d0e6884"></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="d0e6889"></a><h3>functions</h3><div class="refsect3" title="build_stt"><a name="d0e6892"></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="d0e6913"></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="d0e6918"></a><h3>functions</h3><div class="refsect3" title="build_stt"><a name="d0e6921"></a><h4>build_stt</h4><p>The function build_stt evaluates the grammar-conform expression as
|
||||
parameter. It returns a transition table, which is a mpl::vector of
|
||||
transitions (rows) or, if the expression is ill-formed (does not match
|
||||
the grammar), the type <code class="code">invalid_type</code>, which will lead to a
|
||||
compile-time static assertion when this transition table is passed to a
|
||||
state machine. </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template<class Expr> [mpl::vector<...> /
|
||||
msm::front::euml::invalid_type] build_stt(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr const& expr</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="build_internal_stt"><a name="d0e6906"></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> </td></tr></table><div class="paramdef-list"><code>Expr const& expr</code>;</div><div class="funcprototype-spacer"> </div></div></div><div class="refsect3" title="build_internal_stt"><a name="d0e6935"></a><h4>build_internal_stt</h4><p>The function build_internal_stt evaluates the grammar-conform
|
||||
expression as parameter. It returns a transition table, which is a
|
||||
mpl::vector of transitions (rows) or, if the expression is ill-formed
|
||||
(does not match the grammar), the type <code class="code">invalid_type</code>, which
|
||||
will lead to a compile-time static assertion when this transition table
|
||||
is passed to a state machine. </p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template<class Expr> [mpl::vector<...> /
|
||||
msm::front::euml::invalid_type] build_internal_stt(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr const& expr</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="grammars"><a name="d0e6920"></a><h3>grammars</h3><div class="refsect3" title="transition table"><a name="d0e6923"></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> </td></tr></table><div class="paramdef-list"><code>Expr const& expr</code>;</div><div class="funcprototype-spacer"> </div></div></div></div><div class="refsect2" title="grammars"><a name="d0e6949"></a><h3>grammars</h3><div class="refsect3" title="transition table"><a name="d0e6952"></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*/
|
||||
@@ -347,15 +347,15 @@ target == source + event / action,
|
||||
source + event /action == target,
|
||||
source / action == target, /*anonymous transition*/
|
||||
target == source / action, /*anonymous transition*/
|
||||
source + event /action, /* internal transition*/</pre></div><div class="refsect3" title="internal transition table"><a name="d0e6935"></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="d0e6944"></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="d0e6964"></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="d0e6973"></a><h2>msm/front/euml/guard_grammar.hpp</h2><p>This header contains the <code class="code">Guard</code> grammar used in the previous
|
||||
section. This grammar is long but pretty simple:</p><pre class="programlisting">Guard := action_tag | (Guard '&&' Guard)
|
||||
| (Guard '||' Guard) | ... /* operators*/
|
||||
| (if_then_else_(Guard,Guard,Guard)) | (function (Action,...Action))</pre><p>Most C++ operators are supported (address-of is not). With
|
||||
<code class="code">function</code> is meant any eUML predefined function or any self-made
|
||||
(using <code class="code">MSM_EUML_METHOD</code> or <code class="code">MSM_EUML_FUNCTION</code>). Action
|
||||
is a grammar defined in state_grammar.hpp.</p></div><div class="refsect1" title="msm/front/euml/state_grammar.hpp"><a name="d0e6965"></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="d0e6970"></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="d0e6994"></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="d0e6999"></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)
|
||||
@@ -364,10 +364,10 @@ source + event /action, /* internal transition*/</pre></div><div class="refsect3
|
||||
| (function(Action,...Action))
|
||||
ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: ++ (post/pre), -- (post/pre), dereferencing, +
|
||||
(unary/binary), - (unary/binary), *, /, %, &(bitwise), | (bitwise),
|
||||
^(bitwise), +=, -=, *=, /=, %=, <<=, >>=, <<, >>, =, [].</p></div><div class="refsect2" title="attributes"><a name="d0e6979"></a><h3>attributes</h3><p>This grammar is used to add attributes to states (or state machines) or
|
||||
^(bitwise), +=, -=, *=, /=, %=, <<=, >>=, <<, >>, =, [].</p></div><div class="refsect2" title="attributes"><a name="d0e7008"></a><h3>attributes</h3><p>This grammar is used to add attributes to states (or state machines) or
|
||||
events: It evaluates to a fusion::map. You can use two forms:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">attributes_ << no_attributes_</code></p></li><li class="listitem"><p><code class="code">attributes_ << attribute_1 << ... <<
|
||||
attribute_n</code></p></li></ul></div><p>Attributes can be of any default-constructible type (fusion
|
||||
requirement).</p></div><div class="refsect2" title="configure"><a name="d0e6995"></a><h3>configure</h3><p>This grammar also has two forms:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">configure_ << no_configure_</code></p></li><li class="listitem"><p><code class="code">configure_ << type_1 << ... <<
|
||||
requirement).</p></div><div class="refsect2" title="configure"><a name="d0e7024"></a><h3>configure</h3><p>This grammar also has two forms:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">configure_ << no_configure_</code></p></li><li class="listitem"><p><code class="code">configure_ << type_1 << ... <<
|
||||
type_n</code></p></li></ul></div><p>This grammar is used to create inside one syntax:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>flags: <code class="code">configure_ << some_flag</code> where
|
||||
some_flag inherits from <code class="code">euml_flag<some_flag></code> or
|
||||
is defined using BOOST_MSM_EUML_FLAG.</p></li><li class="listitem"><p>deferred events: <code class="code">configure_ << some_event</code>
|
||||
@@ -379,12 +379,12 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
some_config inherits from
|
||||
<code class="code">euml_config<some_config></code>. At the moment,
|
||||
three predefined objects exist (in msm//front/euml/common.hpp):</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>no_exception: disable catching exceptions</p></li><li class="listitem"><p>no_msg_queue: disable message queue</p></li><li class="listitem"><p>deferred_events: manually enable handling of
|
||||
deferred events</p></li></ul></div></li></ul></div></div><div class="refsect2" title="initial states"><a name="d0e7049"></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="d0e7078"></a><h3>initial states</h3><p>The grammar to define initial states for a state machine is: <code class="code">init_
|
||||
<< state_1 << ... << state_n</code> where
|
||||
state_1...state_n inherit from euml_state or is defined using
|
||||
BOOST_MSM_EUML_STATE, BOOST_MSM_EUML_INTERRUPT_STATE,
|
||||
BOOST_MSM_EUML_TERMINATE_STATE, BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE,
|
||||
BOOST_MSM_EUML_ENTRY_STATE or BOOST_MSM_EUML_EXIT_STATE.</p></div><div class="refsect2" title="functions"><a name="d0e7057"></a><h3>functions</h3><div class="refsect3" title="build_sm"><a name="d0e7060"></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="d0e7086"></a><h3>functions</h3><div class="refsect3" title="build_sm"><a name="d0e7089"></a><h4>build_sm</h4><p>This function has several overloads. The return type is not relevant
|
||||
to you as only decltype (return type) is what one needs.</p><p>Defines a state machine without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init>
|
||||
func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class
|
||||
Expr1> func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a state machine with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Stt,class Init,class
|
||||
@@ -403,7 +403,7 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
Base> func_state_machine<...> build_sm(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Stt ,Init,Expr1 const&, Expr2 const&, Attributes
|
||||
const&, Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class
|
||||
StateNameTag to disambiguate state machines having the same parameters
|
||||
but still being different.</p></div><div class="refsect3" title="build_state"><a name="d0e7115"></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="d0e7144"></a><h4>build_state</h4><p>This function has several overloads. The return type is not relevant
|
||||
to you as only decltype (return type) is what one needs.</p><p>Defines a simple state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">func_state<class StateNameTag,...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code></code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1>
|
||||
func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Expr1, class Expr2>
|
||||
func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&,Expr2 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines a simple state with entry, exit behaviors and
|
||||
@@ -419,7 +419,7 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
func_state<...> build_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes const&,
|
||||
Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class
|
||||
StateNameTag to disambiguate states having the same parameters but still
|
||||
being different.</p></div><div class="refsect3" title="build_terminate_state"><a name="d0e7169"></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="d0e7174"></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="d0e7198"></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="d0e7203"></a><h4>build_interrupt_state</h4><p>This function has several overloads. The return type is not relevant
|
||||
to you as only decltype (return type) is what one needs.</p><p>Defines an interrupt state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class EndInterruptEvent>
|
||||
func_state<...> build_interrupt_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>EndInterruptEvent const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an interrupt state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class
|
||||
EndInterruptEvent,class Expr1> func_state<...>
|
||||
@@ -444,7 +444,7 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
const&, Attributes const&, Configure const&,
|
||||
Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class
|
||||
StateNameTag to disambiguate states having the same parameters but still
|
||||
being different.</p></div><div class="refsect3" title="build_entry_state"><a name="d0e7229"></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="d0e7258"></a><h4>build_entry_state</h4><p>This function has several overloads. The return type is not relevant
|
||||
to you as only decltype (return type) is what one needs.</p><p>Defines an entry pseudo state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex>
|
||||
entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code></code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class
|
||||
Expr1> entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an entry pseudo state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,int RegionIndex,class
|
||||
@@ -463,7 +463,7 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
Base> entry_func_state<...> build_entry_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Expr1 const&, Expr2 const&, Attributes const&,
|
||||
Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class
|
||||
StateNameTag to disambiguate states having the same parameters but still
|
||||
being different.</p></div><div class="refsect3" title="build_exit_state"><a name="d0e7283"></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="d0e7312"></a><h4>build_exit_state</h4><p>This function has several overloads. The return type is not relevant
|
||||
to you as only decltype (return type) is what one needs.</p><p>Defines an exit pseudo state without entry or exit:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event>
|
||||
exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry behavior:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1>
|
||||
exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&</code>;</div><div class="funcprototype-spacer"> </div></div><p>Defines an exit pseudo state with entry and exit behaviors:</p><div class="funcsynopsis"><table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table"><tr><td><code class="funcdef">template <class StateNameTag,class Event,class Expr1,
|
||||
@@ -482,8 +482,8 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
exit_func_state<...> build_exit_state(</code></td><td><code>)</code>;</td><td> </td></tr></table><div class="paramdef-list"><code>Event const&,Expr1 const&, Expr2 const&,
|
||||
Attributes const&, Configure const&, Base</code>;</div><div class="funcprototype-spacer"> </div></div><p>Notice that this function requires the extra parameter class
|
||||
StateNameTag to disambiguate states having the same parameters but still
|
||||
being different.</p></div><div class="refsect3" title="build_explicit_entry_state"><a name="d0e7338"></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="d0e7343"></a><h2>msm/front/euml/common.hpp</h2><div class="refsect2" title="types"><a name="d0e7346"></a><h3>types</h3><div class="refsect3" title="euml_event"><a name="d0e7349"></a><h4>euml_event</h4><p>The basic type for events with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class EventName> euml_event;</span></span> {<br>}</pre><pre class="programlisting">struct play : euml_event<play>{};</pre></div><div class="refsect3" title="euml_state"><a name="d0e7360"></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="d0e7367"></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="d0e7372"></a><h2>msm/front/euml/common.hpp</h2><div class="refsect2" title="types"><a name="d0e7375"></a><h3>types</h3><div class="refsect3" title="euml_event"><a name="d0e7378"></a><h4>euml_event</h4><p>The basic type for events with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class EventName> euml_event;</span></span> {<br>}</pre><pre class="programlisting">struct play : euml_event<play>{};</pre></div><div class="refsect3" title="euml_state"><a name="d0e7389"></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
|
||||
@@ -494,7 +494,7 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
void foo() {...}
|
||||
template <class Event,class Fsm>
|
||||
void on_entry(Event const& evt,Fsm& fsm){...}
|
||||
};</pre></div><div class="refsect3" title="euml_flag"><a name="d0e7373"></a><h4>euml_flag</h4><p>The basic type for flags with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class FlagName> euml_flag;</span></span> {<br>}</pre><pre class="programlisting">struct PlayingPaused: euml_flag<PlayingPaused>{};</pre></div><div class="refsect3" title="euml_action"><a name="d0e7384"></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="d0e7402"></a><h4>euml_flag</h4><p>The basic type for flags with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class FlagName> euml_flag;</span></span> {<br>}</pre><pre class="programlisting">struct PlayingPaused: euml_flag<PlayingPaused>{};</pre></div><div class="refsect3" title="euml_action"><a name="d0e7413"></a><h4>euml_action</h4><p>The basic type for state or transition behaviors and guards with
|
||||
eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class AcionName> euml_action;</span></span> {<br>}</pre><pre class="programlisting">struct close_drawer : euml_action<close_drawer>
|
||||
{
|
||||
template <class Fsm,class Evt,class SourceState,class TargetState>
|
||||
@@ -503,41 +503,41 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
{
|
||||
template <class Event,class Fsm,class State>
|
||||
void operator()(Event const&,Fsm& fsm,State& ){...}
|
||||
};</pre></div><div class="refsect3" title="euml_config"><a name="d0e7399"></a><h4>euml_config</h4><p>The basic type for configuration possibilities with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class ConfigName> euml_config;</span></span> {<br>}</pre><p>You normally do not use this type directly but instead the instances
|
||||
};</pre></div><div class="refsect3" title="euml_config"><a name="d0e7428"></a><h4>euml_config</h4><p>The basic type for configuration possibilities with eUML.</p><pre class="classsynopsis"> <span class="ooclass"><span class="classname">template <class ConfigName> euml_config;</span></span> {<br>}</pre><p>You normally do not use this type directly but instead the instances
|
||||
of predefined configuration:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>no_exception: disable catching exceptions</p></li><li class="listitem"><p>no_msg_queue: disable message queue. The message queue
|
||||
allows you to send an event for procesing while in an event
|
||||
processing.</p></li><li class="listitem"><p>deferred_events: manually enable handling of deferred
|
||||
events</p></li></ul></div></div><div class="refsect3" title="invalid_type"><a name="d0e7420"></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="d0e7425"></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="d0e7430"></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="d0e7449"></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="d0e7454"></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="d0e7459"></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="d0e7450"></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="d0e7479"></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="d0e7470"></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="d0e7499"></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="d0e7490"></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="d0e7519"></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="d0e7510"></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="d0e7539"></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="d0e7530"></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="d0e7559"></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
|
||||
@@ -545,46 +545,46 @@ ActionSequence := Action | (Action ',' Action)</pre><p>Relevant operators are: +
|
||||
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="d0e7550"></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="d0e7579"></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="d0e7560"></a><h4>True_</h4><p>Functor returning true for transition or state behaviors. Like all
|
||||
</p></div><div class="refsect3" title="True_"><a name="d0e7589"></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="d0e7570"></a><h4>False_</h4><p>Functor returning false for transition or state behaviors. Like all
|
||||
</p></div><div class="refsect3" title="False_"><a name="d0e7599"></a><h4>False_</h4><p>Functor returning false for transition or state behaviors. Like all
|
||||
constants, only the functor form exists, so parenthesis are necessary.
|
||||
Example:</p><p>
|
||||
</p><pre class="programlisting">if_then_(False_(),/* some action never called */)</pre><p>
|
||||
</p></div><div class="refsect3" title="Int_<int value>"><a name="d0e7580"></a><h4>Int_<int value></h4><p>Functor returning an integer value for transition or state behaviors.
|
||||
</p></div><div class="refsect3" title="Int_<int value>"><a name="d0e7609"></a><h4>Int_<int value></h4><p>Functor returning an integer value for transition or state behaviors.
|
||||
Like all constants, only the functor form exists, so parenthesis are
|
||||
necessary. Example:</p><p>
|
||||
</p><pre class="programlisting">target_(m_ringing_cpt) = Int_<RINGING_TIME>() // RINGING_TIME is a constant</pre><p>
|
||||
</p></div><div class="refsect3" title="Char_<char value>"><a name="d0e7590"></a><h4>Char_<char value></h4><p>Functor returning a char value for transition or state behaviors. Like
|
||||
</p></div><div class="refsect3" title="Char_<char value>"><a name="d0e7619"></a><h4>Char_<char value></h4><p>Functor returning a char value for transition or state behaviors. Like
|
||||
all constants, only the functor form exists, so parenthesis are
|
||||
necessary. Example:</p><p>
|
||||
</p><pre class="programlisting">// look for 'S' in event.m_song
|
||||
[string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != Npos_<string>()]</pre><p>
|
||||
</p></div><div class="refsect3" title="Size_t_<size_t value>"><a name="d0e7600"></a><h4>Size_t_<size_t value></h4><p>Functor returning a size_t value for transition or state behaviors.
|
||||
</p></div><div class="refsect3" title="Size_t_<size_t value>"><a name="d0e7629"></a><h4>Size_t_<size_t value></h4><p>Functor returning a size_t value for transition or state behaviors.
|
||||
Like all constants, only the functor form exists, so parenthesis are
|
||||
necessary. Example:</p><p>
|
||||
</p><pre class="programlisting">substr_(event_(m_song),Size_t_<1>()) // returns a substring of event.m_song</pre><p>
|
||||
</p></div><div class="refsect3" title="String_ < mpl::string >"><a name="d0e7610"></a><h4>String_ < mpl::string ></h4><p>Functor returning a string for transition or state behaviors. Like all
|
||||
</p></div><div class="refsect3" title="String_ < mpl::string >"><a name="d0e7639"></a><h4>String_ < mpl::string ></h4><p>Functor returning a string for transition or state behaviors. Like all
|
||||
constants, only the functor form exists, so parenthesis are necessary.
|
||||
Requires boost >= 1.40 for mpl::string.</p><p>Example:</p><p>
|
||||
</p><pre class="programlisting">// adds "Let it be" to fsm.m_src_container
|
||||
push_back_(fsm_(m_src_container), String_<mpl::string<'Let','it ','be'> >())</pre><p>
|
||||
</p></div><div class="refsect3" title="Predicate_ < some_stl_compatible_functor >"><a name="d0e7622"></a><h4>Predicate_ < some_stl_compatible_functor ></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 >"><a name="d0e7651"></a><h4>Predicate_ < some_stl_compatible_functor ></h4><p>This functor eUML-enables a STL functor (for use in an algorithm).
|
||||
This is necessary because all what is in the transition table must be a
|
||||
eUML terminal.</p><p>Example:</p><pre class="programlisting">//equivalent to:
|
||||
//std::accumulate(fsm.m_vec.begin(),fsm.m_vec.end(),1,std::plus<int>())== 1
|
||||
accumulate_(begin_(fsm_(m_vec)),end_(fsm_(m_vec)),Int_<1>(),
|
||||
Predicate_<std::plus<int> >()) == Int_<1>())</pre></div><div class="refsect3" title="process_"><a name="d0e7631"></a><h4>process_</h4><p>This function sends an event to up to 4 state machines by calling
|
||||
Predicate_<std::plus<int> >()) == Int_<1>())</pre></div><div class="refsect3" title="process_"><a name="d0e7660"></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="d0e7650"></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="d0e7679"></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]
|
||||
@@ -594,24 +594,24 @@ accumulate_(begin_(fsm_(m_vec)),end_(fsm_(m_vec)),Int_<1>(),
|
||||
// copy-constructed with event.m_song
|
||||
process2_(NotFound,event_(m_song))</pre><p>
|
||||
</p><p>With the following definitions:</p><pre class="programlisting">BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)//declaration of m_song
|
||||
NotFound (const string& data) // copy-constructor of NotFound</pre></div><div class="refsect3" title="is_flag_"><a name="d0e7680"></a><h4>is_flag_</h4><p>This function tells if a flag is active by calling
|
||||
NotFound (const string& data) // copy-constructor of NotFound</pre></div><div class="refsect3" title="is_flag_"><a name="d0e7709"></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="d0e7705"></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="d0e7734"></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="d0e7715"></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="d0e7744"></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="d0e7720"></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="d0e7749"></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="d0e7725"></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="d0e7754"></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="d0e7730"></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="d0e7759"></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
|
||||
@@ -619,7 +619,7 @@ NotFound (const string& data) // copy-constructor of NotFound</pre></div><di
|
||||
</p><pre class="programlisting">MSM_EUML_FUNCTION(BinarySearch_,std::binary_search,binary_search_,bool,bool)</pre><p>
|
||||
</p><p>Can be used like:</p><p>
|
||||
</p><pre class="programlisting">binary_search_(begin_(fsm_(m_var)),end_(fsm_(m_var)),Int_<9>())</pre><p>
|
||||
</p></div><div class="refsect3" title="MSM_EUML_METHOD"><a name="d0e7766"></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="d0e7795"></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
|
||||
@@ -631,40 +631,40 @@ NotFound (const string& data) // copy-constructor of NotFound</pre></div><di
|
||||
};
|
||||
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="d0e7799"></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="d0e7828"></a><h4>BOOST_MSM_EUML_ACTION(action-instance-name)</h4><p>This macro declares a behavior type and a const instance for use in
|
||||
state or transition behaviors. The action implementation itself follows
|
||||
the macro declaration, for example:</p><pre class="programlisting">BOOST_MSM_EUML_ACTION(good_disk_format)
|
||||
{
|
||||
template <class Fsm,class Evt,class SourceState,class TargetState>
|
||||
void/bool operator()(Evt const& evt,Fsm&,SourceState& ,TargetState& ){...}
|
||||
};</pre></div><div class="refsect3" title="BOOST_MSM_EUML_FLAG(flag-instance-name)"><a name="d0e7806"></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="d0e7811"></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="d0e7835"></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="d0e7840"></a><h4>BOOST_MSM_EUML_FLAG_NAME(flag-instance-name)</h4><p>This macro returns the name of the flag type generated by
|
||||
BOOST_MSM_EUML_FLAG. You need this where the type is required (usually
|
||||
with the back-end method is_flag_active). For example:</p><pre class="programlisting">fsm.is_flag_active<BOOST_MSM_EUML_FLAG_NAME(CDLoaded)>()</pre></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)"><a name="d0e7818"></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<BOOST_MSM_EUML_FLAG_NAME(CDLoaded)>()</pre></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)"><a name="d0e7847"></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="d0e7823"></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="d0e7852"></a><h4>BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)</h4><p>This macro declares an attribute list called attributes-name based on
|
||||
the expression as first argument. These attributes can then be made part
|
||||
of an event using BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES, of a state as
|
||||
3rd parameter of BOOST_MSM_EUML_STATE or of a state machine as 5th
|
||||
parameter of BOOST_MSM_EUML_DECLARE_STATE_MACHINE.</p><p>Attributes are added using left-shift, for example:</p><pre class="programlisting">// m_song is of type std::string
|
||||
BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)
|
||||
// contains one attribute, m_song
|
||||
BOOST_MSM_EUML_ATTRIBUTES((attributes_ << m_song ), FoundDef)</pre></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT(event-instance name)"><a name="d0e7832"></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_ << m_song ), FoundDef)</pre></div><div class="refsect3" title="BOOST_MSM_EUML_EVENT(event-instance name)"><a name="d0e7861"></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="d0e7837"></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="d0e7866"></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="d0e7851"></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="d0e7880"></a><h4>BOOST_MSM_EUML_EVENT_NAME(event-instance-name)</h4><p>This macro returns the name of the event type generated by
|
||||
BOOST_MSM_EUML_EVENT or BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES. You need
|
||||
this where the type is required (usually inside a back-end definition).
|
||||
For example:</p><p>
|
||||
</p><pre class="programlisting">typedef msm::back::state_machine<Playing_,
|
||||
msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
> > > Playing_type;</pre><p>
|
||||
</p></div><div class="refsect3" title="BOOST_MSM_EUML_STATE(build-expression,state-instance-name)"><a name="d0e7861"></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="d0e7890"></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
|
||||
@@ -673,7 +673,7 @@ msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
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="d0e7887"></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="d0e7916"></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
|
||||
@@ -690,7 +690,7 @@ msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
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="d0e7913"></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="d0e7942"></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
|
||||
@@ -704,7 +704,7 @@ msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
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="d0e7939"></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="d0e7968"></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
|
||||
@@ -720,7 +720,7 @@ msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
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="d0e7967"></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="d0e7996"></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
|
||||
@@ -735,7 +735,7 @@ msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
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="d0e7993"></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="d0e8022"></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
|
||||
@@ -746,28 +746,28 @@ msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
||||
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="d0e8019"></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="d0e8048"></a><h4>BOOST_MSM_EUML_STATE_NAME(state-instance-name)</h4><p>This macro returns the name of the state type generated by
|
||||
BOOST_MSM_EUML_STATE or other state macros. You need this where the type
|
||||
is required (usually using a backend function). For example:</p><p>
|
||||
</p><pre class="programlisting">fsm.get_state<BOOST_MSM_EUML_STATE_NAME(StringFind)&>().some_state_function();</pre><p>
|
||||
</p></div><div class="refsect3" title="BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)"><a name="d0e8029"></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="d0e8034"></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="d0e8039"></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="d0e8044"></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="d0e8049"></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="d0e8058"></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="d0e8063"></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="d0e8068"></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="d0e8073"></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="d0e8078"></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="d0e8054"></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="d0e8083"></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="d0e8059"></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="d0e8088"></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="d0e8067"></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="d0e8072"></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="d0e8096"></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="d0e8101"></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="d0e8080"></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="d0e8109"></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
|
||||
|
||||
@@ -45,6 +45,9 @@
|
||||
#include <boost/mpl/back_inserter.hpp>
|
||||
#include <boost/mpl/transform.hpp>
|
||||
|
||||
#include <boost/fusion/include/as_vector.hpp>
|
||||
#include <boost/fusion/include/insert_range.hpp>
|
||||
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user