blob: 75f355e023df57c7707d86496abe766cda8cbce6 [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chapter&nbsp;3.&nbsp;Tutorial</title><link rel="stylesheet" href="boostbook.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2"><link rel="home" href="index.html" title="Meta State Machine (MSM) V2.12"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;User' guide"><link rel="prev" href="ch02s03.html" title="State machine glossary"><link rel="next" href="ch03s02.html" title="Basic front-end"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;3.&nbsp;Tutorial</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;User' guide</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter&nbsp;3.&nbsp;Tutorial"><div class="titlepage"><div><div><h2 class="title"><a name="d0e402"></a>Chapter&nbsp;3.&nbsp;Tutorial</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch03.html#d0e405">Design</a></span></dt><dt><span class="sect1"><a href="ch03s02.html">Basic front-end</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#d0e424">A simple example</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e438">Transition table</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e486">Defining states with entry/exit actions</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e499">Defining a simple state machine</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e554">Defining a submachine</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e589">Orthogonal regions, terminate state, event deferring</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e680">History</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e725">Completion (anonymous) transitions</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e752">Internal transitions</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e854">more row types</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e887">Explicit entry / entry and exit pseudo-state / fork</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1054">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1108">Event Hierarchy</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1129">Customizing a state machine / Getting more speed</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1178">Choosing the initial event</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#d0e1191"> Containing state machine (deprecated)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">Functor front-end</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#d0e1230"> Transition table </a></span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1263">Defining states with entry/exit actions</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1282">Defining a simple state machine</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1290">Anonymous transitions</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#d0e1316">Internal
transitions</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s04.html">eUML (experimental)</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s04.html#d0e1395">Transition table</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1436">Defining events, actions and states with entry/exit actions</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1549">Defining a simple state machine</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1597">Defining a submachine</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1613">
Attributes / Function call</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1713">Orthogonal regions, flags, event deferring</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1825">
Customizing a state machine / Getting
more speed</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1860">Completion / Anonymous transitions</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1878">Internal transitions</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1909">Other state types</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e1973">Helper functions</a></span></dt><dt><span class="sect2"><a href="ch03s04.html#d0e2070">Phoenix-like STL support</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s05.html">Back-end</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s05.html#d0e2128">Creation </a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2137">Starting a state machine</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2149">Event dispatching</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2158">Active state(s)</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2172">Serialization</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2225">Base state type </a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2251">Visitor</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2294">Flags</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2307">Getting a state</a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2320"> State machine constructor with arguments </a></span></dt><dt><span class="sect2"><a href="ch03s05.html#d0e2360">Trading run-time speed for
better compile-time / multi-TU compilation</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="d0e405"></a>Design</h2></div></div></div><p>MSM is divided between front&#8211;ends and back-ends. At the moment, there is just
one back-end. On the front-end side, you will find three of them which are as
many state machine description languages, with many more possible. For potential
language writers, this document contains a <a class="link" href="ch06s02.html#internals-front-back-interface">description of the interface
between front-end and back-end</a>.</p><p>The first front-end is an adaptation of the example provided in the <a class="link" href="http://boostpro.com/mplbook" target="_top">MPL book</a> with actions
defined as pointers to state or state machine methods. The second one is based
on functors. The third, eUML (embedded UML) is an experimental language based on
Boost.Proto and Boost.Typeof and hiding most of the metaprogramming to increase
readability. Both eUML and the functor front-end also offer a functional library
(a bit like Boost.Phoenix) for use as action language (UML defining
none).</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">State machine glossary&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Basic front-end</td></tr></table></div></body></html>