1 <!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
5 <meta http-equiv=
"Content-Language" content=
"en-us">
6 <meta http-equiv=
"Content-Type" content=
"text/html; charset=us-ascii">
7 <meta name=
"GENERATOR" content=
"Microsoft FrontPage 6.0">
8 <meta name=
"ProgId" content=
"FrontPage.Editor.Document">
9 <link rel=
"stylesheet" type=
"text/css" href=
"../../../boost.css">
11 <title>The Boost Statechart Library - Overview
</title>
14 <body link=
"#0000FF" vlink=
"#800080">
15 <table border=
"0" cellpadding=
"7" cellspacing=
"0" width=
"100%" summary=
18 <td valign=
"top" width=
"300">
19 <h3><a href=
"../../../index.htm"><img alt=
"C++ Boost" src=
20 "../../../boost.png" border=
"0" width=
"277" height=
"86"></a></h3>
24 <h1 align=
"center">The Boost Statechart Library
</h1>
26 <h2 align=
"center">Future
& History
</h2>
35 <dt><a href=
"#ToDoList">To-do list
</a></dt>
37 <dt><a href=
"#ChangeHistory">Change history
</a></dt>
41 <h2><a name=
"ToDoList" id=
"ToDoList">To-do list
</a></h2>
43 <p>The library is mostly complete. However, there is some work left
44 (
<font color=
"#FF0000">red
</font> = added as a result of the formal
48 <li>Implement a choice-point-like class, as discussed in
49 <a href=
"http://thread.gmane.org/gmane.comp.lib.boost.devel/164460">this
52 <li>Optimize state-entry and state-exit for speed and code-size
</li>
54 <li>Reimplement
<code>fifo_scheduler
<>::processor_handle
</code> so
55 that
<code>fifo_scheduler
<>::create_processor
<>()
</code> and
56 <code>fifo_scheduler
<>::destroy_processor()
</code> no longer make
57 (indirect) calls to global
<code>operator new()
</code> and
<code>operator
60 <li>Ensure that everything is compileable with C++ RTTI support turned
61 off (this requires currently lacking support in Boost.Config and probably
62 a patch for
<code>shared_ptr
</code>)
</li>
64 <li>Issue an error if
<code>BOOST_STATECHART_USE_NATIVE_RTTI
</code> is
65 defined when C++ RTTI is turned off
</li>
67 <li>The current requirement to pass an
<code>mpl::list
<></code> to
68 specify inner initial states and reactions is too strict. Check the
69 requirements on the sequences and document them accordingly (David
72 <li>Make compilation performance measurements with mpl::vector and
73 mpl::deque instead of mpl::list to find out which is fastest. Document a
74 recommendation for the fastest container and change all examples
75 accordingly (David Abrahams)
</li>
77 <li>Investigate how a state machine could be serialized. A first glance
78 at the serialization library revealed that there currently (
1.33) is no
79 support for types that overload
<code>operator new
</code> (suitable code
80 is already present in the serialization library but it is currently
81 commented out due to incompatibilities with certain compilers). Such
82 support would be essential for Boost.Statechart serialization
</li>
84 <li><font color=
"#FF0000">Implement a switch-like reaction (Simon
85 Gittins, Darryl Green)
</font></li>
87 <li>Link incomplete code-snippets in the tutorial to complete example
88 code where available
</li>
90 <li>Where appropriate, link the reference documentation to examples
</li>
92 <li><font color=
"#FF0000">Add a description of the implementation and
93 better explain performance trade-offs (Jonathan Turkanis)
</font></li>
95 <li><font color=
"#FF0000">Add links to descriptions of alternate
96 implementations and discuss performance trade-offs (Jonathan
99 <li><font color=
"#FF0000">Add a list of applications that use
100 Boost.Statechart (Paul A. Bristow)
</font></li>
102 <li>Refactor the
<code>state_machine
</code> class template to reduce code
103 size in applications with many different state machines
</li>
105 <li>Add a diagram that helps to understand what an unstable state machine
108 <li>Comment MPL-heavy code
</li>
110 <li>Add examples of often made mistakes
</li>
112 <li>Implement
<code>priority_scheduler
<></code></li>
114 <li>Eliminate code-duplication in
<code>fifo_scheduler
</code> with PP
115 code submitted by Pavel Vozenilek
</li>
117 <li>Add number and label to all diagrams in docs
</li>
119 <li>Add
<code>#pragma once
</code> to all headers (speeds up compilation
120 with MS-compatible compilers)
</li>
122 <li>Investigate whether and how
<code>fifo_worker
<></code> should
123 accept a policy parameter defining how to lock and wait
</li>
126 <h2><a name=
"ChangeHistory" id=
"ChangeHistory">Change history
</a></h2>
128 <p>(
<font color=
"#FF0000">red
</font> = points raised during formal
132 <li>Fixed Bug #
4817 (The order of deferred events is not preserved under
133 certain circumstances), reported by Igor R
</li>
134 <li>Fixed Bug #
4511 (MSVC10 warning due to lack of placement operator
135 delete), reported by Igor R
</li>
140 <li>Generalized the context() functions so that they can also return a
141 reference to any public base type of a context. This also makes
142 transition
<> & in_state_reaction
<> more general, reported
144 <li>Added triggering_event()
</li>
145 <li>Fixed Bug #
3329 (shadow variable warnings), reported by Grant
147 <li>Fixed Bug #
3963 (state_machine
<>::post_event() should be
148 protected), reported by Arne Babnik
</li>
153 <li>Fixed a bug that prevented the use of boost::ref() with
154 fifo_scheduler
<>::create_processor
<>, reported by Steve
156 <li>Fixed bug #
3092 (regression test failures in VC10 beta
1), reported by
162 <li>Fixed gcc-
4.3 warning in state_machine.hpp (ticket #
2389), reported by
163 Bryan Silverthorn
</li>
168 <li>Removed all permanent warning suppressions from library headers
169 and avoided the resulting warnings with other means (suggested by
170 Steven Watanabe; thanks to Peter Dimov and Yuval Ronen for insight
171 into when C4511 & C4512 are issued)
</li>
172 <li>Added the FAQ item
<a href=
"faq.html#AssertInStateDestructor">Why
173 do I get an assert when I access the state machine from a state
174 destructor?
</a> (due to feedback from Jiang Miao)
</li>
175 <li>Added defaults for the last two template parameters of
<a href=
176 "reference.html#ClassTemplatein_state_reaction">in_state_reaction
<></a>
177 (due to feedback from Sean Kelly)
</li>
178 <li>Adapted fifo_scheduler
<> to the changed allocator interface of
180 <li>Changed the PingPong example to demonstrate how the inner workings of
181 an asynchronous_state_machine<
> subclass can be hidden
</li>
186 <li>Added placement new overload to
<code>event
<></code> (due to
187 feedback from Federico J. Fern
ández)
</li>
188 <li>Made
<code>event
<></code> copy-assignable (Federico J.
189 Fern
ández)
</li>
194 <li>Fixed a bug that prevented compilation of exception_translator.hpp
195 (reported by Oliver Kowalke) and adapted TransitionTest.cpp to also test
196 the exception_translator class
</li>
198 <li>Fixed an allocator-related bug that led to compiler errors in many
199 tests on GCC
>=
4.0</li>
201 <li>Fixed a number of issues that led to compile-time failures on Intel
202 9.0 and Code Warrior
</li>
204 <li>Added compile-link tests for all examples
</li>
206 <li>Documented
<code>state_machine
<>::post_event
</code> and added a
207 <code>const event_base
&</code> overload
</li>
209 <li>example/Jamfile.v2 now also stages the dlls necessary to launch the
210 multithreaded PingPong examples
</li>
212 <li>Added a FAQ item regarding UML2.0 conformance
</li>
214 <li>Made the documentation of
<code>unconsumed_event
</code> more
217 <li>Declared
<code>state_base::~state_base virtual
</code> for GCC. This
218 makes state exit slightly slower but does away with loads of
"has virtual
219 functions but non-virtual destructor" warnings
</li>
221 <li>Made transitions to history UML2.0 compliant, see
<a href=
222 "faq.html#Uml2">here
</a> for more information
</li>
224 <li>Tidied all html files
& validated them with
<a href=
225 "http://validator.w3.org/">http://validator.w3.org/
</a></li>
227 <li>Fixed broken links
</li>
228 <li>Fixed a few conformance problems that led to errors on HP compilers
</li>
229 <li>Corrected documentation regarding allocation of states and events
</li>
232 <p>17 December,
2005</p>
235 <li>Added detailed performance data to the performance document
</li>
237 <li>Added the Performance
"example" and the associated Performance.xls,
238 which were used to perform the more detailed measurements and draw the
239 associated charts that can now be found in the performance document
</li>
241 <li>Simplified the BitMachine example (the performance measurement
242 functions are no longer needed)
</li>
244 <li><font color=
"#FF0000">Removed the to-do item
"Investigate how
245 constant-time dispatch for non-orthogonal state machines can be
246 implemented" suggested by David Abrahams, Jonathan Turkanis, Rob Steward
247 and Dave Gomboc. The more detailed performance measurements have shown
248 that the time spent for event dispatch is almost always small compared to
249 the time spent for state-entry and state-exit. See
<a href=
250 "performance.html#SpeedVersusScalabilityTradeoffs">Speed versus
251 scalability tradeoffs
</a> in the performance document for more
252 information
</font></li>
254 <li>Fixed an order of declaration bug which caused a compile-time error
255 in event_base.hpp when compiled with GCC3.4
.2 on HP-UX (the error neither
256 showed up on GCC3.4
.2 on MinGW nor on MSVC7.1)
</li>
258 <li>Tested with
1.33.1 version of the boost distribution
</li>
261 <p>14 August,
2005</p>
264 <li><b>This release will only work with the
1.33.0 version of the boost
265 distribution
</b></li>
267 <li><font color=
"#FF0000"><b>B
</b></font><b><font color=
"#FF0000">reaking
268 change:
</font></b> <font color=
"#FF0000">Added
269 <code>simple_state
<>::operator new
</code> &
270 <code>simple_state
<>::operator delete
</code> forwarding to the
271 allocator passed to
<code>state_machine
</code> (Peter Petrov). This
272 considerably simplifies memory management customization. A user now only
273 needs to pass his own allocator to
<code>state_machine
<></code> and
274 no longer has to separately overload
<code>operator
275 new
</code>/
<code>delete
</code> for his state classes. Existing state
276 classes for which memory management is not customized will thus
277 automatically use the allocator passed to
278 <code>state_machine
<></code>. Existing state classes for which
279 <code>operator new
</code>/
<code>delete
</code> is overloaded
280 <b>directly
</b> will continue to work as before. The only case where
281 existing code will refuse to compile is when a state class inherits from
282 an additional base with overloaded
<code>operator
283 new
</code>/
<code>delete
</code> (leading to ambiguous call errors).
284 Forwarding functions need to be added to such state classes (see
285 BitMachine for an example)
</font></li>
287 <li><b>Breaking change
</b>: Added an Allocator parameter to the
288 <code>event
</code> class template and added
<code>event
<>::operator
289 new
</code>/
<code>delete
</code>. This makes customizing memory management
290 easier but could also break existing code (see previous point)
</li>
292 <li>Added Jamfile.v2 files
</li>
294 <li>Added
<code>event_base
</code> specializations to all reactions and
295 updated the reference accordingly. This allows to implement reactions
296 triggered by an event of any type
</li>
298 <li>Added a facility allowing to specially handle events that did not
299 trigger a reaction. See point
10 of
<a href=
300 "reference.html#process_event">process_event
</a>() effects for more
301 information. Updated tests and docs accordingly
</li>
303 <li><font color=
"#FF0000">Added a FAQ item explaining how to
304 trouble-shoot compile-time errors (John Spalding)
</font></li>
306 <li><font color=
"#FF0000">Added a FAQ item that presents code for a
307 StopWatch variant that does not use state-local storage and explains the
308 drawbacks of that approach (Jeff Garland, Rob Steward)
</font></li>
310 <li>Added a FAQ item explaining the pitfalls of dynamically linked
311 state-machines. Also added associated tests to find out whether and how
312 FSMs can be put into DLLs
</li>
314 <li><font color=
"#FF0000">Removed the to-do item
"Eliminate the need to
315 wrap a single templated inner initial state into an
316 <code>mpl::list<></code>" suggested by Jonathan Turkanis because I
317 don't currently see how this can be implemented without big ugly
318 workarounds. A description of the problem can be found here:
<a href=
319 "http://thread.gmane.org/gmane.comp.lib.boost.devel/128741">http://thread.gmane.org/gmane.comp.lib.boost.devel/
128741</a></font></li>
321 <li><font color=
"#FF0000">Put all remarks about code as comments inside
322 the code (Pavel Vozenilek, Augustus Saunders)
</font></li>
324 <li>On suitable platforms the library should now be compileable with
325 exception support turned off (untested due to lacking access to such a
328 <li>Added allocator support for broken std libs. Thanks to Joaqu
ín
329 M L
ópez Mu
ñoz for adding his allocator workarounds to
336 <li>Updated the documentation for the new reaction specification
339 <li><font color=
"#FF0000">Invalid calls to reaction functions now always
340 lead to a failing runtime assert (Jonathan Turkanis). In debug mode the
341 <code>result
</code> type is a class with destructive copy semantics,
342 enabling the detection of a wider range of reaction function abuses.
343 Added appropriate tests and updated the documentation
</font></li>
345 <li><font color=
"#FF0000">Separated performance-related docs from the
346 rationale into a page of its own (Pavel Vozenilek)
</font></li>
348 <li><font color=
"#FF0000">Added clone functionality to events so that
349 stack-allocated events can now be deferred and posted. Updated the
350 documentation and tests accordingly (Jonathan Turkanis)
</font></li>
352 <li><font color=
"#FF0000">Clarified the definition of context (John
353 Spalding)
</font></li>
355 <li><font color=
"#FF0000">Implemented
356 <code>in_state_reaction
<></code>. Updated the documentation and
357 tests accordingly (Darryl Green)
</font></li>
363 <li><font color=
"#FF0000"><b>Breaking change
</b>: Changed the library
364 namespace from
<code>fsm
</code> to
<code>statechart
</code> (Alexander
365 Nasonov, David Abrahams)
</font></li>
367 <li><font color=
"#FF0000"><b>Breaking change
</b>: Changed the library
368 name from boost::fsm to Boost.Statechart (Alexander Nasonov, David
369 Abrahams)
</font></li>
371 <li><font color=
"#FF0000"><b>Breaking change
</b>: Reactions are now
372 specified with a
<code>reactions
</code> member typedef in a state class
373 declaration instead of a template parameter (Alexander Nasonov), not yet
374 documented.
</font></li>
380 <li>Removed the to-do item for the
<code>std::type_info
</code>
381 replacement. Thanks to Jody Hagins for taking care of that!
</li>
383 <li>Added to-do items for the issues uncovered during the review
</li>
385 <li>Fixed documentation bugs in the effects descriptions for
386 <code>state_machine::initiate()
</code>,
387 <code>state_machine::terminate()
</code> and
388 <code>state_machine::process_event()
</code></li>
390 <li><font color=
"#FF0000">Moved
"Getting started" and
"Audience" into
391 index.html (Augustus Saunders)
</font></li>
393 <li><font color=
"#FF0000">Added Basic topics and Intermediate topics
394 headings and shortened the
"How to read this tutorial" section (Augustus
395 Saunders)
</font></li>
398 <p>21 February,
2005</p>
401 <li>Corrected the review period length mentioned above (absolutely no
402 changes to code and documentation)
</li>
405 <p>20 February,
2005</p>
408 <li><b>Breaking change
</b>: Incorporated a part of
409 <code>exception_translator::operator()
</code> code into the
410 <code>state_machine
</code> class template. This simplifies custom
411 exception translators and makes implementing them less error-prone
</li>
413 <li><b>Breaking change
</b>: A request to defer an exception event is no
414 longer honored and ultimately results in the exception being rethrown.
415 This change is the result of the rule that during the processing of an
416 exception no non-user code must be called that could itself propagate an
417 exception and thus mask the original exception (for event deferral
418 <code>operator new
</code> must be called, which could throw). Exception
419 event deferral has always been a strange concept anyway
</li>
421 <li>Various code brush-ups
</li>
424 <p>09 February,
2005</p>
427 <li>Added exception testing to TransitionTest
</li>
429 <li>Fixed a bug that led to an access violation when orthogonal region
0
430 of a state was terminated before exiting the state (either through
431 another termination or a transition)
</li>
433 <li>Various minor changes
</li>
436 <p>07 February,
2005</p>
439 <li>Added FifoSchedulerTest, TerminationTest, CustomReactionTest,
440 StateIterationTest, TypeInfoTest, StateCastTest, HistoryTest and tests
441 for inconsistent uses of history, unsupported types of deep history and
442 invalid statecharts
</li>
444 <li>Fixed a bug that led to a compile-time error when
445 <code>state_downcast
</code> was instantiated with a reference target
</li>
447 <li>Fixed a bug that led to a null function pointer dereference when
448 history was cleared before making a transition to history
</li>
450 <li>Updated the
"Speed versus scalability tradeoffs" section
</li>
452 <li>Fixed previously failing builds of single-threaded variants of the
453 PingPong example
</li>
455 <li>Moved the
"Incompatible compilers" section to index.html
</li>
457 <li>Added explanation for the BitMachine
& Handcrafted examples
</li>
459 <li>Various minor changes
</li>
462 <p>25 November,
2004</p>
465 <li>Adapted to the changes in the
1.32.0 distribution (mainly MPL
466 changes). The library no longer works with
1.31.0</li>
468 <li>Fixed a bug that led to a failing runtime assert during state machine
471 <li>Fixed a bug that led to events deferred in a composite state not
472 being released when that state was left
</li>
474 <li>Added TransitionTest and DeferralTest
</li>
477 <p>19 October,
2004</p>
480 <li><b>Breaking change
</b>: Out of the box, a state machine no longer
481 uses
<code>exception_translator
<></code> to translate exceptions
482 propagated into the framework. Instead,
483 <code>null_exception_translator
</code> is now used, which does not catch
484 or translate any exceptions. Updated docs accordingly
</li>
486 <li>Implemented
<a href=
"tutorial.html#TwoStageExit">two stage exit
</a>
487 and updated docs accordingly
</li>
489 <li>Implemented an experimental feature that allows a transition action
490 to be a member of the transition source or any of its direct or indirect
491 contexts, see
<a href=
492 "configuration.html#ApplicationDefinedMacros">BOOST_STATECHART_RELAX_TRANSITION_CONTEXT
</a></li>
494 <li>Various small code and documentation improvements
</li>
500 <li>Integrated the Intel
7.0 workarounds provided by Pavel Vozenilek
501 (most are std library workarounds)
</li>
503 <li>Added the Intel
7.0 section to the configuration page
</li>
505 <li>Updated copyright notices
</li>
511 <li>Fixed a bug that could have led to an
<code>exception_thrown
</code>
512 event being sent to a state that is
<b>not
</b> the outermost unstable
513 state in an unstable state machine (as documented in the reference).
514 Instead, the event was sent to the state where the entry action of a
515 direct inner state threw an exception, which is only correct for state
516 machines without orthogonal regions. Also updated the
<a href=
517 "tutorial.html#ExceptionHandling">Exception handling
</a> section in the
518 tutorial, which now explains this behavior in detail
</li>
520 <li>Fixed bug that, under extremely rare circumstances, would have
521 prevented the correct handling of out of memory situations
</li>
523 <li>Fixed an inconsistency in the state entry sequence when a state in an
524 orthogonal region is the target of a transition originating outside its
525 direct outer state. Now the states are always entered according to the
526 number of their orthogonal region, i.e. orthogonal region
0 first, then
527 orthogonal region
1 and so on. Since the documentation did not define the
528 sequence (it does now) users should not notice any difference
</li>
530 <li>Changed the implementation of
<code>state_machine::terminate()
</code>
531 so that orthogonal regions are now exited strictly from highest to lowest
532 number instead of arbitrarily as before. Updated docs accordingly
</li>
535 <p>22 April,
2004</p>
538 <li>Removed the previously added BCC
5.6.4 fixes (the BCC port was
539 postponed due to lack of knowledge how to work around certain bugs)
</li>
541 <li>Replaced all uses of
<code>BOOST_STATIC_CONSTANT
</code> with their
542 mpl counterparts (
<code>bool_
</code>,
<code>integral_c
</code>). As a
543 result, ports to buggy compilers should become easier
</li>
545 <li>Clarified some bits in the tutorial and added StopWatch2.cpp, which
546 details an alternative way of retrieving state machine state
</li>
549 <p>10 April,
2004</p>
552 <li>Added two BCC
5.6.4 fixes contributed by Pavel Vozenilek;
553 Boost.Statechart does not yet work on BCC though
</li>
555 <li>Implemented a few of the documentation and code improvements
556 suggested by Pavel Vozenilek, including the new
"UML to Boost.Statechart
557 mapping summary" document
</li>
560 <p>26 March,
2004</p>
563 <li>Fixed a small Intel
8.0 bug in the BitMachine example
</li>
566 <p>25 March,
2004</p>
569 <li>Now everything compiles warning-free on Intel
8.0</li>
572 <p>21 March,
2004</p>
575 <li><b>Breaking change
</b>:
<code>fifo_scheduler
<></code> and
576 <code>fifo_worker
<></code> now always work non-blocking by
579 <li>Added gcc makefiles, contributed by Mitsuo Fukasawa
</li>
581 <li>Added a fixed version of atomic_count_gcc.hpp to fsm.zip, see
582 <a href=
"http://lists.boost.org/MailArchives/boost/msg57537.php">http://lists.boost.org/MailArchives/boost/msg57537.php
</a>
583 for more information
</li>
586 <p>16 March,
2004</p>
589 <li><b>Breaking change
</b>: Added the
<code>FifoWorker
</code> template
590 parameter to
<code>fifo_scheduler
<></code> and updated
591 documentation and examples accordingly
</li>
594 <p>13 March,
2004</p>
597 <li><b>Breaking change
</b>: Renamed
<code>worker
<></code> to
598 <code>fifo_scheduler
<></code> and updated documentation and
599 examples accordingly
</li>
601 <li>Changed the
<code>fifo_scheduler
<></code> implementation so
602 that a custom worker implementation needs to duplicate less code
</li>
604 <li>Various other small code and doc changes
</li>
607 <p>03 March,
2004</p>
610 <li><b>Breaking change
</b>: Redesigned the
<code>worker
<></code>
611 and
<code>asynchronous_state_machine
<></code> class templates and
612 updated documentation accordingly. Event processors can now be added and
613 removed while a worker is running. Moreover, the new design allows for
614 custom workers with non-FIFO queueing schemes
</li>
616 <li>The StopWatch example now uses
<code>std::time()
</code> instead of
617 <code>std::clock()
</code></li>
620 <p>09 February,
2004</p>
623 <li>Integrated the standard conformance fixes contributed by Peter
624 Petrov. The library now also works on GCC
3.2 and should be much easier
625 to port to other highly conforming compilers
</li>
627 <li>Added the state type information facility to
628 <code>simple_state
</code></li>
630 <li>Added the function templates
631 <code>simple_state::clear_shallow_history()
</code> and
632 <code>simple_state::clear_deep_history()
</code></li>
635 <p>11 January,
2004</p>
638 <li>Finished reference documentation
</li>
640 <li>Updated Copyright notices
</li>
643 <p>12 December,
2003</p>
646 <li><b>Thanks to Mitsuo Fukasawa the tutorial is now also available in
649 <li>Added a state type information facility
</li>
651 <li>Added reference (unfinished) and configuration documentation and
652 updated other documents
</li>
654 <li>Various code brush-ups (no breaking changes)
</li>
657 <p>12 October,
2003</p>
660 <li><b>Breaking change
</b>: Removed
<code>rtti_policy
<></code> from
661 the interface. By default, the library now uses its own (often faster)
662 RTTI implementation. Users can demand the use of native C++ RTTI by
663 defining
<code>BOOST_STATECHART_USE_NATIVE_RTTI
</code>. This change only
664 affects users who customized
<code>state_machine
<></code>,
665 <code>asynchronous_state_machine
<></code> or
666 <code>worker
<></code></li>
668 <li><b>Breaking change
</b>: Reordered template arguments of
669 <code>state_machine
<></code> and
670 <code>asynchronous_state_machine
<></code>. This change only affects
671 users who customized
<code>state_machine
<></code> or
672 <code>asynchronous_state_machine
<></code></li>
674 <li>Added shallow/deep history support and updated documentation
677 <li>Added various compile-time sanity checks
</li>
679 <li>Added
1 FAQ (asked by Mitsuo Fukasawa)
</li>
682 <p>16 August,
2003</p>
685 <li>Added
<code>asynchronous_state_machine
<></code> and
686 <code>worker
<></code> and updated documentation accordingly
</li>
688 <li>Various minor bug fixes and code improvements (no breaking interface
691 <li>Added Keyboard and PingPong examples
</li>
693 <li>Added .pdf documentation
</li>
699 <li>Added
3 FAQs (asked by Bohdan)
& 1 definition
</li>
701 <li>Removed the superfluous public derivation specifiers in the tutorial
702 and the examples as suggested by Aleksey Gurtovoy
</li>
704 <li>Various code improvements (no interface changes)
</li>
706 <li>Various html improvements
</li>
710 <p><a href=
"http://validator.w3.org/check?uri=referer"><img border=
"0" src=
711 "../../../doc/images/valid-html401.png" alt=
"Valid HTML 4.01 Transitional"
712 height=
"31" width=
"88"></a></p>
714 <p>Revised
04 April,
2010</p>
716 <p><i>Copyright
© 2003-
2010 <a href=
"contact.html">Andreas Huber
717 D
önni
</a></i></p>
719 <p><i>Distributed under the Boost Software License, Version
1.0. (See
720 accompanying file
<a href=
"../../../LICENSE_1_0.txt">LICENSE_1_0.txt
</a> or
722 "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt
</a>)
</i></p>