|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
<html>
|
|
Packit |
58578d |
<head>
|
|
Packit |
58578d |
<meta http-equiv="Content-Language" content="en-us">
|
|
Packit |
58578d |
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
|
Packit |
58578d |
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
|
|
Packit |
58578d |
<meta name="ProgId" content="FrontPage.Editor.Document">
|
|
Packit |
58578d |
<link rel="stylesheet" type="text/css" href="../../../boost.css">
|
|
Packit |
58578d |
|
|
Packit |
58578d |
<title>The Boost Statechart Library - Overview</title>
|
|
Packit |
58578d |
</head>
|
|
Packit |
58578d |
|
|
Packit |
58578d |
<body link="#0000FF" vlink="#800080">
|
|
Packit |
58578d |
|
|
Packit |
58578d |
"header">
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
"../../../boost.png" border="0" width="277" height="86">
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
The Boost Statechart Library
|
|
Packit |
58578d |
|
|
Packit |
58578d |
(formerly known as boost::fsm)
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Overview
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Contents
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Overview
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Supported platforms
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Getting started
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Audience
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Tutorial [pdf:
|
|
Packit |
58578d |
"tutorial.pdf">English,
|
|
Packit |
58578d |
"http://prdownloads.sourceforge.jp/jyugem/7127/fsm-tutorial-jp.pdf">Japanese]
|
|
Packit |
58578d |
|
|
Packit |
58578d |
UML to Boost.Statechart mapping
|
|
Packit |
58578d |
summary
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Frequently Asked Questions (FAQs)
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Configuration
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Definitions
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Reference [pdf:
|
|
Packit |
58578d |
"reference.pdf">English]
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Rationale [pdf:
|
|
Packit |
58578d |
"rationale.pdf">English]
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Performance
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Acknowledgments
|
|
Packit |
58578d |
|
|
Packit |
58578d |
To-do list
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Change
|
|
Packit |
58578d |
history
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Welcome to Boost.Statechart, a C++ library for finite state machines.
|
|
Packit |
58578d |
Features include:
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Straightforward transformation from UML statechart to executable C++
|
|
Packit |
58578d |
code and vice versa. Currently, this needs to be done manually both ways
|
|
Packit |
58578d |
but it should not be difficult to automate these tasks
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Comprehensive
|
|
Packit |
58578d |
"http://www.omg.org/cgi-bin/doc?formal/03-03-01">UML semantics
|
|
Packit |
58578d |
support:
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Hierarchical (composite, nested) states
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Orthogonal (concurrent) states
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Entry-, exit- and transition-actions
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Guards
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Shallow/deep history
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Event deferral
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Error handling support
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Maximum type-safety
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Compile-time statechart validation
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Support for asynchronous state machines and multi-threading
|
|
Packit |
58578d |
|
|
Packit |
58578d |
State-local storage
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Generic design allowing for the customization of memory management,
|
|
Packit |
58578d |
error handling and threading
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
platforms
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Whether and how Boost.Statechart will work on your platform is best
|
|
Packit |
58578d |
determined on the
|
|
Packit |
58578d |
"http://www.boost.org/development/tests/trunk/developer/statechart.html">
|
|
Packit |
58578d |
status page. If the cells in your compilers column are all green, the
|
|
Packit |
58578d |
library should work as advertised. Cells of different color indicate
|
|
Packit |
58578d |
possible problems; follow the links for details. Before employing the
|
|
Packit |
58578d |
library I would also advise to run the tests (see
|
|
Packit |
58578d |
"#GettingStarted">Getting started) on your particular platform in all
|
|
Packit |
58578d |
the modes (debug, release, etc.) that are later used during development
|
|
Packit |
58578d |
(the status page shows debug mode results only). The closer the test
|
|
Packit |
58578d |
compiler switches mirror the ones that are later used during development,
|
|
Packit |
58578d |
the less likely are future surprises. An example of such a surprise is
|
|
Packit |
58578d |
Intel 9.0 with MSVC 7.1 base toolset, where DllTestNormal and DllTestNative
|
|
Packit |
58578d |
pass in debug mode but fail in release mode.
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Follow the steps 1-4 described on the
|
|
Packit |
58578d |
"../../../more/getting_started.html">Boost Getting Started Page.
|
|
Packit |
58578d |
Since Boost.Statechart is a header-only library, you should now know
|
|
Packit |
58578d |
enough to compile the examples in the tutorial in your favorite
|
|
Packit |
58578d |
environment (except PingPong which requires Boost.Thread binaries)
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Optional: If you want to compile the PingPong example or use
|
|
Packit |
58578d |
"reference.html#ClassTemplatefifo_scheduler">fifo_scheduler<>
|
|
Packit |
58578d |
in your project, you need to get hold of the Boost.Thread binaries and
|
|
Packit |
58578d |
link against them, see steps 5-6 on the Boost Getting Started Page
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Optional: If you want to run the tests, you need to get the bjam
|
|
Packit |
58578d |
executable, as described under step 5.2 on the Boost Getting Started
|
|
Packit |
58578d |
Page. After doing so, bjam should be installed in your PATH .
|
|
Packit |
58578d |
Open a command prompt and change the current directory to
|
|
Packit |
58578d |
boost_1_38_0/libs/statechart/test . Type
|
|
Packit |
58578d |
|
|
Packit |
58578d |
bjam --toolset=your-toolset
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
(where your-toolset is one of the names
|
|
Packit |
58578d |
documented under step 5.2.2 on the Boost Getting Started Page) and hit
|
|
Packit |
58578d |
CR. After the test run, failures (if any) are indicated at the end of
|
|
Packit |
58578d |
the output, in the form of a "...failed updating X
|
|
Packit |
58578d |
targets..." message. For some platforms certain failures are
|
|
Packit |
58578d |
expected, see Supported
|
|
Packit |
58578d |
platforms.
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Throughout all Boost.Statechart documentation it is assumed that the
|
|
Packit |
58578d |
reader is familiar with the state machine concept, UML statecharts and most
|
|
Packit |
58578d |
of the UML state machine terminology. The following links might be
|
|
Packit |
58578d |
interesting if this is not the case:
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
"http://www.objectmentor.com/resources/articles/umlfsm.pdf">http://www.objectmentor.com/resources/articles/umlfsm.pdf
|
|
Packit |
58578d |
introduces state machines and UML statecharts
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
"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
|
|
Packit |
58578d |
explains most of the UML statechart elements and terminology
|
|
Packit |
58578d |
|
|
Packit |
58578d |
The inventor of statecharts, David Harel, presents a thorough but
|
|
Packit |
58578d |
still very readable discussion in his original paper: :
|
|
Packit |
58578d |
"http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf">
|
|
Packit |
58578d |
http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf
|
|
Packit |
58578d |
|
|
Packit |
58578d |
The UML specifications (formal) can be found here:
|
|
Packit |
58578d |
"http://www.omg.org/cgi-bin/doc?formal/03-03-01">http://www.omg.org/cgi-bin/doc?formal/03-03-01
|
|
Packit |
58578d |
(see chapters 2.12 and 3.74)
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Some of the used terminology cannot be found in the UML specifications,
|
|
Packit |
58578d |
please see Definitions for more
|
|
Packit |
58578d |
information.
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
"../../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional"
|
|
Packit |
58578d |
height="31" width="88">
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Revised
|
|
Packit |
58578d |
09 April, 2007
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Copyright © 2003-2007
|
|
Packit |
58578d |
Andreas Huber Dönni
|
|
Packit |
58578d |
|
|
Packit |
58578d |
Distributed under the Boost Software License, Version 1.0. (See
|
|
Packit |
58578d |
accompanying file LICENSE_1_0.txt or
|
|
Packit |
58578d |
copy at
|
|
Packit |
58578d |
"http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt)
|
|
Packit |
58578d |
</body>
|
|
Packit |
58578d |
</html>
|