522 lines
26 KiB
HTML
522 lines
26 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<meta http-equiv="Content-Language" content="en-us">
|
||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
|
||
<meta name="ProgId" content="FrontPage.Editor.Document">
|
||
<link rel="stylesheet" type="text/css" href="../../../boost.css">
|
||
<title>The Boost Statechart Library - Overview</title>
|
||
</head>
|
||
|
||
<body link="#0000ff" vlink="#800080">
|
||
|
||
<table border="0" cellpadding="7" cellspacing="0" width="100%" summary="header">
|
||
<tr>
|
||
<td valign="top" width="300">
|
||
<h3><a href="../../../index.htm">
|
||
<img alt="C++ Boost" src="../../../boost.png" border="0" width="277" height="86"></a></h3>
|
||
</td>
|
||
<td valign="top">
|
||
<h1 align="center">The Boost Statechart Library</h1>
|
||
<p align="center">(formerly known as boost::fsm)</p>
|
||
<h2 align="center">Overview</h2>
|
||
<p align="center"><font size="2">Version:
|
||
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y/%m/%d" startspan -->2005/07/21<!--webbot bot="Timestamp" endspan i-checksum="12734" --></font></td>
|
||
</tr>
|
||
</table>
|
||
<hr>
|
||
<h2>Contents</h2>
|
||
<dl class="index">
|
||
<dt><a href="#Overview">Overview</a></dt>
|
||
<dd><a href="#Supported_platforms">Supported platforms</a></dd>
|
||
<dd><a href="#Incompatible_compilers">Incompatible compilers</a></dd>
|
||
<dd><a href="#Getting_started">Getting started</a></dd>
|
||
<dd><a href="#Audience">Audience</a></dd>
|
||
<dt> </dt>
|
||
<dt><a href="tutorial.html">Tutorial</a> [pdf: <a href="tutorial.pdf">
|
||
English</a>,
|
||
<a href="http://prdownloads.sourceforge.jp/jyugem/7127/fsm-tutorial-jp.pdf">
|
||
Japanese</a>]</dt>
|
||
<dt><a href="uml_mapping.html">UML to Boost.Statechart mapping summary</a></dt>
|
||
<dt><a href="faq.html">Frequently Asked Questions (FAQs)</a></dt>
|
||
<dt><a href="configuration.html">Configuration</a></dt>
|
||
<dt><a href="definitions.html">Definitions</a></dt>
|
||
<dt><a href="reference.html">Reference</a> [pdf: <a href="reference.pdf">
|
||
English</a>]</dt>
|
||
<dt><a href="rationale.html">Rationale</a> [pdf: <a href="rationale.pdf">
|
||
English</a>]</dt>
|
||
<dt><a href="performance.html">Performance</a></dt>
|
||
<dt><a href="acknowledgments.html">Acknowledgments</a></dt>
|
||
<dd> </dd>
|
||
<dt><a href="#To-do_list">To-do list</a></dt>
|
||
<dt><a href="#Change_history">Change history</a></dt>
|
||
</dl>
|
||
<hr>
|
||
<h2><a name="Overview">Overview</a></h2>
|
||
<p>Welcome to Boost.Statechart, a C++ library for finite state machines. Features
|
||
include:</p>
|
||
<ul>
|
||
<li>Straightforward transformation from UML statechart to executable C++ code
|
||
and vice versa. Currently, this needs to be done manually both ways but it
|
||
should not be difficult to automate these tasks</li>
|
||
<li>Comprehensive <a href="http://www.omg.org/cgi-bin/doc?formal/03-03-01">
|
||
UML semantics</a> support:<ul>
|
||
<li>Hierarchical (composite, nested) states</li>
|
||
<li>Orthogonal (concurrent) states</li>
|
||
<li>Entry-, exit- and transition-actions</li>
|
||
<li>Guards</li>
|
||
<li>Shallow/deep history</li>
|
||
<li>Event deferral</li>
|
||
</ul>
|
||
</li>
|
||
<li>Error handling support</li>
|
||
<li>Maximum type-safety</li>
|
||
<li>Compile-time statechart validation</li>
|
||
<li>Support for asynchronous state machines and multi-threading</li>
|
||
<li>State-local storage</li>
|
||
<li>Generic design allowing for the customization of memory management,
|
||
error handling and threading</li>
|
||
</ul>
|
||
<h3><a name="Supported_platforms">Supported platforms</a></h3>
|
||
<p>All code has been tested on the following platforms using boost
|
||
distribution 1.32.0:</p>
|
||
<ul>
|
||
<li>MSVC 7.1 (the compiler coming with MS Visual Studio 2003)</li>
|
||
<li>GCC 3.4.2 (MinGW 3.2.0)</li>
|
||
</ul>
|
||
<p>In addition, previous versions of the library have also been tested on
|
||
the following platforms (I expect the current version to work, but it hasn't
|
||
been tested yet):</p>
|
||
<ul>
|
||
<li>GCC 3.2 (Red Hat Linux)</li>
|
||
<li>GCC 3.2.3 (MinGW 3.1.0)</li>
|
||
<li>GCC 3.3.1 (Dev-C++ 4.9.9.0): In release mode HistoryTest compilation
|
||
takes forever and compiler memory footprint goes beyond 400MB, most likely
|
||
a GCC bug</li>
|
||
<li>Intel 8.0 (Win32, MS Visual Studio 2003 std library)</li>
|
||
<li>Intel 8.1 (Win32, MS Visual Studio 2003 std library). All the examples
|
||
worked as expected but some tests failed with an access violation inside the
|
||
boost testing framework. Unfortunately, my evaluation license of the
|
||
compiler expired before I managed to pin down the problem</li>
|
||
</ul>
|
||
<h3><a name="Incompatible_compilers">Incompatible compilers</a></h3>
|
||
<p>The following compilers are known to have problems with Boost.Statechart:</p>
|
||
<ul>
|
||
<li>MSVC 6.0 & 7.0: Many compiler errors</li>
|
||
<li>Intel 7.0 (Win32, MS Visual Studio 6 std library). Most of the library,
|
||
the examples and the tests can be compiled but the compiler appears to
|
||
generate wrong code under certain circumstances, leading to crashes
|
||
(currently (2005/05/16) the following tests fail: StateCastTest.cpp and
|
||
TransitionTest.cpp)</li>
|
||
<li>BCB (all versions): Many compiler errors</li>
|
||
</ul>
|
||
<h3><a name="Getting_started">Getting started</a></h3>
|
||
<p>Boost.Statechart builds on other parts of the boost library. In order to use this
|
||
library, the statechart directories need to be copied to their respective locations
|
||
in the tree of the boost distribution 1.32.0. Specifically:</p>
|
||
<ol>
|
||
<li>Follow the steps 1-3 described
|
||
at <a href="http://www.boost.org/more/getting_started.html">
|
||
http://www.boost.org/more/getting_started.html</a>. After
|
||
doing so, somewhere on your harddrive you should have a directory
|
||
containing the boost distribution (e.g. under <code>D:\Data\boost_1_32_0</code>)
|
||
and the bjam executable installed in your <code>PATH</code></li>
|
||
<li>Download <a href="http://boost-sandbox.sf.net/Statechart.zip">
|
||
http://boost-sandbox.sf.net/Statechart.zip</a> and unpack it somewhere on your harddrive, e.g. under
|
||
<code>D:\Data\Statechart</code></li>
|
||
<li>Copy the directory <code>D:\Data\Statechart\boost\statechart</code> and all its
|
||
contents to <code>D:\Data\boost_1_32_0\boost\statechart</code></li>
|
||
<li>Copy the directory <code>D:\Data\Statechart\libs\statechart</code> and all its
|
||
contents to <code>D:\Data\boost_1_32_0\libs\statechart</code></li>
|
||
<li>Open a command prompt and change the current directory to
|
||
<code>D:\Data\boost_1_32_0\libs\statechart\examples</code></li>
|
||
<li>To compile the examples, invoke bjam with your toolset. For example,
|
||
for MSVC7.1, type <code>bjam "-sTOOLS=vc-7_1"</code>. This may
|
||
take a few minutes. After the build has finished you will find all
|
||
executables in <code>
|
||
D:\Data\boost_1_32_0\libs\statechart\examples\run</code>. In addition to the
|
||
examples discussed in the tutorial, this script also builds the BitMachine executable in different variants, which show the effects of
|
||
various choices on runtime performance, executable size, etc. Moreover,
|
||
the Handcrafted executable is also built, which serves to compare
|
||
performance of a simple Boost.Statechart machine with its handcrafted equivalent</li>
|
||
<li>To run the tests, invoke bjam in the directory
|
||
<code>D:\Data\boost_1_32_0\libs\statechart\test</code></li>
|
||
</ol>
|
||
<h3><a name="Audience">Audience</a></h3>
|
||
<p>Throughout all Boost.Statechart documentation it is assumed that the reader is
|
||
familiar with the state machine concept, UML statecharts and most of the UML
|
||
state machine terminology. The following links might be interesting if this is
|
||
not the case:</p>
|
||
<ul>
|
||
<li><a href="http://www.objectmentor.com/resources/articles/umlfsm.pdf">
|
||
http://www.objectmentor.com/resources/articles/umlfsm.pdf</a> introduces
|
||
state machines and UML statecharts</li>
|
||
<li>
|
||
<a href="http://www.sts.tu-harburg.de/teaching/ws-99.00/OOA+D/StateDiagrams.pdf">
|
||
http://www.sts.tu-harburg.de/teaching/ws-99.00/OOA+D/StateDiagrams.pdf</a>
|
||
explains most of the UML statechart elements and terminology</li>
|
||
<li>The inventor of statecharts, David Harel, presents a thorough but still
|
||
very readable discussion in his original paper:
|
||
<a href="http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf">
|
||
http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf</a></li>
|
||
<li>The UML specifications (formal) can be found here:
|
||
<a href="http://www.omg.org/cgi-bin/doc?formal/03-03-01">
|
||
http://www.omg.org/cgi-bin/doc?formal/03-03-01</a> (see chapters 2.12 and
|
||
3.74)</li>
|
||
</ul>
|
||
<p>Some of the used terminology cannot be found in the UML specifications,
|
||
please see <a href="definitions.html">Definitions</a> for more information.</p>
|
||
<hr>
|
||
<h2><a name="To-do_list">To-do list</a></h2>
|
||
<p>The library is mostly complete. However, there is some work
|
||
left (<font color="#FF0000">red</font> = added as a result of the formal
|
||
review):</p>
|
||
<ol>
|
||
<li>Design a facility allowing to specially handle events that did not
|
||
trigger a reaction</li>
|
||
<li><font color="#FF0000">Eliminate the need to wrap a single templated inner
|
||
initial state into an mpl::list (Jonathan Turkanis)</font></li>
|
||
<li><font color="#FF0000">Add a trouble-shooting section for compile-time
|
||
errors (John Spalding)</font></li>
|
||
<li><font color="#FF0000">Augment the rationale for state-local storage
|
||
with the code for a StopWatch variant that does not use state-local storage
|
||
and explain the drawbacks of that approach (Jeff Garland, Rob Steward)</font></li>
|
||
<li><font color="#FF0000">Put all remarks about code as comments inside
|
||
the code (Pavel Vozenilek, Augustus Saunders)</font></li>
|
||
<li><font color="#FF0000">Implement a switch-like reaction (Simon Gittins,
|
||
Darryl Green)</font></li>
|
||
<li>Investigate how a state machine could be serialized. A first glance at
|
||
the serialization library revealed that there currently (late 2004) is no
|
||
support for types that overload <code>operator new</code>. Such support
|
||
would be essential for Boost.Statechart serialization since there doesn't
|
||
seem to be any way to detect whether a state has an overloaded <code>
|
||
operator new</code> or not</li>
|
||
<li>Add allocator support for broken std libs when the workaround is
|
||
available in boost::detail</li>
|
||
<li>Ensure that the library can be compiled with exception support turned
|
||
off</li>
|
||
<li><font color="#FF0000">Investigate how constant-time dispatch for
|
||
non-orthogonal state machines can be implemented (David Abrahams, Jonathan Turkanis,
|
||
Rob Steward, Dave Gomboc)</font></li>
|
||
<li><font color="#FF0000">Compare performance for allocator-allocated
|
||
states with the one of the best possible hand-written state-specific
|
||
operator new implementation. If there is no significant difference change
|
||
the implementation to use the allocator to allocate states (Peter Petrov)</font></li>
|
||
<li>Reimplement <code>fifo_scheduler<>::processor_handle</code> so that
|
||
<code>fifo_scheduler<>::create_processor<>()</code> and <code>fifo_scheduler<>::destroy_processor()</code>
|
||
no longer make (indirect) calls to global <code>operator new()</code> and
|
||
<code>operator delete()</code></li>
|
||
<li>Link incomplete code-snippets in the tutorial to complete example code
|
||
where available</li>
|
||
<li>Where appropriate, link the reference documentation to examples</li>
|
||
<li><font color="#FF0000">Add a description of the implementation and
|
||
better explain performance trade-offs (Jonathan Turkanis)</font></li>
|
||
<li><font color="#FF0000">Add links to descriptions of alternate
|
||
implementations and discuss performance trade-offs (Jonathan Turkanis)</font></li>
|
||
<li>Implement <code>priority_scheduler<></code></li>
|
||
<li><font color="#FF0000">Add a list of applications that use Boost.Statechart
|
||
(Paul A. Bristow)</font></li>
|
||
<li>Improve performance for state machines that use <code>null_exception_translator</code></li>
|
||
<li>Refactor the <code>state_machine</code> class template to reduce code
|
||
size in applications with many different state machines</li>
|
||
<li>Investigate whether and how <code>fifo_worker<></code> should accept a policy
|
||
parameter defining how to lock and wait</li>
|
||
<li>Add a diagram that helps to understand what an unstable state machine
|
||
is</li>
|
||
<li>Comment MPL-heavy code</li>
|
||
<li>Comment <code>processor_holder_ptr_type</code></li>
|
||
<li>Add examples of often made mistakes</li>
|
||
<li>Eliminate code-duplication in <code>fifo_scheduler</code> with PP code
|
||
submitted by Pavel Vozenilek</li>
|
||
<li>Add number and label to all diagrams in docs</li>
|
||
<li>Add <code>#pragma once</code> to all headers (speeds up compilation
|
||
with MS-compatible compilers)</li>
|
||
<li>Issue an error if <code>BOOST_STATECHART_USE_NATIVE_RTTI</code> is defined
|
||
when C++ RTTI is turned off</li>
|
||
</ol>
|
||
<h2><a name="Change_history">Change history</a></h2>
|
||
<p>XX August, 2005</p>
|
||
<ul>
|
||
<li>Added Jamfile.v2 files</li>
|
||
<li>Added <code>event_base</code> specializations to all reactions and
|
||
updated the reference accordingly. This allows to implement reactions
|
||
triggered by an event of any type</li>
|
||
</ul>
|
||
<p>19 June, 2005</p>
|
||
<ul>
|
||
<li>Updated the documentation for the new reaction
|
||
specification interface</li>
|
||
<li><font color="#FF0000">Invalid calls to reaction functions now always
|
||
lead to a failing runtime assert (Jonathan Turkanis). In debug mode the
|
||
<code>result</code> type is a class
|
||
with destructive copy semantics, enabling the detection of a wider range
|
||
of reaction function abuses. Added appropriate tests and updated the
|
||
documentation</font></li>
|
||
<li><font color="#FF0000">Separated performance-related docs from the
|
||
rationale into a page of its own (Pavel Vozenilek)</font></li>
|
||
<li><font color="#FF0000">Added clone functionality to events so that
|
||
stack-allocated events can now be deferred and posted. Updated the
|
||
documentation and tests accordingly (Jonathan Turkanis)</font></li>
|
||
<li><font color="#FF0000">Clarified the definition of context (John Spalding)</font></li>
|
||
<li><font color="#FF0000">Implemented <code>in_state_reaction<></code>.
|
||
Updated the documentation and tests accordingly (Darryl
|
||
Green)</font></li>
|
||
</ul>
|
||
<p></p>
|
||
<p>12 May, 2005</p>
|
||
<ul>
|
||
<li><b><font color="#FF0000">Breaking change: Changed the library namespace from <code>fsm</code>
|
||
to <code>statechart</code> (Alexander Nasonov, David Abrahams)</font></b></li>
|
||
<li><b><font color="#FF0000">Breaking change: Changed the library name from boost::fsm to
|
||
Boost.Statechart (Alexander Nasonov, David Abrahams)</font></b></li>
|
||
<li><b><font color="#FF0000">Breaking change: Reactions are now specified with a <code>reactions</code> member
|
||
typedef in a state class declaration instead of a template parameter (Alexander Nasonov),
|
||
not yet documented.</font></b></li>
|
||
</ul>
|
||
<p>03 May, 2005</p>
|
||
<ul>
|
||
<li>Removed the to-do item for the <code>std::type_info</code> replacement. Thanks to
|
||
Jody Hagins for taking care of that!</li>
|
||
<li>Added to-do items for the issues uncovered during the review</li>
|
||
<li>Fixed documentation bugs in the effects descriptions for <code>
|
||
state_machine::initiate()</code>, <code>state_machine::terminate()</code>
|
||
and <code>state_machine::process_event()</code></li>
|
||
<li><font color="#FF0000">Moved "Getting started" and "Audience" into index.html
|
||
(Augustus Saunders)</font></li>
|
||
<li><font color="#FF0000">Added Basic topics and Intermediate topics
|
||
headings and shortened the "How to read this tutorial" section (Augustus
|
||
Saunders)</font></li>
|
||
</ul>
|
||
<p>21 February, 2005</p>
|
||
<p></p>
|
||
<ul>
|
||
<li>Corrected the review period length mentioned above (absolutely no
|
||
changes to code and documentation)</li>
|
||
</ul>
|
||
<p>20 February, 2005</p>
|
||
<p></p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: Incorporated a part of <code>
|
||
exception_translator::operator()</code> code into the <code>state_machine</code>
|
||
class template. This simplifies custom exception translators and makes
|
||
implementing them less error-prone</li>
|
||
<li><b>Breaking change</b>: A request to defer an exception event is no
|
||
longer honored and ultimately results in the exception being rethrown. This
|
||
change is the result of the rule that during the processing of an exception
|
||
no non-user code must be called that could itself propagate an exception and
|
||
thus mask the original exception (for event deferral <code>operator new</code>
|
||
must be called, which could throw). Exception event deferral has always been
|
||
a strange concept anyway</li>
|
||
<li>Various code brush-ups</li>
|
||
</ul>
|
||
<p>09 February, 2005</p>
|
||
<p></p>
|
||
<ul>
|
||
<li>Added exception testing to TransitionTest</li>
|
||
<li>Fixed a bug that led to an access violation when orthogonal region 0
|
||
of a state was terminated before exiting the state (either through another
|
||
termination or a transition)</li>
|
||
<li>Various minor changes</li>
|
||
</ul>
|
||
<p>07 February, 2005</p>
|
||
<p></p>
|
||
<ul>
|
||
<li>Added FifoSchedulerTest, TerminationTest, CustomReactionTest, StateIterationTest, TypeInfoTest, StateCastTest, HistoryTest and tests for
|
||
inconsistent uses of history, unsupported types of deep history and
|
||
invalid statecharts</li>
|
||
<li>Fixed a bug that led to a compile-time error when <code>state_downcast</code>
|
||
was instantiated with a reference target</li>
|
||
<li>Fixed a bug that led to a null function pointer dereference when
|
||
history was cleared before making a transition to history</li>
|
||
<li>Updated the "Speed versus scalability tradeoffs" section</li>
|
||
<li>Fixed previously failing builds of single-threaded variants of the
|
||
PingPong example</li>
|
||
<li>Moved the "Incompatible compilers" section to index.html</li>
|
||
<li>Added explanation for the BitMachine & Handcrafted examples</li>
|
||
<li>Various minor changes</li>
|
||
</ul>
|
||
<p>25 November, 2004</p>
|
||
<ul>
|
||
<li>Adapted to the changes in the 1.32.0 distribution (mainly MPL
|
||
changes). The library no longer works with 1.31.0</li>
|
||
<li>Fixed a bug that led to a failing runtime assert during state machine
|
||
destruction</li>
|
||
<li>Fixed a bug that led to events deferred in a composite state not being
|
||
released when that state was left</li>
|
||
<li>Added TransitionTest and DeferralTest</li>
|
||
</ul>
|
||
<p>19 October, 2004</p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: Out of the box, a state machine no longer uses
|
||
<code>exception_translator<></code> to translate exceptions propagated into
|
||
the framework. Instead, <code>null_exception_translator</code> is now used,
|
||
which does not catch or translate any exceptions. Updated docs accordingly</li>
|
||
<li>Implemented <a href="tutorial.html#Two_stage_exit">two stage exit</a> and updated docs accordingly</li>
|
||
<li>Implemented an experimental feature that allows a transition action to
|
||
be a member of the transition source or any of its direct or indirect
|
||
contexts, see
|
||
<a href="configuration.html#Application Defined Macros">BOOST_STATECHART_RELAX_TRANSITION_CONTEXT</a></li>
|
||
<li>Various small code and documentation improvements</li>
|
||
</ul>
|
||
<p>22 May, 2004</p>
|
||
<ul>
|
||
<li>Integrated the Intel 7.0 workarounds provided by Pavel Vozenilek (most
|
||
are std library workarounds)</li>
|
||
<li>Added the Intel 7.0 section to the configuration page</li>
|
||
<li>Updated copyright notices</li>
|
||
</ul>
|
||
<p>12 May, 2004</p>
|
||
<ul>
|
||
<li>Fixed a bug that could have led to an <code>exception_thrown</code>
|
||
event being sent to a state that is <b>not</b> the outermost unstable state
|
||
in an unstable state machine (as documented in the reference). Instead, the
|
||
event was sent to the state where the entry action of a direct inner state
|
||
threw an exception, which is only correct for state machines without
|
||
orthogonal regions. Also updated the
|
||
<a href="tutorial.html#Exception handling">Exception handling</a> section in
|
||
the tutorial, which now explains this behavior in detail</li>
|
||
<li>Fixed bug that, under extremely rare circumstances, would have prevented
|
||
the correct handling of out of memory situations</li>
|
||
<li>Fixed an inconsistency in the state entry sequence when a state in an
|
||
orthogonal region is the target of a transition originating outside its
|
||
direct outer state. Now the states are always entered according to the
|
||
number of their orthogonal region, i.e. orthogonal region 0 first, then
|
||
orthogonal region 1 and so on. Since the documentation did not define the
|
||
sequence (it does now) users should not notice any difference</li>
|
||
<li>Changed the implementation of <code>state_machine::terminate()</code> so
|
||
that orthogonal regions are now exited strictly from highest to lowest
|
||
number instead of arbitrarily as before. Updated docs accordingly</li>
|
||
</ul>
|
||
<p>22 April, 2004</p>
|
||
<ul>
|
||
<li>Removed the previously added BCC 5.6.4 fixes (the BCC port was postponed
|
||
due to lack of knowledge how to work around certain bugs)</li>
|
||
<li>Replaced all uses of <code>BOOST_STATIC_CONSTANT</code> with their mpl
|
||
counterparts (<code>bool_</code>, <code>integral_c</code>). As a result,
|
||
ports to buggy compilers should become easier</li>
|
||
<li>Clarified some bits in the tutorial and added StopWatch2.cpp, which
|
||
details an alternative way of retrieving state machine state</li>
|
||
</ul>
|
||
<p>10 April, 2004</p>
|
||
<ul>
|
||
<li>Added two BCC 5.6.4 fixes contributed by Pavel Vozenilek; Boost.Statechart
|
||
does not yet work on BCC though</li>
|
||
<li>Implemented a few of the documentation and code improvements suggested
|
||
by Pavel Vozenilek, including the new "UML to Boost.Statechart mapping summary"
|
||
document</li>
|
||
</ul>
|
||
<p>26 March, 2004</p>
|
||
<ul>
|
||
<li>Fixed a small Intel 8.0 bug in the BitMachine example</li>
|
||
</ul>
|
||
<p>25 March, 2004</p>
|
||
<ul>
|
||
<li>Now everything compiles warning-free on Intel 8.0</li>
|
||
</ul>
|
||
<p>21 March, 2004</p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: <code>fifo_scheduler<></code> and <code>
|
||
fifo_worker<></code> now always work non-blocking by default </li>
|
||
<li>Added gcc makefiles, contributed by Mitsuo Fukasawa</li>
|
||
<li>Added a fixed version of atomic_count_gcc.hpp to fsm.zip, see
|
||
<a href="http://lists.boost.org/MailArchives/boost/msg57537.php">
|
||
http://lists.boost.org/MailArchives/boost/msg57537.php</a> for more
|
||
information</li>
|
||
</ul>
|
||
<p>16 March, 2004</p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: Added the <code>FifoWorker</code> template
|
||
parameter to <code>fifo_scheduler<></code> and updated documentation and
|
||
examples accordingly</li>
|
||
</ul>
|
||
<p>13 March, 2004</p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: Renamed <code>worker<></code> to <code>
|
||
fifo_scheduler<></code> and updated documentation and examples accordingly</li>
|
||
<li>Changed the <code>fifo_scheduler<></code> implementation so that a
|
||
custom worker implementation needs to duplicate less code</li>
|
||
<li>Various other small code and doc changes</li>
|
||
</ul>
|
||
<p>03 March, 2004</p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: Redesigned the <code>worker<></code> and <code>
|
||
asynchronous_state_machine<></code> class templates and updated
|
||
documentation accordingly. Event processors can now be added and removed
|
||
while a worker is running. Moreover, the new design allows for custom
|
||
workers with non-FIFO queueing schemes</li>
|
||
<li>The StopWatch example now uses <code>std::time()</code> instead of <code>
|
||
std::clock()</code></li>
|
||
</ul>
|
||
<p>09 February, 2004</p>
|
||
<ul>
|
||
<li>Integrated the standard conformance fixes contributed by Peter Petrov.
|
||
The library now also works on GCC 3.2 and should be much easier to port to
|
||
other highly conforming compilers</li>
|
||
<li>Added the state type information facility to <code>simple_state</code></li>
|
||
<li>Added the function templates <code>simple_state::clear_shallow_history()</code>
|
||
and <code>simple_state::clear_deep_history()</code></li>
|
||
</ul>
|
||
<p>11 January, 2004</p>
|
||
<ul>
|
||
<li>Finished reference documentation</li>
|
||
<li>Updated Copyright notices</li>
|
||
</ul>
|
||
<p>12 December, 2003</p>
|
||
<ul>
|
||
<li><b>Thanks to Mitsuo Fukasawa the tutorial is now also available in
|
||
Japanese!!!</b></li>
|
||
<li>Added a state type information facility</li>
|
||
<li>Added reference (unfinished) and configuration documentation and updated
|
||
other documents</li>
|
||
<li>Various code brush-ups (no breaking changes)</li>
|
||
</ul>
|
||
<p>12 October, 2003</p>
|
||
<ul>
|
||
<li><b>Breaking change</b>: Removed <code>rtti_policy<></code> from the
|
||
interface. By default, the library now uses its own (often faster) RTTI
|
||
implementation. Users can demand the use of native C++ RTTI by defining
|
||
<code>BOOST_STATECHART_USE_NATIVE_RTTI</code>. This change only affects users who
|
||
customized <code>state_machine<></code>, <code>asynchronous_state_machine<></code>
|
||
or <code>worker<></code></li>
|
||
<li><b>Breaking change</b>: Reordered template arguments of <code>
|
||
state_machine<></code> and <code>asynchronous_state_machine<></code>. This
|
||
change only affects users who customized <code>state_machine<></code> or
|
||
<code>asynchronous_state_machine<></code></li>
|
||
<li>Added shallow/deep history support and updated documentation accordingly</li>
|
||
<li>Added various compile-time sanity checks</li>
|
||
<li>Added 1 FAQ (asked by Mitsuo Fukasawa)</li>
|
||
</ul>
|
||
<p>16 August, 2003</p>
|
||
<ul>
|
||
<li>Added <code>asynchronous_state_machine<></code> and <code>worker<></code>
|
||
and updated documentation accordingly</li>
|
||
<li>Various minor bug fixes and code improvements (no breaking interface
|
||
changes)</li>
|
||
<li>Added Keyboard and PingPong examples</li>
|
||
<li>Added .pdf documentation</li>
|
||
</ul>
|
||
<p>08 June, 2003</p>
|
||
<ul>
|
||
<li>Added 3 FAQs (asked by Bohdan) & 1 definition</li>
|
||
<li>Removed the superfluous public derivation specifiers in the tutorial and
|
||
the examples as suggested by Aleksey Gurtovoy</li>
|
||
<li>Various code improvements (no interface changes)</li>
|
||
<li>Various html improvements</li>
|
||
</ul>
|
||
<hr>
|
||
<p>Revised
|
||
<!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->21 July, 2005<!--webbot bot="Timestamp" endspan i-checksum="21128" --></p>
|
||
<p><i><EFBFBD> Copyright <a href="mailto:ahd6974-spamgroupstrap@yahoo.com">Andreas Huber D<>nni</a>
|
||
2003-2005. <font color="#FF0000"><b>The link refers to a
|
||
<a href="http://en.wikipedia.org/wiki/Honeypot">spam honeypot</a>. Please remove the words spam and trap
|
||
to obtain my real address.</b></font></i></p>
|
||
<p><i>Distributed under the Boost Software License, Version 1.0. (See
|
||
accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
|
||
copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
|
||
http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
|
||
|
||
</body>
|
||
|
||
</html>
|