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 name="GENERATOR" content="Microsoft FrontPage 6.0"> 7 <meta name="ProgId" content="FrontPage.Editor.Document"> 8 <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"> 9 <link rel="stylesheet" type="text/css" href="../../../boost.css"> 10 11 <title>The Boost Statechart Library - Definitions</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">UML to Boost.Statechart mapping summary</h2> 27 </td> 28 </tr> 29 </table> 30 <hr> 31 32 <h2>Contents</h2> 33 34 <dl class="page-index"> 35 <dt><a href="#StateMachine">State machine</a></dt> 36 37 <dt><a href="#States">States</a></dt> 38 39 <dd><a href="#NormalState">Normal state</a></dd> 40 41 <dd><a href="#InitialPseudostate">Initial pseudostate</a></dd> 42 43 <dd><a href="#FinalPseudostate">Final pseudostate</a></dd> 44 45 <dd><a href="#ShallowHistoryPseudostate">Shallow history 46 pseudostate</a></dd> 47 48 <dd><a href="#DeepHistoryPseudostate">Deep history pseudostate</a></dd> 49 50 <dd><a href="#JunctionPoint">Junction point</a></dd> 51 52 <dd><a href="#DynamicChoicePoint">Dynamic choice point</a></dd> 53 54 <dd><a href="#JoinAndForkBars">Join and fork bars</a></dd> 55 56 <dt><a href="#Events">Events</a></dt> 57 58 <dd><a href="#CallEvent">Call event</a></dd> 59 60 <dd><a href="#SignalEvent">Signal event</a></dd> 61 62 <dd><a href="#TimeEvent">Time event</a></dd> 63 64 <dd><a href="#ChangeEvent">Change event</a></dd> 65 66 <dt><a href="#Reactions">Reactions</a></dt> 67 68 <dd><a href="#Guard">Guard</a></dd> 69 70 <dd><a href="#Transition">Transition</a></dd> 71 72 <dd><a href="#Deferral">Deferral</a></dd> 73 74 <dd><a href="#InternalTransition">Internal transition (in-state 75 reaction)</a></dd> 76 77 <dt><a href="#Actions">Actions</a></dt> 78 79 <dd><a href="#EntryAction">Entry action</a></dd> 80 81 <dd><a href="#ExitAction">Exit action</a></dd> 82 83 <dd><a href="#TransitionAction">Transition action</a></dd> 84 85 <dd><a href="#DoActivity">Do activity</a></dd> 86 </dl> 87 <hr> 88 89 <h2><a name="StateMachine" id="StateMachine">State machine</a></h2> 90 91 <ul> 92 <li>A state machine is defined by deriving a class from either the 93 <code><a href= 94 "reference.html#ClassTemplatestate_machine">state_machine</a></code> or 95 the <code><a href= 96 "reference.html#ClassTemplateasynchronous_state_machine">asynchronous_state_machine</a></code> 97 class templates; <a href= 98 "tutorial.html#DefiningStatesAndEvents">example</a></li> 99 </ul> 100 101 <h2><a name="States" id="States">States</a></h2> 102 103 <h3><a name="NormalState" id="NormalState">Normal state</a></h3> 104 105 <ul> 106 <li>A state is defined by deriving a class from either the <code><a href= 107 "reference.html#ClassTemplatesimple_state">simple_state</a></code> or 108 <code><a href="reference.html#ClassTemplatestate">state</a></code> class 109 templates; <a href= 110 "tutorial.html#DefiningStatesAndEvents">example</a></li> 111 112 <li>The position of a state in the state hierarchy is defined by what is 113 passed as the <code>Context</code> template parameter. <a href= 114 "definitions.html#OutermostState">Outermost states</a> pass the 115 <code><a href= 116 "reference.html#ClassTemplatestate_machine">state_machine<></a></code> 117 or <code><a href= 118 "reference.html#ClassTemplateasynchronous_state_machine">asynchronous_state_machine<></a></code> 119 subtype they belong to, inner states pass their direct outer state; 120 <a href="tutorial.html#DefiningStatesAndEvents">example</a></li> 121 122 <li>A state can be made a member of a particular orthogonal region by 123 passing an instantiation of the <code>orthogonal</code> class template 124 nested in its outer state; <a href= 125 "tutorial.html#OrthogonalStates">example</a></li> 126 </ul> 127 128 <h3><a name="InitialPseudostate" id="InitialPseudostate">Initial 129 pseudostate</a></h3> 130 131 <ul> 132 <li>The state that is initially entered is identified by template 133 parameters rather than by a default transition from the initial 134 pseudostate (there is no such thing in Boost.Statechart)</li> 135 136 <li>For <code><a href= 137 "reference.html#ClassTemplatestate_machine">state_machine<></a></code> 138 and <code><a href= 139 "reference.html#ClassTemplateasynchronous_state_machine">asynchronous_state_machine<></a></code> 140 the state that is initially entered needs to be specified with the 141 <code>InitialState</code> template parameter; <a href= 142 "tutorial.html#DefiningStatesAndEvents">example</a></li> 143 144 <li>For <code><a href= 145 "reference.html#ClassTemplatesimple_state">simple_state<></a></code> 146 and <code><a href= 147 "reference.html#ClassTemplatestate">state<></a></code> the inner 148 state(s) that is/are initially entered can be specified with the 149 <code>InnerInitial</code> template parameter; <a href= 150 "tutorial.html#DefiningStatesAndEvents">example</a></li> 151 </ul> 152 153 <h3><a name="FinalPseudostate" id="FinalPseudostate">Final 154 pseudostate</a></h3> 155 156 <ul> 157 <li>There is no such thing as a final pseudostate in 158 Boost.Statechart</li> 159 160 <li>This functionality is implemented with a special reaction 161 (<code><a href= 162 "reference.html#ClassTemplatetermination">termination<></a></code>) 163 and special reaction function (<code><a href= 164 "reference.html#simple_state::terminate">simple_state<>::terminate()</a></code>); 165 <a href="tutorial.html#StateQueries">example</a></li> 166 </ul> 167 168 <h3><a name="ShallowHistoryPseudostate" id= 169 "ShallowHistoryPseudostate">Shallow history pseudostate</a></h3> 170 171 <ul> 172 <li>A shallow history transition target or shallow history inner initial 173 state can be specified with <code><a href= 174 "reference.html#ClassTemplateshallow_history">shallow_history<></a></code></li> 175 </ul> 176 177 <h3><a name="DeepHistoryPseudostate" id="DeepHistoryPseudostate">Deep 178 history pseudostate</a></h3> 179 180 <ul> 181 <li>A deep history transition target or deep history inner initial state 182 can be specified with <code><a href= 183 "reference.html#ClassTemplatedeep_history">deep_history<></a></code>; 184 <a href="tutorial.html#History">example</a></li> 185 </ul> 186 187 <h3><a name="JunctionPoint" id="JunctionPoint">Junction point</a></h3> 188 189 <ul> 190 <li>Does not exist in Boost.Statechart; <a href= 191 "rationale.html#Limitations">rationale</a></li> 192 </ul> 193 194 <h3><a name="DynamicChoicePoint" id="DynamicChoicePoint">Dynamic choice 195 point</a></h3> 196 197 <ul> 198 <li>Does not (yet?) exist in Boost.Statechart; <a href= 199 "rationale.html#Limitations">rationale</a></li> 200 </ul> 201 202 <h3><a name="JoinAndForkBars" id="JoinAndForkBars">Join and fork 203 bars</a></h3> 204 205 <ul> 206 <li>Do not exist in Boost.Statechart; <a href= 207 "rationale.html#Limitations">rationale</a></li> 208 </ul> 209 210 <h2><a name="Events" id="Events">Events</a></h2> 211 212 <ul> 213 <li>A event is defined by deriving a class from the <a href= 214 "reference.html#ClassTemplateevent"><code>event</code></a> class 215 template; <a href= 216 "tutorial.html#DefiningStatesAndEvents">example</a></li> 217 218 <li>There is no distinction between signal and call events, see 219 below</li> 220 </ul> 221 222 <h3><a name="CallEvent" id="CallEvent">Call event</a></h3> 223 224 <ul> 225 <li>All events passed to <code><a href= 226 "reference.html#process_event">state_machine<>::process_event()</a></code> 227 are implicitly call events</li> 228 </ul> 229 230 <h3><a name="SignalEvent" id="SignalEvent">Signal event</a></h3> 231 232 <ul> 233 <li>All events passed to either <code><a href= 234 "reference.html#post_event0">simple_state<>::post_event()</a></code> 235 or <code><a href= 236 "reference.html#queue_event">fifo_scheduler<>::queue_event()</a></code> 237 are implicitly signal events</li> 238 </ul> 239 240 <h3><a name="TimeEvent" id="TimeEvent">Time event</a></h3> 241 242 <ul> 243 <li>Does not exist in Boost.Statechart</li> 244 245 <li>A time event can be simulated with an external timer that is started 246 in the entry action and stopped in the exit action of a particular state. 247 When starting the timer, it is instructed to call <code><a href= 248 "reference.html#queue_event">fifo_scheduler<>::queue_event()</a></code> 249 when the due time elapses</li> 250 </ul> 251 252 <h3><a name="ChangeEvent" id="ChangeEvent">Change event</a></h3> 253 254 <ul> 255 <li>Does not exist in Boost.Statechart</li> 256 257 <li>A change event can be simulated by packing to be monitored variables 258 into an external wrapper with <code>get</code> and <code>set</code> 259 methods. Whenever <code>set</code> is called the wrapper posts an 260 appropriate event</li> 261 </ul> 262 263 <h2><a name="Reactions" id="Reactions">Reactions</a></h2> 264 265 <h3><a name="Guard" id="Guard">Guard</a></h3> 266 267 <ul> 268 <li>A guard can be implemented with a selection statement in a 269 <code><a href= 270 "reference.html#ClassTemplatecustom_reaction">custom_reaction<></a></code>; 271 <a href="tutorial.html#Guards">example</a></li> 272 </ul> 273 274 <h3><a name="Transition" id="Transition">Transition</a></h3> 275 276 <ul> 277 <li>A transition can be defined with either a <code><a href= 278 "reference.html#ClassTemplatetransition">transition<></a></code> or 279 a call to <code><a href= 280 "reference.html#transit1">simple_state<>::transit<></a></code> 281 in a <code><a href= 282 "reference.html#ClassTemplatecustom_reaction">custom_reaction<></a></code>; 283 <a href="tutorial.html#AddingReactions">example</a></li> 284 </ul> 285 286 <h3><a name="Deferral" id="Deferral">Deferral</a></h3> 287 288 <ul> 289 <li>A deferral reaction can be defined with either a <code><a href= 290 "reference.html#ClassTemplatedeferral">deferral<></a></code> or a 291 call to <code><a href= 292 "reference.html#defer_event">simple_state<>::defer_event()</a></code> 293 in a <code><a href= 294 "reference.html#ClassTemplatecustom_reaction">custom_reaction<></a></code>; 295 <a href="tutorial.html#DeferringEvents">example</a></li> 296 </ul> 297 298 <h3><a name="InternalTransition" id="InternalTransition">Internal 299 transition (in-state reaction)</a></h3> 300 301 <ul> 302 <li>An in-state reaction can be defined with either a <code><a href= 303 "reference.html#ClassTemplatein_state_reaction">in_state_reaction<></a></code> 304 or a call to <a href= 305 "reference.html#discard_event"><code>simple_state<>::discard_event()</code></a> 306 in a <code><a href= 307 "reference.html#ClassTemplatecustom_reaction">custom_reaction<></a></code></li> 308 </ul> 309 310 <h2><a name="Actions" id="Actions">Actions</a></h2> 311 312 <h3><a name="EntryAction" id="EntryAction">Entry action</a></h3> 313 314 <ul> 315 <li>A state entry action can be defined by adding a constructor to a 316 state class; <a href="tutorial.html#HelloWorld">example</a></li> 317 </ul> 318 319 <h3><a name="ExitAction" id="ExitAction">Exit action</a></h3> 320 321 <ul> 322 <li>A state exit action can be defined by adding a destructor to a state 323 class; <a href="tutorial.html#HelloWorld">example</a></li> 324 </ul> 325 326 <h3><a name="TransitionAction" id="TransitionAction">Transition 327 action</a></h3> 328 329 <ul> 330 <li>A transition action can be defined by passing a function pointer 331 referencing the action to either <code><a href= 332 "reference.html#ClassTemplatetransition">transition<></a></code> or 333 <code><a href= 334 "reference.html#transit2">simple_state<>::transit<>()</a></code>; 335 <a href="tutorial.html#TransitionActions">example</a></li> 336 </ul> 337 338 <h3><a name="DoActivity" id="DoActivity">Do activity</a></h3> 339 340 <ul> 341 <li>Not supported in Boost.Statechart</li> 342 343 <li>A do activity can be simulated with a separate thread that is started 344 in the entry action and cancelled (!) in the exit action of a particular 345 state</li> 346 </ul> 347 <hr> 348 349 <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src= 350 "../../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional" 351 height="31" width="88"></a></p> 352 353 <p>Revised 354 <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->03 December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38512" --></p> 355 356 <p><i>Copyright © 2003-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y" startspan -->2006<!--webbot bot="Timestamp" endspan i-checksum="770" --> 357 <a href="contact.html">Andreas Huber Dönni</a></i></p> 358 359 <p><i>Distributed under the Boost Software License, Version 1.0. (See 360 accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or 361 copy at <a href= 362 "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p> 363</body> 364</html> 365