Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.

The Boost Statechart Library

Future & History


To-do list
Change history

To-do list

The library is mostly complete. However, there is some work left (red = added as a result of the formal review):

  1. Implement a choice-point-like class, as discussed in this thread
  2. Optimize state-entry and state-exit for speed and code-size
  3. Implement simple_state::triggering_event(), which returns a pointer to the event that triggered the action currently being executed. This is useful for the rare cases when an entry or exit action needs to access the event that triggered the execution of the action. triggering_event() returns a const event_base * due to the fact that entry and exit actions can be triggered by events of any type or no event at all (state_machine<>::initiate() & state_machine::terminate()). The caller thus needs to make a type check or cast the return value. The use of triggering_event() therefore often indicates a problem in the state machine design and should be avoided whenever possible
  4. Reimplement fifo_scheduler<>::processor_handle so that fifo_scheduler<>::create_processor<>() and fifo_scheduler<>::destroy_processor() no longer make (indirect) calls to global operator new() and operator delete()
  5. Ensure that everything is compileable with C++ RTTI support turned off (this requires currently lacking support in Boost.Config and probably a patch for shared_ptr)
  6. Issue an error if BOOST_STATECHART_USE_NATIVE_RTTI is defined when C++ RTTI is turned off
  7. The current requirement to pass an mpl::list<> to specify inner initial states and reactions is too strict. Check the requirements on the sequences and document them accordingly (David Abrahams)
  8. Make compilation performance measurements with mpl::vector and mpl::deque instead of mpl::list to find out which is fastest. Document a recommendation for the fastest container and change all examples accordingly (David Abrahams)
  9. Investigate how a state machine could be serialized. A first glance at the serialization library revealed that there currently (1.33) is no support for types that overload operator new (suitable code is already present in the serialization library but it is currently commented out due to incompatibilities with certain compilers). Such support would be essential for Boost.Statechart serialization
  10. Implement a switch-like reaction (Simon Gittins, Darryl Green)
  11. Link incomplete code-snippets in the tutorial to complete example code where available
  12. Where appropriate, link the reference documentation to examples
  13. Add a description of the implementation and better explain performance trade-offs (Jonathan Turkanis)
  14. Add links to descriptions of alternate implementations and discuss performance trade-offs (Jonathan Turkanis)
  15. Add a list of applications that use Boost.Statechart (Paul A. Bristow)
  16. Refactor the state_machine class template to reduce code size in applications with many different state machines
  17. Add a diagram that helps to understand what an unstable state machine is
  18. Comment MPL-heavy code
  19. Add examples of often made mistakes
  20. Implement priority_scheduler<>
  21. Eliminate code-duplication in fifo_scheduler with PP code submitted by Pavel Vozenilek
  22. Add number and label to all diagrams in docs
  23. Add #pragma once to all headers (speeds up compilation with MS-compatible compilers)
  24. Investigate whether and how fifo_worker<> should accept a policy parameter defining how to lock and wait

Change history

(red = points raised during formal review)





17 December, 2005

14 August, 2005

19 June, 2005

12 May, 2005

03 May, 2005

21 February, 2005

20 February, 2005

09 February, 2005

07 February, 2005

25 November, 2004

19 October, 2004

22 May, 2004

12 May, 2004

22 April, 2004

10 April, 2004

26 March, 2004

25 March, 2004

21 March, 2004

16 March, 2004

13 March, 2004

03 March, 2004

09 February, 2004

11 January, 2004

12 December, 2003

12 October, 2003

16 August, 2003

08 June, 2003

Valid HTML 4.01 Transitional

Revised 05 January, 2008

Copyright © 2003-2008 Andreas Huber Dönni

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at