| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
| <html> | |
| <head> | |
| <meta http-equiv="Content-Language" content="en-us"> | |
| <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> | |
| <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 - Configuration</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> | |
| <h2 align="center">Configuration</h2> | |
| </td> | |
| </tr> | |
| </table> | |
| <hr> | |
| <dl class="page-index"> | |
| <dt><a href="#GeneralConfiguration">General configuration</a></dt> | |
| <dd><a href="#Introduction">Introduction</a></dd> | |
| <dd><a href="#DebugModeCompilationOptions">Debug mode compilation | |
| options</a></dd> | |
| <dd><a href="#ReleaseModeCompilationOptions">Release mode compilation | |
| options</a></dd> | |
| <dd><a href="#ApplicationDefinedMacros">Application Defined | |
| Macros</a></dd> | |
| </dl> | |
| <h1><a id="GeneralConfiguration" name="GeneralConfiguration">General | |
| configuration</a></h1> | |
| <h2><a id="Introduction" name="Introduction">Introduction</a></h2> | |
| <p>The library uses several configuration macros in <a href= | |
| "../../../libs/config/config.htm"><boost/config.hpp></a>, as well as | |
| two configuration macros meant to be supplied by the application. Moreover, | |
| two commonly available compiler options also have an impact on the | |
| available features.</p> | |
| <h2><a id="DebugModeCompilationOptions" name= | |
| "DebugModeCompilationOptions">Debug mode compilation options</a></h2> | |
| <ul> | |
| <li>C++ RTTI must be turned on (used by various asserts)</li> | |
| <li>C++ exception handling can be turned on or off. When turned off, | |
| obviously the library's <a href="tutorial.html#ExceptionHandling">error | |
| handling support</a> is no longer available</li> | |
| </ul> | |
| <h2><a id="ReleaseModeCompilationOptions" name= | |
| "ReleaseModeCompilationOptions">Release mode compilation options</a></h2> | |
| <ul> | |
| <li>C++ RTTI can be turned on or off. When turned off, the use of | |
| <code><a href="reference.html#state_cast">state_cast<>()</a></code> | |
| leads to a compile time error (<code><a href= | |
| "reference.html#state_downcast">state_downcast<>()</a></code> is | |
| still available). Moreover, <code>BOOST_STATECHART_USE_NATIVE_RTTI</code> | |
| must not be defined simultaneously</li> | |
| <li>C++ exception handling can be turned on or off. When turned off, | |
| obviously the library's <a href="tutorial.html#ExceptionHandling">error | |
| handling support</a> is no longer available</li> | |
| </ul> | |
| <h2><a id="ApplicationDefinedMacros" name= | |
| "ApplicationDefinedMacros">Application Defined Macros</a></h2> | |
| <p>The following macros may be defined by an application using the | |
| library:</p> | |
| <table summary="application defined macros" width="100%" cellpadding="2" | |
| border="3"> | |
| <tr> | |
| <td width="226"><b>Macro</b></td> | |
| <td width="893"><b>Meaning</b></td> | |
| </tr> | |
| <tr> | |
| <td width="226"><code>BOOST_STATECHART_USE_NATIVE_RTTI</code></td> | |
| <td width="893"> | |
| When defined, the library no longer uses its own speed-optimized RTTI | |
| implementation. Instead, native C++ RTTI is employed (see <a href= | |
| "performance.html#RttiCustomization">RTTI customization</a> in the | |
| performance document for more information). This has the following | |
| effects: | |
| <ul> | |
| <li><code>state_machine::state_base_type</code> becomes a | |
| polymorphic type. That is, when <code>typeid</code> is applied to a | |
| <code>state_machine::state_base_type</code> reference, the result | |
| refers to a <code>type_info</code> object representing the the type | |
| of the most derived state type</li> | |
| <li><a href="tutorial.html#CustomStateTypeInformation">Custom state | |
| type information</a> is no longer available</li> | |
| <li>All states need to store one pointer less, leading to a | |
| best-case state machine memory footprint reduction of about | |
| 15%</li> | |
| <li>Under most circumstances, dispatch speed degrades. This is | |
| because native C++ RTTI values are retrieved through an additional | |
| indirection on almost all platforms. See <a href= | |
| "performance.html#SpeedVersusScalabilityTradeoffs">Speed versus | |
| scalability tradeoffs</a> in the performance document for | |
| timings</li> | |
| </ul> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td width="226"> | |
| <code>BOOST_STATECHART_RELAX_TRANSITION_CONTEXT</code></td> | |
| <td width="893">When defined, the sequence of actions that are called | |
| during a transition is relaxed. That is, its is no longer necessary | |
| that all states up to the innermost common context are exited before | |
| the transition action is called (as mandated by the UML standard). | |
| Instead, the transition action can be a member of either the transition | |
| source or any direct or indirect outer context and is called as soon as | |
| all possibly active inner states have been exited. Then all remaining | |
| active states up to the innermost common context are exited before | |
| entering all states down to the transition destination</td> | |
| </tr> | |
| </table> | |
| <p>Both macros need to be consistently defined or undefined for all | |
| translation units that are later linked into the same executable. Not doing | |
| so will inevitably lead to ODR violations. Depending on compiler and linker | |
| technology such violations may or may not manifest themselves in link-time | |
| errors.</p> | |
| <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= | |
| "../../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional" | |
| height="31" width="88"></a></p> | |
| <p>Revised 05 January, 2008</p> | |
| <p><i>Copyright © 2003-2008 <a href="contact.html">Andreas Huber | |
| Dönni</a></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> |