• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3<html>
4<head>
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">
10
11  <title>The Boost Statechart Library - Overview</title>
12</head>
13
14<body link="#0000FF" vlink="#800080">
15  <table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
16  "header">
17    <tr>
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>
21      </td>
22
23      <td valign="top">
24        <h1 align="center">The Boost Statechart Library</h1>
25
26        <h2 align="center">Future &amp; History</h2>
27      </td>
28    </tr>
29  </table>
30  <hr>
31
32  <h2>Contents</h2>
33
34  <dl class="index">
35    <dt><a href="#ToDoList">To-do list</a></dt>
36
37    <dt><a href="#ChangeHistory">Change history</a></dt>
38  </dl>
39  <hr>
40
41  <h2><a name="ToDoList" id="ToDoList">To-do list</a></h2>
42
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
45  review):</p>
46
47  <ol>
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
50    thread</a></li>
51
52    <li>Optimize state-entry and state-exit for speed and code-size</li>
53
54    <li>Reimplement <code>fifo_scheduler&lt;&gt;::processor_handle</code> so
55    that <code>fifo_scheduler&lt;&gt;::create_processor&lt;&gt;()</code> and
56    <code>fifo_scheduler&lt;&gt;::destroy_processor()</code> no longer make
57    (indirect) calls to global <code>operator new()</code> and <code>operator
58    delete()</code></li>
59
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>
63
64    <li>Issue an error if <code>BOOST_STATECHART_USE_NATIVE_RTTI</code> is
65    defined when C++ RTTI is turned off</li>
66
67    <li>The current requirement to pass an <code>mpl::list&lt;&gt;</code> to
68    specify inner initial states and reactions is too strict. Check the
69    requirements on the sequences and document them accordingly (David
70    Abrahams)</li>
71
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>
76
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>
83
84    <li><font color="#FF0000">Implement a switch-like reaction (Simon
85    Gittins, Darryl Green)</font></li>
86
87    <li>Link incomplete code-snippets in the tutorial to complete example
88    code where available</li>
89
90    <li>Where appropriate, link the reference documentation to examples</li>
91
92    <li><font color="#FF0000">Add a description of the implementation and
93    better explain performance trade-offs (Jonathan Turkanis)</font></li>
94
95    <li><font color="#FF0000">Add links to descriptions of alternate
96    implementations and discuss performance trade-offs (Jonathan
97    Turkanis)</font></li>
98
99    <li><font color="#FF0000">Add a list of applications that use
100    Boost.Statechart (Paul A. Bristow)</font></li>
101
102    <li>Refactor the <code>state_machine</code> class template to reduce code
103    size in applications with many different state machines</li>
104
105    <li>Add a diagram that helps to understand what an unstable state machine
106    is</li>
107
108    <li>Comment MPL-heavy code</li>
109
110    <li>Add examples of often made mistakes</li>
111
112    <li>Implement <code>priority_scheduler&lt;&gt;</code></li>
113
114    <li>Eliminate code-duplication in <code>fifo_scheduler</code> with PP
115    code submitted by Pavel Vozenilek</li>
116
117    <li>Add number and label to all diagrams in docs</li>
118
119    <li>Add <code>#pragma once</code> to all headers (speeds up compilation
120    with MS-compatible compilers)</li>
121
122    <li>Investigate whether and how <code>fifo_worker&lt;&gt;</code> should
123    accept a policy parameter defining how to lock and wait</li>
124  </ol>
125
126  <h2><a name="ChangeHistory" id="ChangeHistory">Change history</a></h2>
127
128  <p>(<font color="#FF0000">red</font> = points raised during formal
129  review)</p>
130  <p>1.46.0</p>
131  <ul>
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>
136  </ul>
137
138  <p>1.43.0</p>
139  <ul>
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&lt;&gt; &amp; in_state_reaction&lt;&gt; more general, reported
143    by Igor R</li>
144    <li>Added triggering_event()</li>
145    <li>Fixed Bug #3329 (shadow variable warnings), reported by Grant
146    Erickson</li>
147    <li>Fixed Bug #3963 (state_machine&lt;&gt;::post_event() should be
148    protected), reported by Arne Babnik</li>
149  </ul>
150
151  <p>1.40.0</p>
152  <ul>
153    <li>Fixed a bug that prevented the use of boost::ref() with
154    fifo_scheduler&lt;&gt;::create_processor&lt;&gt;, reported by Steve
155    Hawkes</li>
156    <li>Fixed bug #3092 (regression test failures in VC10 beta 1), reported by
157    Richard Webb</li>
158  </ul>
159
160  <p>1.38.0</p>
161  <ul>
162    <li>Fixed gcc-4.3 warning in state_machine.hpp (ticket #2389), reported by
163    Bryan Silverthorn</li>
164  </ul>
165
166  <p>1.36.0</p>
167  <ul>
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&lt;&gt;</a>
177      (due to feedback from Sean Kelly)</li>
178    <li>Adapted fifo_scheduler&lt;&gt; to the changed allocator interface of
179      boost::function</li>
180    <li>Changed the PingPong example to demonstrate how the inner workings of
181    an asynchronous_state_machine<> subclass can be hidden</li>
182  </ul>
183
184  <p>1.35.0</p>
185  <ul>
186    <li>Added placement new overload to <code>event&lt;&gt;</code> (due to
187    feedback from Federico J. Fern&aacute;ndez)</li>
188    <li>Made <code>event&lt;&gt;</code> copy-assignable (Federico J.
189    Fern&aacute;ndez)</li>
190  </ul>
191
192  <p>1.34.0</p>
193  <ul>
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>
197
198    <li>Fixed an allocator-related bug that led to compiler errors in many
199    tests on GCC &gt;= 4.0</li>
200
201    <li>Fixed a number of issues that led to compile-time failures on Intel
202    9.0 and Code Warrior</li>
203
204    <li>Added compile-link tests for all examples</li>
205
206    <li>Documented <code>state_machine&lt;&gt;::post_event</code> and added a
207    <code>const event_base &amp;</code> overload</li>
208
209    <li>example/Jamfile.v2 now also stages the dlls necessary to launch the
210    multithreaded PingPong examples</li>
211
212    <li>Added a FAQ item regarding UML2.0 conformance</li>
213
214    <li>Made the documentation of <code>unconsumed_event</code> more
215    visible</li>
216
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>
220
221    <li>Made transitions to history UML2.0 compliant, see <a href=
222    "faq.html#Uml2">here</a> for more information</li>
223
224    <li>Tidied all html files &amp; validated them with <a href=
225    "http://validator.w3.org/">http://validator.w3.org/</a></li>
226
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>
230  </ul>
231
232  <p>17 December, 2005</p>
233
234  <ul>
235    <li>Added detailed performance data to the performance document</li>
236
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>
240
241    <li>Simplified the BitMachine example (the performance measurement
242    functions are no longer needed)</li>
243
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>
253
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>
257
258    <li>Tested with 1.33.1 version of the boost distribution</li>
259  </ul>
260
261  <p>14 August, 2005</p>
262
263  <ul>
264    <li><b>This release will only work with the 1.33.0 version of the boost
265    distribution</b></li>
266
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&lt;&gt;::operator new</code> &amp;
270    <code>simple_state&lt;&gt;::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&lt;&gt;</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&lt;&gt;</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>
286
287    <li><b>Breaking change</b>: Added an Allocator parameter to the
288    <code>event</code> class template and added <code>event&lt;&gt;::operator
289    new</code>/<code>delete</code>. This makes customizing memory management
290    easier but could also break existing code (see previous point)</li>
291
292    <li>Added Jamfile.v2 files</li>
293
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>
297
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>
302
303    <li><font color="#FF0000">Added a FAQ item explaining how to
304    trouble-shoot compile-time errors (John Spalding)</font></li>
305
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>
309
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>
313
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&lt;&gt;</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>
320
321    <li><font color="#FF0000">Put all remarks about code as comments inside
322    the code (Pavel Vozenilek, Augustus Saunders)</font></li>
323
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
326    platform)</li>
327
328    <li>Added allocator support for broken std libs. Thanks to Joaqu&iacute;n
329    M L&oacute;pez Mu&ntilde;oz for adding his allocator workarounds to
330    boost/detail</li>
331  </ul>
332
333  <p>19 June, 2005</p>
334
335  <ul>
336    <li>Updated the documentation for the new reaction specification
337    interface</li>
338
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>
344
345    <li><font color="#FF0000">Separated performance-related docs from the
346    rationale into a page of its own (Pavel Vozenilek)</font></li>
347
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>
351
352    <li><font color="#FF0000">Clarified the definition of context (John
353    Spalding)</font></li>
354
355    <li><font color="#FF0000">Implemented
356    <code>in_state_reaction&lt;&gt;</code>. Updated the documentation and
357    tests accordingly (Darryl Green)</font></li>
358  </ul>
359
360  <p>12 May, 2005</p>
361
362  <ul>
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>
366
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>
370
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>
375  </ul>
376
377  <p>03 May, 2005</p>
378
379  <ul>
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>
382
383    <li>Added to-do items for the issues uncovered during the review</li>
384
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>
389
390    <li><font color="#FF0000">Moved "Getting started" and "Audience" into
391    index.html (Augustus Saunders)</font></li>
392
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>
396  </ul>
397
398  <p>21 February, 2005</p>
399
400  <ul>
401    <li>Corrected the review period length mentioned above (absolutely no
402    changes to code and documentation)</li>
403  </ul>
404
405  <p>20 February, 2005</p>
406
407  <ul>
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>
412
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>
420
421    <li>Various code brush-ups</li>
422  </ul>
423
424  <p>09 February, 2005</p>
425
426  <ul>
427    <li>Added exception testing to TransitionTest</li>
428
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>
432
433    <li>Various minor changes</li>
434  </ul>
435
436  <p>07 February, 2005</p>
437
438  <ul>
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>
443
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>
446
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>
449
450    <li>Updated the "Speed versus scalability tradeoffs" section</li>
451
452    <li>Fixed previously failing builds of single-threaded variants of the
453    PingPong example</li>
454
455    <li>Moved the "Incompatible compilers" section to index.html</li>
456
457    <li>Added explanation for the BitMachine &amp; Handcrafted examples</li>
458
459    <li>Various minor changes</li>
460  </ul>
461
462  <p>25 November, 2004</p>
463
464  <ul>
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>
467
468    <li>Fixed a bug that led to a failing runtime assert during state machine
469    destruction</li>
470
471    <li>Fixed a bug that led to events deferred in a composite state not
472    being released when that state was left</li>
473
474    <li>Added TransitionTest and DeferralTest</li>
475  </ul>
476
477  <p>19 October, 2004</p>
478
479  <ul>
480    <li><b>Breaking change</b>: Out of the box, a state machine no longer
481    uses <code>exception_translator&lt;&gt;</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>
485
486    <li>Implemented <a href="tutorial.html#TwoStageExit">two stage exit</a>
487    and updated docs accordingly</li>
488
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>
493
494    <li>Various small code and documentation improvements</li>
495  </ul>
496
497  <p>22 May, 2004</p>
498
499  <ul>
500    <li>Integrated the Intel 7.0 workarounds provided by Pavel Vozenilek
501    (most are std library workarounds)</li>
502
503    <li>Added the Intel 7.0 section to the configuration page</li>
504
505    <li>Updated copyright notices</li>
506  </ul>
507
508  <p>12 May, 2004</p>
509
510  <ul>
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>
519
520    <li>Fixed bug that, under extremely rare circumstances, would have
521    prevented the correct handling of out of memory situations</li>
522
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>
529
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>
533  </ul>
534
535  <p>22 April, 2004</p>
536
537  <ul>
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>
540
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>
544
545    <li>Clarified some bits in the tutorial and added StopWatch2.cpp, which
546    details an alternative way of retrieving state machine state</li>
547  </ul>
548
549  <p>10 April, 2004</p>
550
551  <ul>
552    <li>Added two BCC 5.6.4 fixes contributed by Pavel Vozenilek;
553    Boost.Statechart does not yet work on BCC though</li>
554
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>
558  </ul>
559
560  <p>26 March, 2004</p>
561
562  <ul>
563    <li>Fixed a small Intel 8.0 bug in the BitMachine example</li>
564  </ul>
565
566  <p>25 March, 2004</p>
567
568  <ul>
569    <li>Now everything compiles warning-free on Intel 8.0</li>
570  </ul>
571
572  <p>21 March, 2004</p>
573
574  <ul>
575    <li><b>Breaking change</b>: <code>fifo_scheduler&lt;&gt;</code> and
576    <code>fifo_worker&lt;&gt;</code> now always work non-blocking by
577    default</li>
578
579    <li>Added gcc makefiles, contributed by Mitsuo Fukasawa</li>
580
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>
584  </ul>
585
586  <p>16 March, 2004</p>
587
588  <ul>
589    <li><b>Breaking change</b>: Added the <code>FifoWorker</code> template
590    parameter to <code>fifo_scheduler&lt;&gt;</code> and updated
591    documentation and examples accordingly</li>
592  </ul>
593
594  <p>13 March, 2004</p>
595
596  <ul>
597    <li><b>Breaking change</b>: Renamed <code>worker&lt;&gt;</code> to
598    <code>fifo_scheduler&lt;&gt;</code> and updated documentation and
599    examples accordingly</li>
600
601    <li>Changed the <code>fifo_scheduler&lt;&gt;</code> implementation so
602    that a custom worker implementation needs to duplicate less code</li>
603
604    <li>Various other small code and doc changes</li>
605  </ul>
606
607  <p>03 March, 2004</p>
608
609  <ul>
610    <li><b>Breaking change</b>: Redesigned the <code>worker&lt;&gt;</code>
611    and <code>asynchronous_state_machine&lt;&gt;</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>
615
616    <li>The StopWatch example now uses <code>std::time()</code> instead of
617    <code>std::clock()</code></li>
618  </ul>
619
620  <p>09 February, 2004</p>
621
622  <ul>
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>
626
627    <li>Added the state type information facility to
628    <code>simple_state</code></li>
629
630    <li>Added the function templates
631    <code>simple_state::clear_shallow_history()</code> and
632    <code>simple_state::clear_deep_history()</code></li>
633  </ul>
634
635  <p>11 January, 2004</p>
636
637  <ul>
638    <li>Finished reference documentation</li>
639
640    <li>Updated Copyright notices</li>
641  </ul>
642
643  <p>12 December, 2003</p>
644
645  <ul>
646    <li><b>Thanks to Mitsuo Fukasawa the tutorial is now also available in
647    Japanese!!!</b></li>
648
649    <li>Added a state type information facility</li>
650
651    <li>Added reference (unfinished) and configuration documentation and
652    updated other documents</li>
653
654    <li>Various code brush-ups (no breaking changes)</li>
655  </ul>
656
657  <p>12 October, 2003</p>
658
659  <ul>
660    <li><b>Breaking change</b>: Removed <code>rtti_policy&lt;&gt;</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&lt;&gt;</code>,
665    <code>asynchronous_state_machine&lt;&gt;</code> or
666    <code>worker&lt;&gt;</code></li>
667
668    <li><b>Breaking change</b>: Reordered template arguments of
669    <code>state_machine&lt;&gt;</code> and
670    <code>asynchronous_state_machine&lt;&gt;</code>. This change only affects
671    users who customized <code>state_machine&lt;&gt;</code> or
672    <code>asynchronous_state_machine&lt;&gt;</code></li>
673
674    <li>Added shallow/deep history support and updated documentation
675    accordingly</li>
676
677    <li>Added various compile-time sanity checks</li>
678
679    <li>Added 1 FAQ (asked by Mitsuo Fukasawa)</li>
680  </ul>
681
682  <p>16 August, 2003</p>
683
684  <ul>
685    <li>Added <code>asynchronous_state_machine&lt;&gt;</code> and
686    <code>worker&lt;&gt;</code> and updated documentation accordingly</li>
687
688    <li>Various minor bug fixes and code improvements (no breaking interface
689    changes)</li>
690
691    <li>Added Keyboard and PingPong examples</li>
692
693    <li>Added .pdf documentation</li>
694  </ul>
695
696  <p>08 June, 2003</p>
697
698  <ul>
699    <li>Added 3 FAQs (asked by Bohdan) &amp; 1 definition</li>
700
701    <li>Removed the superfluous public derivation specifiers in the tutorial
702    and the examples as suggested by Aleksey Gurtovoy</li>
703
704    <li>Various code improvements (no interface changes)</li>
705
706    <li>Various html improvements</li>
707  </ul>
708  <hr>
709
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>
713
714  <p>Revised 04 April, 2010</p>
715
716  <p><i>Copyright &copy; 2003-2010 <a href="contact.html">Andreas Huber
717  D&ouml;nni</a></i></p>
718
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
721  copy at <a href=
722  "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
723</body>
724</html>
725