mirror of
https://github.com/boostorg/msm.git
synced 2026-01-26 18:52:17 +00:00
2171 lines
64 KiB
Plaintext
2171 lines
64 KiB
Plaintext
= Front-end headers
|
|
|
|
[[msmfrontcommon_stateshpp]]
|
|
|
|
== msm/front/common_states.hpp
|
|
|
|
This header contains the predefined types to serve as base for states or
|
|
state machines:
|
|
|
|
* default_base_state: non-polymorphic empty type.
|
|
* polymorphic_state: type with a virtual destructor, which makes all
|
|
states polymorphic.
|
|
|
|
[[msmfrontcompletion_eventhpp]]
|
|
|
|
== msm/front/completion_event.hpp
|
|
|
|
This header contains one type, `none`. This type has several meanings
|
|
inside a transition table:
|
|
|
|
* as action or guard: that there is no action or guard
|
|
* as target state: that the transition is an internal transition
|
|
* as event: the transition is an anonymous (completion) transition
|
|
|
|
[[msmfrontfunctor_rowhpp]]
|
|
|
|
== msm/front/functor_row.hpp
|
|
|
|
This header implements the functor front-end's transitions and helpers.
|
|
|
|
[[row]]
|
|
|
|
=== Row
|
|
|
|
[[definition]]
|
|
|
|
==== definition
|
|
|
|
template <class Source,class Event,class Target,class Action,class
|
|
Guard> Row
|
|
|
|
[[tags]]
|
|
|
|
==== tags
|
|
|
|
row_type_tag is defined differently for every specialization:
|
|
|
|
* all 5 template parameters means a normal transition with action and
|
|
guard: `typedef row_tag row_type_tag;`
|
|
* Row<Source,Event,Target,none,none> a normal transition without action
|
|
or guard: `typedef _row_tag row_type_tag;`
|
|
* Row<Source,Event,Target,Action,none> a normal transition without
|
|
guard: `typedef a_row_tag row_type_tag;`
|
|
* Row<Source,Event,Target,none,Guard> a normal transition without
|
|
action: `typedef g_row_tag row_type_tag;`
|
|
* Row<Source,Event,none,Action,none> an internal transition without
|
|
guard: `typedef a_irow_tag row_type_tag;`
|
|
* Row<Source,Event,none,none,Guard> an internal transition without
|
|
action: `typedef g_irow_tag row_type_tag;`
|
|
* Row<Source,Event,none,none,Guard> an internal transition with action
|
|
and guard: `typedef irow_tag row_type_tag;`
|
|
* Row<Source,Event,none,none,none> an internal transition without action
|
|
or guard: `typedef _irow_tag row_type_tag;`
|
|
|
|
[[methods]]
|
|
|
|
==== methods
|
|
|
|
Like any other front-end, Row implements the two necessary static
|
|
functions for action and guard call. Each function receives as parameter
|
|
the (deepest-level) state machine processing the event, the event
|
|
itself, the source and target states and all the states contained in a
|
|
state machine.
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static void action_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static bool guard_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
[[internal]]
|
|
|
|
=== Internal
|
|
|
|
==== definition
|
|
|
|
template <class Event,class Action,class Guard> Internal
|
|
|
|
==== tags
|
|
|
|
row_type_tag is defined differently for every specialization:
|
|
|
|
* all 3 template parameters means an internal transition with action and
|
|
guard: `typedef sm_i_row_tag row_type_tag;`
|
|
* Internal<Event,none,none> an internal transition without action or
|
|
guard: `typedef sm__i_row_tag row_type_tag;`
|
|
* Internal<Event,Action,none> an internal transition without guard:
|
|
`typedef sm_a_i_row_tag row_type_tag;`
|
|
* Internal<Event,none,Guard> an internal transition without action:
|
|
`typedef sm_g_i_row_tag row_type_tag;`
|
|
|
|
==== methods
|
|
|
|
Like any other front-end, Internal implements the two necessary static
|
|
functions for action and guard call. Each function receives as parameter
|
|
the (deepest-level) state machine processing the event, the event
|
|
itself, the source and target states and all the states contained in a
|
|
state machine.
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static void action_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static bool guard_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
[[actionsequence_]]
|
|
|
|
=== ActionSequence_
|
|
|
|
This functor calls every element of the template Sequence (which are
|
|
also callable functors) in turn. It is also the underlying
|
|
implementation of the eUML sequence grammar (action1,action2,...).
|
|
|
|
==== definition
|
|
|
|
template <class Sequence> ActionSequence_
|
|
|
|
==== methods
|
|
|
|
This helper functor is made for use in a transition table and in a state
|
|
behavior and therefore implements an operator() with 3 and with 4
|
|
arguments:
|
|
|
|
template <class Evt,class Fsm,class SourceState,class TargetState>
|
|
operator() Evt const& ,Fsm& ,SourceState& ,TargetState&
|
|
|
|
template <class Evt,class Fsm,class State> operator() Evt const&, Fsm&,
|
|
State&
|
|
|
|
[[defer]]
|
|
|
|
=== Defer
|
|
|
|
==== definition
|
|
|
|
Defer
|
|
|
|
==== methods
|
|
|
|
This helper functor is made for use in a transition table and therefore
|
|
implements an operator() with 4 arguments:
|
|
|
|
template <class Evt,class Fsm,class SourceState,class TargetState>
|
|
operator()
|
|
|
|
Evt const&, Fsm& , SourceState&, TargetState&
|
|
|
|
[[msmfrontinternal_rowhpp]]
|
|
|
|
== msm/front/internal_row.hpp
|
|
|
|
This header implements the internal transition rows for use inside an
|
|
internal_transition_table. All these row types have no source or target
|
|
state, as the backend will recognize internal transitions from this
|
|
internal_transition_table.
|
|
|
|
=== methods
|
|
|
|
Like any other front-end, the following transition row types implements
|
|
the two necessary static functions for action and guard call. Each
|
|
function receives as parameter the (deepest-level) state machine
|
|
processing the event, the event itself, the source and target states and
|
|
all the states contained in a state machine.
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static void action_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static bool guard_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
[[a_internal]]
|
|
|
|
=== a_internal
|
|
|
|
==== definition
|
|
|
|
This is an internal transition with an action called during the
|
|
transition.
|
|
|
|
template< class Event, class CalledForAction, void
|
|
(CalledForAction::*action)(Event const&)> a_internal
|
|
|
|
[[template-parameters]]
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the internal transition.
|
|
* CalledForAction: the type on which the action method will be called.
|
|
It can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* action: a pointer to the method which CalledForAction provides.
|
|
|
|
[[g_internal]]
|
|
|
|
=== g_internal
|
|
|
|
This is an internal transition with a guard called before the transition
|
|
and allowing the transition if returning true.
|
|
|
|
==== definition
|
|
|
|
template< class Event, class CalledForGuard, bool
|
|
(CalledForGuard::*guard)(Event const&)> g_internal
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the internal transition.
|
|
* CalledForGuard: the type on which the guard method will be called. It
|
|
can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* guard: a pointer to the method which CalledForGuard provides.
|
|
|
|
=== internal
|
|
|
|
This is an internal transition with a guard called before the transition
|
|
and allowing the transition if returning true. It also calls an action
|
|
called during the transition.
|
|
|
|
==== definition
|
|
|
|
template< class Event, class CalledForAction, void
|
|
(CalledForAction::*action)(Event const&), class CalledForGuard, bool
|
|
(CalledForGuard::*guard)(Event const&)> internal
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the internal transition
|
|
* CalledForAction: the type on which the action method will be called.
|
|
It can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* action: a pointer to the method which CalledForAction provides.
|
|
* CalledForGuard: the type on which the guard method will be called. It
|
|
can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* guard: a pointer to the method which CalledForGuard provides.
|
|
|
|
=== _internal
|
|
|
|
This is an internal transition without action or guard. This is
|
|
equivalent to an explicit "ignore event".
|
|
|
|
==== definition
|
|
|
|
template< class Event > _internal
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the internal transition.
|
|
|
|
[[msmfrontrow2hpp]]
|
|
|
|
== msm/front/row2.hpp
|
|
|
|
This header contains the variants of row2, which are an extension of the
|
|
standard row transitions for use in the transition table. They offer the
|
|
possibility to define action and guard not only in the state machine,
|
|
but in any state of the state machine. They can also be used in internal
|
|
transition tables through their irow2 variants.
|
|
|
|
=== methods
|
|
|
|
Like any other front-end, the following transition row types implements
|
|
the two necessary static functions for action and guard call. Each
|
|
function receives as parameter the (deepest-level) state machine
|
|
processing the event, the event itself, the source and target states and
|
|
all the states contained in a state machine.
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static void action_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static bool guard_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
[[_row2]]
|
|
|
|
=== _row2
|
|
|
|
This is a transition without action or guard. The state machine only
|
|
changes active state.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event, class Target > _row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
|
|
[[a_row2]]
|
|
|
|
=== a_row2
|
|
|
|
This is a transition with action and without guard.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event, class Target,
|
|
|
|
class CalledForAction, void (CalledForAction::*action)(Event const&) >
|
|
_row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
* CalledForAction: the type on which the action method will be called.
|
|
It can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* action: a pointer to the method which CalledForAction provides.
|
|
|
|
[[g_row2]]
|
|
|
|
=== g_row2
|
|
|
|
This is a transition with guard and without action.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event, class Target,
|
|
|
|
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) >
|
|
_row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
* CalledForGuard: the type on which the guard method will be called. It
|
|
can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* guard: a pointer to the method which CalledForGuard provides.
|
|
|
|
[[row2]]
|
|
|
|
=== row2
|
|
|
|
This is a transition with guard and action.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event, class Target,
|
|
|
|
class CalledForAction, void (CalledForAction::*action)(Event const&),
|
|
|
|
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) >
|
|
_row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
* CalledForAction: the type on which the action method will be called.
|
|
It can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* action: a pointer to the method which CalledForAction provides.
|
|
* CalledForGuard: the type on which the guard method will be called. It
|
|
can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* guard: a pointer to the method which CalledForGuard provides.
|
|
|
|
[[a_irow2]]
|
|
|
|
=== a_irow2
|
|
|
|
This is an internal transition for use inside a transition table, with
|
|
action and without guard.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event,
|
|
|
|
class CalledForAction, void (CalledForAction::*action)(Event const&) >
|
|
_row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* CalledForAction: the type on which the action method will be called.
|
|
It can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* action: a pointer to the method which CalledForAction provides.
|
|
|
|
[[g_irow2]]
|
|
|
|
=== g_irow2
|
|
|
|
This is an internal transition for use inside a transition table, with
|
|
guard and without action.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event,
|
|
|
|
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) >
|
|
_row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* CalledForGuard: the type on which the guard method will be called. It
|
|
can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* guard: a pointer to the method which CalledForGuard provides.
|
|
|
|
[[irow2]]
|
|
|
|
=== irow2
|
|
|
|
This is an internal transition for use inside a transition table, with
|
|
guard and action.
|
|
|
|
==== definition
|
|
|
|
template< class Source, class Event,
|
|
|
|
class CalledForAction, void (CalledForAction::*action)(Event const&),
|
|
|
|
class CalledForGuard, bool (CalledForGuard::*guard)(Event const&) >
|
|
_row2
|
|
|
|
==== template parameters
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* CalledForAction: the type on which the action method will be called.
|
|
It can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* action: a pointer to the method which CalledForAction provides.
|
|
* CalledForGuard: the type on which the guard method will be called. It
|
|
can be either a state of the containing state machine or the state
|
|
machine itself.
|
|
* guard: a pointer to the method which CalledForGuard provides.
|
|
|
|
[[msmfrontstate_machine_defhpp]]
|
|
|
|
== msm/front/state_machine_def.hpp
|
|
|
|
This header provides the implementation of the `basic front-end`. It
|
|
contains one type, `state_machine_def`
|
|
|
|
[[state_machine_def-definition]]
|
|
|
|
=== state_machine_def definition
|
|
|
|
This type is the basic class for a basic (or possibly any other)
|
|
front-end. It provides the standard row types (which includes internal
|
|
transitions) and a default implementation of the required methods and
|
|
typedefs.
|
|
|
|
template <class Derived,class BaseState = default_base_state>
|
|
state_machine_def
|
|
|
|
[[typedefs]]
|
|
|
|
==== typedefs
|
|
|
|
* flag_list: by default, no flag is set in the state machine
|
|
* deferred_events: by default, no event is deferred.
|
|
* configuration: by default, no configuration customization is done.
|
|
|
|
[[row-methods]]
|
|
|
|
==== row methods
|
|
|
|
Like any other front-end, the following transition row types implements
|
|
the two necessary static functions for action and guard call. Each
|
|
function receives as parameter the (deepest-level) state machine
|
|
processing the event, the event itself, the source and target states and
|
|
all the states contained in a state machine (ignored).
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static void action_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
template <class Fsm,class SourceState,class TargetState, class
|
|
AllStates> static bool guard_call
|
|
|
|
Fsm& fsm,Event const& evt,SourceState&,TargetState,AllStates&
|
|
|
|
[[a_row]]
|
|
|
|
==== a_row
|
|
|
|
This is a transition with action and without guard.
|
|
|
|
`template< class Source, class Event, class Target, void (Derived::*action)(Event const&) > a_row`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
* action: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
|
|
[[g_row]]
|
|
|
|
==== g_row
|
|
|
|
This is a transition with guard and without action.
|
|
|
|
`template< class Source, class Event, class Target, bool (Derived::*guard)(Event const&) > g_row`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
* guard: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
|
|
==== row
|
|
|
|
This is a transition with guard and action.
|
|
|
|
`template< class Source, class Event, class Target, void (Derived::*action)(Event const&), bool (Derived::*guard)(Event const&) > row`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
* action: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
* guard: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
|
|
==== _row
|
|
|
|
This is a transition without action or guard. The state machine only
|
|
changes active state.
|
|
|
|
`template< class Source, class Event, class Target > _row`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* Target: the target state of the transition.
|
|
|
|
[[a_irow]]
|
|
|
|
==== a_irow
|
|
|
|
This is an internal transition for use inside a transition table, with
|
|
action and without guard.
|
|
|
|
`template< class Source, class Event, void (Derived::*action)(Event const&) > a_irow`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* action: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
|
|
[[g_irow]]
|
|
|
|
==== g_irow
|
|
|
|
This is an internal transition for use inside a transition table, with
|
|
guard and without action.
|
|
|
|
`template< class Source, class Event, bool (Derived::*guard)(Event const&) > g_irow`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* guard: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
|
|
[[irow]]
|
|
|
|
==== irow
|
|
|
|
This is an internal transition for use inside a transition table, with
|
|
guard and action.
|
|
|
|
`template< class Source, class Event, void (Derived::*action)(Event const&), bool (Derived::*guard)(Event const&) > irow`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
* action: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
* guard: a pointer to the method provided by the concrete front-end
|
|
(represented by `Derived`).
|
|
|
|
[[_irow]]
|
|
|
|
==== _irow
|
|
|
|
This is an internal transition without action or guard. As it does
|
|
nothing, it means "ignore event".
|
|
|
|
`template< class Source, class Event > _irow`
|
|
|
|
* Event: the event triggering the transition.
|
|
* Source: the source state of the transition.
|
|
|
|
==== methods
|
|
|
|
`state_machine_def` provides a default implementation in case of an
|
|
event which cannot be processed by a state machine (no transition
|
|
found). The implementation is using a `BOOST_ASSERT` so that the error
|
|
will only be noticed in debug mode. Overwrite this method in your
|
|
implementation to change the behavior.
|
|
|
|
template <class Fsm,class Event> static void no_transition Event const&
|
|
,Fsm&, int state
|
|
|
|
`state_machine_def` provides a default implementation in case an
|
|
exception is thrown by a state (entry/exit) or transition (action/guard)
|
|
behavior. The implementation is using a `BOOST_ASSERT` so that the error
|
|
will only be noticed in debug mode. Overwrite this method in your
|
|
implementation to change the behavior. This method will be called only
|
|
if exception handling is not deactivated (default) by defining
|
|
`has_no_message_queue`.
|
|
|
|
template <class Fsm,class Event> static void exception_caught Event
|
|
const& ,Fsm&, std::exception&
|
|
|
|
[[msmfrontstateshpp]]
|
|
|
|
== msm/front/states.hpp
|
|
|
|
This header provides the different states (except state machines) for
|
|
the basic front-end (or mixed with other front-ends).
|
|
|
|
[[types]]
|
|
|
|
=== types
|
|
|
|
This header provides the following types:
|
|
|
|
[[no_sm_ptr]]
|
|
|
|
==== no_sm_ptr
|
|
|
|
deprecated: default policy for states. It means that states do not need
|
|
to save a pointer to their containing state machine.
|
|
|
|
[[sm_ptr]]
|
|
|
|
==== sm_ptr
|
|
|
|
deprecated: state policy. It means that states need to save a pointer to
|
|
their containing state machine. When seeing this flag, the back-end will
|
|
call set_sm_ptr(fsm*) and give itself as argument.
|
|
|
|
[[state]]
|
|
|
|
==== state
|
|
|
|
Basic type for simple states. Inherit from this type to define a simple
|
|
state. The first argument is needed if you want your state (and all
|
|
others used in a concrete state machine) to inherit a basic type for
|
|
logging or providing a common behavior.
|
|
|
|
template<class Base = default_base_state,class SMPtrPolicy = no_sm_ptr>
|
|
state
|
|
|
|
[[terminate_state]]
|
|
|
|
==== terminate_state
|
|
|
|
Basic type for terminate states. Inherit from this type to define a
|
|
terminate state. The first argument is needed if you want your state
|
|
(and all others used in a concrete state machine) to inherit a basic
|
|
type for logging or providing a common behavior.
|
|
|
|
template<class Base = default_base_state,class SMPtrPolicy = no_sm_ptr>
|
|
terminate_state
|
|
|
|
[[interrupt_state]]
|
|
|
|
==== interrupt_state
|
|
|
|
Basic type for interrupt states. Interrupt states prevent any further
|
|
event handling until EndInterruptEvent is sent. Inherit from this type
|
|
to define a terminate state. The first argument is the name of the event
|
|
ending the interrupt. The second argument is needed if you want your
|
|
state (and all others used in a concrete state machine) to inherit a
|
|
basic type for logging or providing a common behavior.
|
|
|
|
The EndInterruptEvent can also be a sequence of events:
|
|
mpl::vector<EndInterruptEvent,EndInterruptEvent2>.
|
|
|
|
template<class EndInterruptEvent,class Base = default_base_state,
|
|
|
|
class SMPtrPolicy = no_sm_ptr> interrupt_state
|
|
|
|
[[explicit_entry]]
|
|
|
|
==== explicit_entry
|
|
|
|
Inherit from this type _in addition_ to the desired state type to enable
|
|
this state for direct entering. The template parameter gives the region
|
|
id of the state (regions are numbered in the order of the
|
|
`initial_state` typedef).
|
|
|
|
template <int ZoneIndex=-1> explicit_entry
|
|
|
|
[[entry_pseudo_state]]
|
|
|
|
==== entry_pseudo_state
|
|
|
|
Basic type for entry pseudo states. Entry pseudo states are a predefined
|
|
entry into a submachine and connect two transitions. The first argument
|
|
is the id of the region entered by this state (regions are numbered in
|
|
the order of the `initial_state` typedef). The second argument is needed
|
|
if you want your state (and all others used in a concrete state machine)
|
|
to inherit a basic type for logging or providing a common behavior.
|
|
|
|
template<int RegionIndex=-1,class Base = default_base_state,
|
|
|
|
class SMPtrPolicy = no_sm_ptr> entry_pseudo_state
|
|
|
|
[[exit_pseudo_state]]
|
|
|
|
==== exit_pseudo_state
|
|
|
|
Basic type for exit pseudo states. Exit pseudo states are a predefined
|
|
exit from a submachine and connect two transitions. The first argument
|
|
is the name of the event which will be "thrown" out of the exit point.
|
|
This event does not need to be the same as the one sent by the inner
|
|
region but must be convertible from it. The second argument is needed if
|
|
you want your state (and all others used in a concrete state machine) to
|
|
inherit a basic type for logging or providing a common behavior.
|
|
|
|
template<class Event,class Base = default_base_state,
|
|
|
|
class SMPtrPolicy = no_sm_ptr> exit_pseudo_state
|
|
|
|
[[msmfronteumleumlhpp]]
|
|
|
|
== msm/front/euml/euml.hpp
|
|
|
|
This header includes all of eUML except the STL functors.
|
|
|
|
[[msmfronteumlstlhpp]]
|
|
|
|
== msm/front/euml/stl.hpp
|
|
|
|
This header includes all the functors for STL support in eUML. These
|
|
`tables` show a full description.
|
|
|
|
[[msmfronteumlalgorithmhpp]]
|
|
|
|
== msm/front/euml/algorithm.hpp
|
|
|
|
This header includes all the functors for STL algorithms support in
|
|
eUML. These `tables` show a full description.
|
|
|
|
[[msmfronteumliterationhpp]]
|
|
|
|
== msm/front/euml/iteration.hpp
|
|
|
|
This header includes iteration functors for STL support in eUML. This
|
|
`table` shows a full description.
|
|
|
|
[[msmfronteumlqueryinghpp]]
|
|
|
|
== msm/front/euml/querying.hpp
|
|
|
|
This header includes querying functors for STL support in eUML. This
|
|
`table` shows a full description.
|
|
|
|
[[msmfronteumltransformationhpp]]
|
|
|
|
== msm/front/euml/transformation.hpp
|
|
|
|
This header includes transformation functors for STL support in eUML.
|
|
This `table` shows a full description.
|
|
|
|
[[msmfronteumlcontainerhpp]]
|
|
|
|
== msm/front/euml/container.hpp
|
|
|
|
This header includes container functors for STL support in eUML
|
|
(functors calling container methods). This `table` shows a full
|
|
description. It also provides npos for strings.
|
|
|
|
[[npos_container-type]]
|
|
|
|
=== Npos_<container type>
|
|
|
|
Functor returning npos for transition or state behaviors. Like all
|
|
constants, only the functor form exists, so parentheses are necessary.
|
|
Example:
|
|
|
|
`string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != Npos_<string>() // compare result of string::find with npos`
|
|
|
|
[[msmfronteumlstt_grammarhpp]]
|
|
|
|
== msm/front/euml/stt_grammar.hpp
|
|
|
|
This header provides the transition table grammars. This includes
|
|
internal transition tables.
|
|
|
|
[[functions]]
|
|
|
|
=== functions
|
|
|
|
[[build_stt]]
|
|
|
|
==== build_stt
|
|
|
|
The function build_stt evaluates the grammar-conforming expression as
|
|
parameter. It returns a transition table, which is a mpl::vector of
|
|
transitions (rows) or, if the expression is ill-formed (does not match
|
|
the grammar), the type `invalid_type`, which will lead to a compile-time
|
|
static assertion when this transition table is passed to a state
|
|
machine.
|
|
|
|
template<class Expr> [mpl::vector<...> / msm::front::euml::invalid_type]
|
|
build_stt
|
|
|
|
Expr const& expr
|
|
|
|
[[build_internal_stt]]
|
|
|
|
==== build_internal_stt
|
|
|
|
The function build_internal_stt evaluates the grammar-conforming
|
|
expression as parameter. It returns a transition table, which is a
|
|
mpl::vector of transitions (rows) or, if the expression is ill-formed
|
|
(does not match the grammar), the type `invalid_type`, which will lead
|
|
to a compile-time static assertion when this transition table is passed
|
|
to a state machine.
|
|
|
|
template<class Expr> [mpl::vector<...> / msm::front::euml::invalid_type]
|
|
build_internal_stt
|
|
|
|
Expr const& expr
|
|
|
|
[[grammars]]
|
|
|
|
=== grammars
|
|
|
|
[[transition-tablereference-stt-grammar]]
|
|
|
|
==== `transition table[[reference-stt-grammar]]
|
|
|
|
The transition table accepts the following grammar:
|
|
|
|
....
|
|
Stt := Row | (Stt ',' Stt)
|
|
Row := (Target '==' (SourcePlusEvent)) /* first syntax*/
|
|
| ( (SourcePlusEvent) '==' Target ) /* second syntax*/
|
|
| (SourcePlusEvent) /* internal transitions */
|
|
SourcePlusEvent := (BuildSource '+' BuildEvent)/* standard transition*/
|
|
| (BuildSource) /* anonymous transition */
|
|
BuildSource := state_tag | (state_tag '/' Action) | (state_tag '[' Guard ']')
|
|
| (state_tag '[' Guard ']' '/' Action)
|
|
BuildEvent := event_tag | (event_tag '/' Action) | (event_tag '[' Guard ']')
|
|
| (event_tag '[' Guard ']' '/' Action)
|
|
....
|
|
|
|
The grammars Action and Guard are defined in state_grammar.hpp and
|
|
guard_grammar.hpp respectively. state_tag and event_tag are inherited
|
|
from euml_state (or other state variants) and euml_event respectively.
|
|
For example, following declarations are possible:
|
|
|
|
....
|
|
target == source + event [guard] / action,
|
|
source + event [guard] / action == target,
|
|
source + event [guard] / (action1,action2) == target,
|
|
target == source + event [guard] / (action1,action2),
|
|
target == source + event,
|
|
source + event == target,
|
|
target == source + event [guard],
|
|
source + event [guard] == target,
|
|
target == source + event / action,
|
|
source + event /action == target,
|
|
source / action == target, /*anonymous transition*/
|
|
target == source / action, /*anonymous transition*/
|
|
source + event /action, /* internal transition*/
|
|
....
|
|
|
|
[[internal-transition-table]]
|
|
|
|
==== internal transition table
|
|
|
|
The internal transition table accepts the following grammar:
|
|
|
|
....
|
|
IStt := BuildEvent | (IStt ',' IStt)
|
|
....
|
|
|
|
BuildEvent being defined for both internal and standard transition
|
|
tables.
|
|
|
|
[[msmfronteumlguard_grammarhpp]]
|
|
|
|
== msm/front/euml/guard_grammar.hpp
|
|
|
|
This header contains the `Guard` grammar used in the previous section.
|
|
This grammar is long but pretty simple:
|
|
|
|
....
|
|
Guard := action_tag | (Guard '&&' Guard)
|
|
| (Guard '||' Guard) | ... /* operators*/
|
|
| (if_then_else_(Guard,Guard,Guard)) | (function (Action,...Action))
|
|
....
|
|
|
|
Most C++ operators are supported (address-of is not). With `function` is
|
|
meant any eUML predefined function or any self-made (using
|
|
`MSM_EUML_METHOD` or `MSM_EUML_FUNCTION`). Action is a grammar defined
|
|
in state_grammar.hpp.
|
|
|
|
[[msmfronteumlstate_grammarhpp]]
|
|
|
|
== msm/front/euml/state_grammar.hpp
|
|
|
|
This header provides the grammar for actions and the different grammars
|
|
and functions to build states using eUML.
|
|
|
|
[[action-grammar]]
|
|
|
|
=== action grammar
|
|
|
|
Like the guard grammar, this grammar supports relevant C++ operators and
|
|
eUML functions:
|
|
|
|
....
|
|
Action := action_tag | (Action '+' Action)
|
|
| ('--' Action) | ... /* operators*/
|
|
| if_then_else_(Guard,Action,Action) | if_then_(Action)
|
|
| while_(Guard,Action)
|
|
| do_while_(Guard,Action) | for_(Action,Guard,Action,Action)
|
|
| (function(Action,...Action))
|
|
ActionSequence := Action | (Action ',' Action)
|
|
....
|
|
|
|
Relevant operators are: ++ (post/pre), -- (post/pre), dereferencing, +
|
|
(unary/binary), - (unary/binary), *, /, %, &(bitwise), | (bitwise),
|
|
^(bitwise), +=, -=, *=, /=, %=, <<=, >>=, <<, >>, =, [].
|
|
|
|
[[attributes]]
|
|
|
|
=== attributes
|
|
|
|
This grammar is used to add attributes to states (or state machines) or
|
|
events: It evaluates to a fusion::map. You can use two forms:
|
|
|
|
* `attributes_ << no_attributes_`
|
|
* `attributes_ << attribute_1 << ... << attribute_n`
|
|
|
|
Attributes can be of any default-constructible type (fusion
|
|
requirement).
|
|
|
|
[[configure]]
|
|
|
|
=== configure
|
|
|
|
This grammar also has two forms:
|
|
|
|
* `configure_ << no_configure_`
|
|
* `configure_ << type_1 << ... << type_n`
|
|
|
|
This grammar is used to create inside one syntax:
|
|
|
|
* flags: `configure_ << some_flag` where some_flag inherits from
|
|
`euml_flag<some_flag>` or is defined using BOOST_MSM_EUML_FLAG.
|
|
* deferred events: `configure_ << some_event` where some_event inherits
|
|
from `euml_event<some_event>` or is defined using BOOST_MSM_EUML_EVENT
|
|
or BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES.
|
|
* configuration (message queue, manual deferring, exception handling):
|
|
`configure_ << some_config` where some_config inherits from
|
|
`euml_config<some_config>`. At the moment, three predefined objects
|
|
exist (in msm//front/euml/common.hpp):
|
|
** no_exception: disable catching exceptions
|
|
** no_msg_queue: disable message queue
|
|
** deferred_events: manually enable handling of deferred events
|
|
|
|
[[initial-states]]
|
|
|
|
=== initial states
|
|
|
|
The grammar to define initial states for a state machine is:
|
|
`init_ << state_1 << ... << state_n` where state_1...state_n inherit
|
|
from euml_state or is defined using BOOST_MSM_EUML_STATE,
|
|
BOOST_MSM_EUML_INTERRUPT_STATE, BOOST_MSM_EUML_TERMINATE_STATE,
|
|
BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE, BOOST_MSM_EUML_ENTRY_STATE or
|
|
BOOST_MSM_EUML_EXIT_STATE.
|
|
|
|
=== functions
|
|
|
|
[[build_sm]]
|
|
|
|
==== build_sm
|
|
|
|
This function has several overloads. The return type is not relevant to
|
|
you as only decltype (return type) is what one needs.
|
|
|
|
Defines a state machine without entry or exit:
|
|
|
|
template <class StateNameTag,class Stt,class Init>
|
|
func_state_machine<...> build_sm
|
|
|
|
Stt ,Init
|
|
|
|
Defines a state machine with entry behavior:
|
|
|
|
template <class StateNameTag,class Stt,class Init,class Expr1>
|
|
func_state_machine<...> build_sm
|
|
|
|
Stt ,Init,Expr1 const&
|
|
|
|
Defines a state machine with entry and exit behaviors:
|
|
|
|
template <class StateNameTag,class Stt,class Init,class Expr1, class
|
|
Expr2> func_state_machine<...> build_sm
|
|
|
|
Stt ,Init,Expr1 const&,Expr2 const&
|
|
|
|
Defines a state machine with entry, exit behaviors and attributes:
|
|
|
|
template <class StateNameTag,class Stt,class Init,class Expr1, class
|
|
Expr2, class Attributes> func_state_machine<...> build_sm
|
|
|
|
Stt ,Init,Expr1 const&, Expr2 const&, Attributes const&
|
|
|
|
Defines a state machine with entry, exit behaviors, attributes and
|
|
configuration (deferred events, flags):
|
|
|
|
template <class StateNameTag,class Stt,class Init,class Expr1, class
|
|
Expr2, class Attributes, class Configure> func_state_machine<...>
|
|
build_sm
|
|
|
|
Stt ,Init,Expr1 const&, Expr2 const&, Attributes const&, Configure
|
|
const&
|
|
|
|
Defines a state machine with entry, exit behaviors, attributes,
|
|
configuration (deferred events, flags) and a base state:
|
|
|
|
template <class StateNameTag,class Stt,class Init,class Expr1, class
|
|
Expr2, class Attributes, class Configure, class Base>
|
|
func_state_machine<...> build_sm
|
|
|
|
Stt ,Init,Expr1 const&, Expr2 const&, Attributes const&, Configure
|
|
const&, Base
|
|
|
|
Notice that this function requires the extra parameter class
|
|
StateNameTag to disambiguate state machines having the same parameters
|
|
but still being different.
|
|
|
|
[[build_state]]
|
|
|
|
==== build_state
|
|
|
|
This function has several overloads. The return type is not relevant to
|
|
you as only decltype (return type) is what one needs.
|
|
|
|
Defines a simple state without entry or exit:
|
|
|
|
func_state<class StateNameTag,...> build_state
|
|
|
|
Defines a simple state with entry behavior:
|
|
|
|
template <class StateNameTag,class Expr1> func_state<...> build_state
|
|
|
|
Expr1 const&
|
|
|
|
Defines a simple state with entry and exit behaviors:
|
|
|
|
template <class StateNameTag,class Expr1, class Expr2> func_state<...>
|
|
build_state
|
|
|
|
Expr1 const&,Expr2 const&
|
|
|
|
Defines a simple state with entry, exit behaviors and attributes:
|
|
|
|
template <class StateNameTag,class Expr1, class Expr2, class Attributes>
|
|
func_state<...> build_state
|
|
|
|
Expr1 const&, Expr2 const&, Attributes const&
|
|
|
|
Defines a simple state with entry, exit behaviors, attributes and
|
|
configuration (deferred events, flags):
|
|
|
|
template <class StateNameTag,class Expr1, class Expr2, class Attributes,
|
|
class Configure> func_state<...> build_state
|
|
|
|
Expr1 const&, Expr2 const&, Attributes const&, Configure const&
|
|
|
|
Defines a simple state with entry, exit behaviors, attributes,
|
|
configuration (deferred events, flags) and a base state:
|
|
|
|
template <class StateNameTag,class Expr1, class Expr2, class Attributes,
|
|
class Configure, class Base> func_state<...> build_state
|
|
|
|
Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base
|
|
|
|
Notice that this function requires the extra parameter class
|
|
StateNameTag to disambiguate states having the same parameters but still
|
|
being different.
|
|
|
|
[[build_terminate_state]]
|
|
|
|
==== build_terminate_state
|
|
|
|
This function has the same overloads as build_state.
|
|
|
|
[[build_interrupt_state]]
|
|
|
|
==== build_interrupt_state
|
|
|
|
This function has several overloads. The return type is not relevant to
|
|
you as only decltype (return type) is what one needs.
|
|
|
|
Defines an interrupt state without entry or exit:
|
|
|
|
template <class StateNameTag,class EndInterruptEvent> func_state<...>
|
|
build_interrupt_state
|
|
|
|
EndInterruptEvent const&
|
|
|
|
Defines an interrupt state with entry behavior:
|
|
|
|
template <class StateNameTag,class EndInterruptEvent,class Expr1>
|
|
func_state<...> build_interrupt_state
|
|
|
|
EndInterruptEvent const&,Expr1 const&
|
|
|
|
Defines an interrupt state with entry and exit behaviors:
|
|
|
|
template <class StateNameTag,class EndInterruptEvent,class Expr1, class
|
|
Expr2> func_state<...> build_interrupt_state
|
|
|
|
EndInterruptEvent const&,Expr1 const&,Expr2 const&
|
|
|
|
Defines an interrupt state with entry, exit behaviors and attributes:
|
|
|
|
template <class StateNameTag,class EndInterruptEvent,class Expr1, class
|
|
Expr2, class Attributes> func_state<...> build_interrupt_state
|
|
|
|
EndInterruptEvent const&,Expr1 const&, Expr2 const&, Attributes const&
|
|
|
|
Defines an interrupt state with entry, exit behaviors, attributes and
|
|
configuration (deferred events, flags):
|
|
|
|
template <class StateNameTag,class EndInterruptEvent,class Expr1, class
|
|
Expr2, class Attributes, class Configure> func_state<...>
|
|
build_interrupt_state
|
|
|
|
EndInterruptEvent const&,Expr1 const&, Expr2 const&, Attributes const&,
|
|
Configure const&
|
|
|
|
Defines an interrupt state with entry, exit behaviors, attributes,
|
|
configuration (deferred events, flags) and a base state:
|
|
|
|
template <class StateNameTag,class EndInterruptEvent,class Expr1, class
|
|
Expr2, class Attributes, class Configure, class Base> func_state<...>
|
|
build_interrupt_state
|
|
|
|
EndInterruptEvent const&,Expr1 const&, Expr2 const&, Attributes const&,
|
|
Configure const&, Base
|
|
|
|
Notice that this function requires the extra parameter class
|
|
StateNameTag to disambiguate states having the same parameters but still
|
|
being different.
|
|
|
|
[[build_entry_state]]
|
|
|
|
==== build_entry_state
|
|
|
|
This function has several overloads. The return type is not relevant to
|
|
you as only decltype (return type) is what one needs.
|
|
|
|
Defines an entry pseudo state without entry or exit:
|
|
|
|
template <class StateNameTag,int RegionIndex> entry_func_state<...>
|
|
build_entry_state
|
|
|
|
Defines an entry pseudo state with entry behavior:
|
|
|
|
template <class StateNameTag,int RegionIndex,class Expr1>
|
|
entry_func_state<...> build_entry_state
|
|
|
|
Expr1 const&
|
|
|
|
Defines an entry pseudo state with entry and exit behaviors:
|
|
|
|
template <class StateNameTag,int RegionIndex,class Expr1, class Expr2>
|
|
entry_func_state<...> build_entry_state
|
|
|
|
Expr1 const&,Expr2 const&
|
|
|
|
Defines an entry pseudo state with entry, exit behaviors and attributes:
|
|
|
|
template <class StateNameTag,int RegionIndex,class Expr1, class Expr2,
|
|
class Attributes> entry_func_state<...> build_entry_state
|
|
|
|
Expr1 const&, Expr2 const&, Attributes const&
|
|
|
|
Defines an entry pseudo state with entry, exit behaviors, attributes and
|
|
configuration (deferred events, flags):
|
|
|
|
template <class StateNameTag,int RegionIndex,class Expr1, class Expr2,
|
|
class Attributes, class Configure> entry_func_state<...>
|
|
build_entry_state
|
|
|
|
Expr1 const&, Expr2 const&, Attributes const&, Configure const&
|
|
|
|
Defines an entry pseudo state with entry, exit behaviors, attributes,
|
|
configuration (deferred events, flags) and a base state:
|
|
|
|
template <class StateNameTag,int RegionIndex,class Expr1, class Expr2,
|
|
class Attributes, class Configure, class Base> entry_func_state<...>
|
|
build_entry_state
|
|
|
|
Expr1 const&, Expr2 const&, Attributes const&, Configure const&, Base
|
|
|
|
Notice that this function requires the extra parameter class
|
|
StateNameTag to disambiguate states having the same parameters but still
|
|
being different.
|
|
|
|
[[build_exit_state]]
|
|
|
|
==== build_exit_state
|
|
|
|
This function has several overloads. The return type is not relevant to
|
|
you as only decltype (return type) is what one needs.
|
|
|
|
Defines an exit pseudo state without entry or exit:
|
|
|
|
template <class StateNameTag,class Event> exit_func_state<...>
|
|
build_exit_state
|
|
|
|
Event const&
|
|
|
|
Defines an exit pseudo state with entry behavior:
|
|
|
|
template <class StateNameTag,class Event,class Expr1>
|
|
exit_func_state<...> build_exit_state
|
|
|
|
Event const&,Expr1 const&
|
|
|
|
Defines an exit pseudo state with entry and exit behaviors:
|
|
|
|
template <class StateNameTag,class Event,class Expr1, class Expr2>
|
|
exit_func_state<...> build_exit_state
|
|
|
|
Event const&,Expr1 const&,Expr2 const&
|
|
|
|
Defines an exit pseudo state with entry, exit behaviors and attributes:
|
|
|
|
template <class StateNameTag,class Event,class Expr1, class Expr2, class
|
|
Attributes> exit_func_state<...> build_exit_state
|
|
|
|
Event const&,Expr1 const&, Expr2 const&, Attributes const&
|
|
|
|
Defines an exit pseudo state with entry, exit behaviors, attributes and
|
|
configuration (deferred events, flags):
|
|
|
|
template <class StateNameTag,class Event,class Expr1, class Expr2, class
|
|
Attributes, class Configure> exit_func_state<...> build_exit_state
|
|
|
|
Event const&,Expr1 const&, Expr2 const&, Attributes const&, Configure
|
|
const&
|
|
|
|
Defines an exit pseudo state with entry, exit behaviors, attributes,
|
|
configuration (deferred events, flags) and a base state:
|
|
|
|
template <class StateNameTag,class Event,class Expr1, class Expr2, class
|
|
Attributes, class Configure, class Base> exit_func_state<...>
|
|
build_exit_state
|
|
|
|
Event const&,Expr1 const&, Expr2 const&, Attributes const&, Configure
|
|
const&, Base
|
|
|
|
Notice that this function requires the extra parameter class
|
|
StateNameTag to disambiguate states having the same parameters but still
|
|
being different.
|
|
|
|
[[build_explicit_entry_state]]
|
|
|
|
==== build_explicit_entry_state
|
|
|
|
This function has the same overloads as build_entry_state and
|
|
explicit_entry_func_state as return type.
|
|
|
|
[[msmfronteumlcommonhpp]]
|
|
|
|
== msm/front/euml/common.hpp
|
|
|
|
=== types
|
|
|
|
[[euml_event]]
|
|
|
|
==== euml_event
|
|
|
|
The basic type for events with eUML.
|
|
|
|
template <class EventName> euml_event;
|
|
|
|
....
|
|
struct play : euml_event<play>{};
|
|
....
|
|
|
|
[[euml_state]]
|
|
|
|
==== euml_state
|
|
|
|
The basic type for states with eUML. You will usually not use this type
|
|
directly as it is easier to use BOOST_MSM_EUML_STATE,
|
|
BOOST_MSM_EUML_INTERRUPT_STATE, BOOST_MSM_EUML_TERMINATE_STATE,
|
|
BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE, BOOST_MSM_EUML_ENTRY_STATE or
|
|
BOOST_MSM_EUML_EXIT_STATE.
|
|
|
|
template <class StateName> euml_state;
|
|
|
|
You can however use this type directly if you want to provide your state
|
|
with extra functions or provide entry or exit behaviors without
|
|
functors, for example:
|
|
|
|
....
|
|
struct Empty : public msm::front::state<> , public euml_state<Empty>
|
|
{
|
|
void foo() {...}
|
|
template <class Event,class Fsm>
|
|
void on_entry(Event const& evt,Fsm& fsm){...}
|
|
};
|
|
....
|
|
|
|
[[euml_flag]]
|
|
|
|
==== euml_flag
|
|
|
|
The basic type for flags with eUML.
|
|
|
|
template <class FlagName> euml_flag;
|
|
|
|
....
|
|
struct PlayingPaused: euml_flag<PlayingPaused>{};
|
|
....
|
|
|
|
[[euml_action]]
|
|
|
|
==== euml_action
|
|
|
|
The basic type for state or transition behaviors and guards with eUML.
|
|
|
|
template <class AcionName> euml_action;
|
|
|
|
....
|
|
struct close_drawer : euml_action<close_drawer>
|
|
{
|
|
template <class Fsm,class Evt,class SourceState,class TargetState>
|
|
void operator()(Evt const& , Fsm&, SourceState& ,TargetState& ) {...}
|
|
};
|
|
....
|
|
|
|
Or, as state entry or exit behavior:
|
|
|
|
....
|
|
struct Playing_Entry : euml_action<Playing_Entry>
|
|
{
|
|
template <class Event,class Fsm,class State>
|
|
void operator()(Event const&,Fsm& fsm,State& ){...}
|
|
};
|
|
....
|
|
|
|
[[euml_config]]
|
|
|
|
==== euml_config
|
|
|
|
The basic type for configuration possibilities with eUML.
|
|
|
|
template <class ConfigName> euml_config;
|
|
|
|
You normally do not use this type directly but instead the instances of
|
|
predefined configuration:
|
|
|
|
* no_exception: disable catching exceptions
|
|
* no_msg_queue: disable message queue. The message queue allows you to
|
|
send an event for processing while in an event processing.
|
|
* deferred_events: manually enable handling of deferred events
|
|
|
|
[[invalid_type]]
|
|
|
|
==== invalid_type
|
|
|
|
Type returned by grammar parsers if the grammar is invalid. Seeing this
|
|
type will result in a static assertion.
|
|
|
|
[[no_action]]
|
|
|
|
==== no_action
|
|
|
|
Placeholder type for use in entry/exit or transition behaviors, which
|
|
does absolutely nothing.
|
|
|
|
[[source_]]
|
|
|
|
==== source_
|
|
|
|
Generic object or function for the source state of a given transition:
|
|
|
|
* as object: returns by reference the source state of a transition,
|
|
usually to be used by another function (usually one created by
|
|
MSM_EUML_METHOD or MSM_EUML_FUNCTION).
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
some_user_function_(source_)
|
|
....
|
|
* as function: returns by reference the attribute passed as parameter.
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
source_(m_counter)++
|
|
....
|
|
|
|
[[target_]]
|
|
|
|
==== target_
|
|
|
|
Generic object or function for the target state of a given transition:
|
|
|
|
* as object: returns by reference the target state of a transition,
|
|
usually to be used by another function (usually one created by
|
|
MSM_EUML_METHOD or MSM_EUML_FUNCTION).
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
some_user_function_(target_)
|
|
....
|
|
* as function: returns by reference the attribute passed as parameter.
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
target_(m_counter)++
|
|
....
|
|
|
|
[[state_]]
|
|
|
|
==== state_
|
|
|
|
Generic object or function for the state of a given entry / exit
|
|
behavior. state_ means source_ while in the context of an exit behavior
|
|
and target_ in the context of an entry behavior:
|
|
|
|
* as object: returns by reference the current state, usually to be used
|
|
by another function (usually one created by MSM_EUML_METHOD or
|
|
MSM_EUML_FUNCTION).
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
some_user_function_(state_) // calls some_user_function on the current state
|
|
....
|
|
* as function: returns by reference the attribute passed as parameter.
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
state_(m_counter)++
|
|
....
|
|
|
|
[[event_]]
|
|
|
|
==== event_
|
|
|
|
Generic object or function for the event triggering a given transition
|
|
(valid in a transition behavior, as well as in state entry/exit
|
|
behaviors):
|
|
|
|
* as object: returns by reference the event of a transition, usually to
|
|
be used by another function (usually one created by MSM_EUML_METHOD or
|
|
MSM_EUML_FUNCTION).
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
some_user_function_(event_)
|
|
....
|
|
* as function: returns by reference the attribute passed as parameter.
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
event_(m_counter)++
|
|
....
|
|
|
|
[[fsm_]]
|
|
|
|
==== fsm_
|
|
|
|
Generic object or function for the state machine containing a given
|
|
transition:
|
|
|
|
* as object: returns by reference the event of a transition, usually to
|
|
be used by another function (usually one created by MSM_EUML_METHOD or
|
|
MSM_EUML_FUNCTION).
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
some_user_function_(fsm_)
|
|
....
|
|
* as function: returns by reference the attribute passed as parameter.
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
fsm_(m_counter)++
|
|
....
|
|
|
|
[[substate_]]
|
|
|
|
==== substate_
|
|
|
|
Generic object or function returning a state of a given state machine:
|
|
|
|
* with 1 parameter: returns by reference the state passed as parameter,
|
|
usually to be used by another function (usually one created by
|
|
MSM_EUML_METHOD or MSM_EUML_FUNCTION).
|
|
+
|
|
Example:
|
|
+
|
|
....
|
|
some_user_function_(substate_(my_state))
|
|
....
|
|
* with 2 parameters: returns by reference the state passed as first
|
|
parameter from the state machine passed as second parameter, usually to
|
|
be used by another function (usually one created by MSM_EUML_METHOD or
|
|
MSM_EUML_FUNCTION). This makes sense when used in combination with
|
|
attribute_.
|
|
+
|
|
Example (equivalent to the previous example):
|
|
+
|
|
....
|
|
some_user_function_(substate_(my_state,fsm_))
|
|
....
|
|
|
|
[[attribute_]]
|
|
|
|
==== attribute_
|
|
|
|
Generic object or function returning the attribute passed (by name) as
|
|
second parameter of the thing passed as first (a state, event or state
|
|
machine). Example:
|
|
|
|
....
|
|
attribute_(substate_(my_state),cd_name_attribute)++
|
|
....
|
|
|
|
[[true_]]
|
|
|
|
==== True_
|
|
|
|
Functor returning true for transition or state behaviors. Like all
|
|
constants, only the functor form exists, so parentheses are necessary.
|
|
Example:
|
|
|
|
....
|
|
if_then_(True_(),/* some action always called*/)
|
|
....
|
|
|
|
[[false_]]
|
|
|
|
==== False_
|
|
|
|
Functor returning false for transition or state behaviors. Like all
|
|
constants, only the functor form exists, so parentheses are necessary.
|
|
Example:
|
|
|
|
....
|
|
if_then_(False_(),/* some action never called */)
|
|
....
|
|
|
|
[[int_int-value]]
|
|
|
|
==== Int_<int value>
|
|
|
|
Functor returning an integer value for transition or state behaviors.
|
|
Like all constants, only the functor form exists, so parentheses are
|
|
necessary. Example:
|
|
|
|
....
|
|
target_(m_ringing_cpt) = Int_<RINGING_TIME>() // RINGING_TIME is a constant
|
|
....
|
|
|
|
[[char_char-value]]
|
|
|
|
==== Char_<char value>
|
|
|
|
Functor returning a char value for transition or state behaviors. Like
|
|
all constants, only the functor form exists, so parentheses are
|
|
necessary. Example:
|
|
|
|
....
|
|
// look for 'S' in event.m_song
|
|
[string_find_(event_(m_song),Char_<'S'>(),Size_t_<0>()) != Npos_<string>()]
|
|
....
|
|
|
|
[[size_t_size_t-value]]
|
|
|
|
==== Size_t_<size_t value>
|
|
|
|
Functor returning a size_t value for transition or state behaviors. Like
|
|
all constants, only the functor form exists, so parentheses are
|
|
necessary. Example:
|
|
|
|
....
|
|
substr_(event_(m_song),Size_t_<1>()) // returns a substring of event.m_song
|
|
....
|
|
|
|
[[string_-mplstring]]
|
|
|
|
==== String_ < mpl::string >
|
|
|
|
Functor returning a string for transition or state behaviors. Like all
|
|
constants, only the functor form exists, so parentheses are necessary.
|
|
Requires boost >= 1.40 for mpl::string.
|
|
|
|
Example:
|
|
|
|
....
|
|
// adds "Let it be" to fsm.m_src_container
|
|
push_back_(fsm_(m_src_container), String_<mpl::string<'Let','it ','be'> >())
|
|
....
|
|
|
|
[[predicate_-some_stl_compatible_functor]]
|
|
|
|
==== Predicate_ < some_stl_compatible_functor >
|
|
|
|
This functor eUML-enables a STL functor (for use in an algorithm). This
|
|
is necessary because all what is in the transition table must be a eUML
|
|
terminal.
|
|
|
|
Example:
|
|
|
|
....
|
|
//equivalent to:
|
|
//std::accumulate(fsm.m_vec.begin(),fsm.m_vec.end(),1,std::plus<int>())== 1
|
|
accumulate_(begin_(fsm_(m_vec)),end_(fsm_(m_vec)),Int_<1>(),
|
|
Predicate_<std::plus<int> >()) == Int_<1>())
|
|
....
|
|
|
|
[[process_]]
|
|
|
|
==== process_
|
|
|
|
This function sends an event to up to 4 state machines by calling
|
|
`process_event` on them:
|
|
|
|
* `process_(some_event)` : processes an event in the current
|
|
(containing) state machine.
|
|
* `process_(some_event [,fsm1...fsm4] )` : processes the same event in
|
|
the 1-4 state machines passed as argument.
|
|
|
|
[[process2_]]
|
|
|
|
==== process2_
|
|
|
|
This function sends an event to up to 3 state machines by calling
|
|
`process_event` on them and copy-constructing the event from the data
|
|
passed as second parameter:
|
|
|
|
* `process2_(some_event, some_data)` : processes an event in the current
|
|
(containing) state machine.
|
|
* `process2_(some_event, some_data [,fsm1...fsm3] )` : processes the
|
|
same event in the 1-3 state machines passed as argument.
|
|
|
|
Example:
|
|
|
|
....
|
|
// processes NotFound on current state machine,
|
|
// copy-constructed with event.m_song
|
|
process2_(NotFound,event_(m_song))
|
|
....
|
|
|
|
With the following definitions:
|
|
|
|
....
|
|
BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)//declaration of m_song
|
|
NotFound (const string& data) // copy-constructor of NotFound
|
|
....
|
|
|
|
[[is_flag_]]
|
|
|
|
==== is_flag_
|
|
|
|
This function tells if a flag is active by calling `is_flag_active` on
|
|
the current state machine or one passed as parameter:
|
|
|
|
* `is_flag_(some_flag)` : calls `is_flag_active` on the current
|
|
(containing) state machine.
|
|
* `is_flag_(some_flag, some_fsm)` : calls `is_flag_active` on the state
|
|
machine passed as argument.
|
|
|
|
[[defer_]]
|
|
|
|
==== defer_
|
|
|
|
This object defers the current event by calling `defer_event` on the
|
|
current state machine. Example:
|
|
|
|
....
|
|
Empty() + play() / defer_
|
|
....
|
|
|
|
[[explicit_submachine-namestate-name]]
|
|
|
|
==== explicit_(submachine-name,state-name)
|
|
|
|
Used as transition's target, causes an explicit entry into the given
|
|
state from the given submachine. Several explicit_ as targets, separated
|
|
by commas, means a fork. The state must have been declared as such using
|
|
BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE.
|
|
|
|
[[entry_pt_submachine-namestate-name]]
|
|
|
|
==== entry_pt_(submachine-name,state-name)
|
|
|
|
Used as transition's target from a containing state machine, causes
|
|
submachine-name to be entered using the given entry pseudo-state. This
|
|
state must have been declared as pseudo entry using
|
|
BOOST_MSM_EUML_ENTRY_STATE.
|
|
|
|
[[exit_pt_submachine-namestate-name]]
|
|
|
|
==== exit_pt_(submachine-name,state-name)
|
|
|
|
Used as transition's source from a containing state machine, causes
|
|
submachine-name to be left using the given exit pseudo-state. This state
|
|
must have been declared as pseudo exit using BOOST_MSM_EUML_EXIT_STATE.
|
|
|
|
[[msm_euml_function]]
|
|
|
|
==== MSM_EUML_FUNCTION
|
|
|
|
This macro creates an eUML function and a functor for use with the
|
|
functor front-end, based on a free function:
|
|
|
|
* first parameter: the name of the functor
|
|
* second parameter: the underlying function
|
|
* third parameter: the eUML function name
|
|
* fourth parameter: the return type if used in a transition behavior
|
|
* fifth parameter: the return type if used in a state behavior
|
|
(entry/exit)
|
|
|
|
Note that the function itself can take up to 5 arguments.
|
|
|
|
Example:
|
|
|
|
....
|
|
MSM_EUML_FUNCTION(BinarySearch_,std::binary_search,binary_search_,bool,bool)
|
|
....
|
|
|
|
Can be used like:
|
|
|
|
....
|
|
binary_search_(begin_(fsm_(m_var)),end_(fsm_(m_var)),Int_<9>())
|
|
....
|
|
|
|
[[msm_euml_method]]
|
|
|
|
==== MSM_EUML_METHOD
|
|
|
|
This macro creates an eUML function and a functor for use with the
|
|
functor front-end, based on a method:
|
|
|
|
* first parameter: the name of the functor
|
|
* second parameter: the underlying function
|
|
* third parameter: the eUML function name
|
|
* fourth parameter: the return type if used in a transition behavior
|
|
* fifth parameter: the return type if used in a state behavior
|
|
(entry/exit)
|
|
|
|
Note that the method itself can take up to 4 arguments (5 like for a
|
|
free function - 1 for the object on which the method is called).
|
|
|
|
Example:
|
|
|
|
....
|
|
struct Empty : public msm::front::state<> , public euml_state<Empty>
|
|
{
|
|
void activate_empty() {std::cout << "switching to Empty " << std::endl;}
|
|
...
|
|
};
|
|
MSM_EUML_METHOD(ActivateEmpty_,activate_empty,activate_empty_,void,void)
|
|
....
|
|
|
|
Can be used like:
|
|
|
|
....
|
|
Empty == Open + open_close / (close_drawer , activate_empty_(target_))
|
|
....
|
|
|
|
[[boost_msm_euml_actionaction-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_ACTION(action-instance-name)
|
|
|
|
This macro declares a behavior type and a const instance for use in
|
|
state or transition behaviors. The action implementation itself follows
|
|
the macro declaration, for example:
|
|
|
|
....
|
|
BOOST_MSM_EUML_ACTION(good_disk_format)
|
|
{
|
|
template <class Fsm,class Evt,class SourceState,class TargetState>
|
|
void/bool operator()(Evt const& evt,Fsm&,SourceState& ,TargetState& ){...}
|
|
};
|
|
....
|
|
|
|
[[boost_msm_euml_flagflag-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_FLAG(flag-instance-name)
|
|
|
|
This macro declares a flag type and a const instance for use in
|
|
behaviors.
|
|
|
|
[[boost_msm_euml_flag_nameflag-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_FLAG_NAME(flag-instance-name)
|
|
|
|
This macro returns the name of the flag type generated by
|
|
BOOST_MSM_EUML_FLAG. You need this where the type is required (usually
|
|
with the back-end method is_flag_active). For example:
|
|
|
|
....
|
|
fsm.is_flag_active<BOOST_MSM_EUML_FLAG_NAME(CDLoaded)>()
|
|
....
|
|
|
|
[[boost_msm_euml_declare_attributeevent-typeevent-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_ATTRIBUTE(event-type,event-name)
|
|
|
|
This macro declares an attribute called event-name of type event-type.
|
|
This attribute can then be made part of an attribute list using
|
|
BOOST_MSM_EUML_ATTRIBUTES.
|
|
|
|
[[boost_msm_euml_attributesattributes-expressionattributes-name]]
|
|
|
|
==== BOOST_MSM_EUML_ATTRIBUTES(attributes-expression,attributes-name)
|
|
|
|
This macro declares an attribute list called attributes-name based on
|
|
the expression as first argument. These attributes can then be made part
|
|
of an event using BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES, of a state as
|
|
3rd parameter of BOOST_MSM_EUML_STATE or of a state machine as 5th
|
|
parameter of BOOST_MSM_EUML_DECLARE_STATE_MACHINE.
|
|
|
|
Attributes are added using left-shift, for example:
|
|
|
|
....
|
|
// m_song is of type std::string
|
|
BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::string,m_song)
|
|
// contains one attribute, m_song
|
|
BOOST_MSM_EUML_ATTRIBUTES((attributes_ << m_song ), FoundDef)
|
|
....
|
|
|
|
[[boost_msm_euml_eventevent-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_EVENT(event-instance name)
|
|
|
|
This macro defines an event type (event-instance-name_helper) and
|
|
declares a const instance of this event type called event-instance-name
|
|
for use in a transition table or state behaviors.
|
|
|
|
[[boost_msm_euml_event_with_attributesevent-instance-nameattributes]]
|
|
|
|
==== BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(event-instance-name,attributes)
|
|
|
|
This macro defines an event type (event-instance-name_helper) and
|
|
declares a const instance of this event type called event-instance-name
|
|
for use in a transition table or state behaviors. The event will have as
|
|
attributes the ones passed by the second argument:
|
|
|
|
`BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(Found,FoundDef)`
|
|
|
|
The created event instance supports operator()(attributes) so that
|
|
|
|
....
|
|
my_back_end.process_event(Found(some_string))
|
|
....
|
|
|
|
is possible.
|
|
|
|
[[boost_msm_euml_event_nameevent-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_EVENT_NAME(event-instance-name)
|
|
|
|
This macro returns the name of the event type generated by
|
|
BOOST_MSM_EUML_EVENT or BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES. You need
|
|
this where the type is required (usually inside a back-end definition).
|
|
For example:
|
|
|
|
....
|
|
typedef msm::back::state_machine<Playing_,
|
|
msm::back::ShallowHistory<mpl::vector<BOOST_MSM_EUML_EVENT_NAME(end_pause)
|
|
> > > Playing_type;
|
|
....
|
|
|
|
[[boost_msm_euml_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_STATE(build-expression,state-instance-name)
|
|
|
|
This macro defines a state type (state-instance-name_helper) and
|
|
declares a const instance of this state type called state-instance-name
|
|
for use in a transition table or state behaviors.
|
|
|
|
There are several possibilities for the expression syntax:
|
|
|
|
* (): state without entry or exit action.
|
|
* (Expr1): state with entry but no exit action.
|
|
* (Expr1,Expr2): state with entry and exit action.
|
|
* (Expr1,Expr2,Attributes): state with entry and exit action, defining
|
|
some attributes.
|
|
* (Expr1,Expr2,Attributes,Configure): state with entry and exit action,
|
|
defining some attributes and flags (standard MSM flags) or deferred
|
|
events (standard MSM deferred events).
|
|
* (Expr1,Expr2,Attributes,Configure,Base): state with entry and exit
|
|
action, defining some attributes, flags and deferred events (plain msm
|
|
deferred events) and a non-default base state (as defined in standard
|
|
MSM).
|
|
|
|
[[boost_msm_euml_interrupt_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_INTERRUPT_STATE(build-expression,state-instance-name)
|
|
|
|
This macro defines an interrupt state type (state-instance-name_helper)
|
|
and declares a const instance of this state type called
|
|
state-instance-name for use in a transition table or state behaviors.
|
|
|
|
There are several possibilities for the expression syntax. In all of
|
|
them, the first argument is the name of the event (generated by one of
|
|
the previous macros) ending the interrupt:
|
|
|
|
* (end_interrupt_event): interrupt state without entry or exit action.
|
|
* (end_interrupt_event,Expr1): interrupt state with entry but no exit
|
|
action.
|
|
* (end_interrupt_event,Expr1,Expr2): interrupt state with entry and exit
|
|
action.
|
|
* (end_interrupt_event,Expr1,Expr2,Attributes): interrupt state with
|
|
entry and exit action, defining some attributes.
|
|
* (end_interrupt_event,Expr1,Expr2,Attributes,Configure): interrupt
|
|
state with entry and exit action, defining some attributes and flags
|
|
(standard MSM flags) or deferred events (standard MSM deferred events).
|
|
* (end_interrupt_event,Expr1,Expr2,Attributes,Configure,Base): interrupt
|
|
state with entry and exit action, defining some attributes, flags and
|
|
deferred events (plain msm deferred events) and a non-default base state
|
|
(as defined in standard MSM).
|
|
|
|
[[boost_msm_euml_terminate_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_TERMINATE_STATE(build-expression,state-instance-name)
|
|
|
|
This macro defines a terminate pseudo-state type
|
|
(state-instance-name_helper) and declares a const instance of this state
|
|
type called state-instance-name for use in a transition table or state
|
|
behaviors.
|
|
|
|
There are several possibilities for the expression syntax:
|
|
|
|
* (): terminate pseudo-state without entry or exit action.
|
|
* (Expr1): terminate pseudo-state with entry but no exit action.
|
|
* (Expr1,Expr2): terminate pseudo-state with entry and exit action.
|
|
* (Expr1,Expr2,Attributes): terminate pseudo-state with entry and exit
|
|
action, defining some attributes.
|
|
* (Expr1,Expr2,Attributes,Configure): terminate pseudo-state with entry
|
|
and exit action, defining some attributes and flags (standard MSM flags)
|
|
or deferred events (standard MSM deferred events).
|
|
* (Expr1,Expr2,Attributes,Configure,Base): terminate pseudo-state with
|
|
entry and exit action, defining some attributes, flags and deferred
|
|
events (plain msm deferred events) and a non-default base state (as
|
|
defined in standard MSM).
|
|
|
|
[[boost_msm_euml_exit_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_EXIT_STATE(build-expression,state-instance-name)
|
|
|
|
This macro defines an exit pseudo-state type
|
|
(state-instance-name_helper) and declares a const instance of this state
|
|
type called state-instance-name for use in a transition table or state
|
|
behaviors.
|
|
|
|
There are several possibilities for the expression syntax:
|
|
|
|
* (forwarded_event): exit pseudo-state without entry or exit action.
|
|
* (forwarded_event,Expr1): exit pseudo-state with entry but no exit
|
|
action.
|
|
* (forwarded_event,Expr1,Expr2): exit pseudo-state with entry and exit
|
|
action.
|
|
* (forwarded_event,Expr1,Expr2,Attributes): exit pseudo-state with entry
|
|
and exit action, defining some attributes.
|
|
* (forwarded_event,Expr1,Expr2,Attributes,Configure): exit pseudo-state
|
|
with entry and exit action, defining some attributes and flags (standard
|
|
MSM flags) or deferred events (standard MSM deferred events).
|
|
* (forwarded_event,Expr1,Expr2,Attributes,Configure,Base): exit
|
|
pseudo-state with entry and exit action, defining some attributes, flags
|
|
and deferred events (plain msm deferred events) and a non-default base
|
|
state (as defined in standard MSM).
|
|
|
|
Note that the forwarded_event must be constructible from the event sent
|
|
by the submachine containing the exit point.
|
|
|
|
[[boost_msm_euml_entry_stateint-region-indexbuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_ENTRY_STATE(int region-index,build-expression,state-instance-name)
|
|
|
|
This macro defines an entry pseudo-state type
|
|
(state-instance-name_helper) and declares a const instance of this state
|
|
type called state-instance-name for use in a transition table or state
|
|
behaviors.
|
|
|
|
There are several possibilities for the expression syntax:
|
|
|
|
* (): entry pseudo-state without entry or exit action.
|
|
* (Expr1): entry pseudo-state with entry but no exit action.
|
|
* (Expr1,Expr2): entry pseudo-state with entry and exit action.
|
|
* (Expr1,Expr2,Attributes): entry pseudo-state with entry and exit
|
|
action, defining some attributes.
|
|
* (Expr1,Expr2,Attributes,Configure): entry pseudo-state with entry and
|
|
exit action, defining some attributes and flags (standard MSM flags) or
|
|
deferred events (standard MSM deferred events).
|
|
* (Expr1,Expr2,Attributes,Configure,Base): entry pseudo-state with entry
|
|
and exit action, defining some attributes, flags and deferred events
|
|
(plain msm deferred events) and a non-default base state (as defined in
|
|
standard MSM).
|
|
|
|
[[boost_msm_euml_explicit_entry_stateint-region-indexbuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE(int region-index,build-expression,state-instance-name)
|
|
|
|
This macro defines a submachine's substate type
|
|
(state-instance-name_helper), which can be explicitly entered and also
|
|
declares a const instance of this state type called state-instance-name
|
|
for use in a transition table or state behaviors.
|
|
|
|
There are several possibilities for the expression syntax:
|
|
|
|
* (): state without entry or exit action.
|
|
* (Expr1): state with entry but no exit action.
|
|
* (Expr1,Expr2): state with entry and exit action.
|
|
* (Expr1,Expr2,Attributes): state with entry and exit action, defining
|
|
some attributes.
|
|
* (Expr1,Expr2,Attributes,Configure): state with entry and exit action,
|
|
defining some attributes and flags (standard MSM flags) or deferred
|
|
events (standard MSM deferred events).
|
|
* (Expr1,Expr2,Attributes,Configure,Base): state with entry and exit
|
|
action, defining some attributes, flags and deferred events (plain msm
|
|
deferred events) and a non-default base state (as defined in standard
|
|
MSM).
|
|
|
|
[[boost_msm_euml_state_namestate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_STATE_NAME(state-instance-name)
|
|
|
|
This macro returns the name of the state type generated by
|
|
BOOST_MSM_EUML_STATE or other state macros. You need this where the type
|
|
is required (usually using a backend function). For example:
|
|
|
|
....
|
|
fsm.get_state<BOOST_MSM_EUML_STATE_NAME(StringFind)&>().some_state_function();
|
|
....
|
|
|
|
[[boost_msm_euml_declare_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_STATE(build-expression,state-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_STATE but does not provide an instance, simply a
|
|
type declaration.
|
|
|
|
[[boost_msm_euml_declare_interrupt_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_INTERRUPT_STATE(build-expression,state-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_INTERRUPT_STATE but does not provide an instance,
|
|
simply a type declaration.
|
|
|
|
[[boost_msm_euml_declare_terminate_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_TERMINATE_STATE(build-expression,state-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_TERMINATE_STATE but does not provide an instance,
|
|
simply a type declaration.
|
|
|
|
[[boost_msm_euml_declare_exit_statebuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_EXIT_STATE(build-expression,state-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_EXIT_STATE but does not provide an instance, simply
|
|
a type declaration.
|
|
|
|
[[boost_msm_euml_declare_entry_stateint-region-indexbuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_ENTRY_STATE(int region-index,build-expression,state-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_ENTRY_STATE but does not provide an instance, simply
|
|
a type declaration.
|
|
|
|
[[boost_msm_euml_declare_explicit_entry_stateint-region-indexbuild-expressionstate-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_EXPLICIT_ENTRY_STATE(int region-index,build-expression,state-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE but does not provide an
|
|
instance, simply a type declaration.
|
|
|
|
[[boost_msm_euml_transition_tableexpression-table-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_TRANSITION_TABLE(expression, table-instance-name)
|
|
|
|
This macro declares a transition table type and also declares a const
|
|
instance of the table which can then be used in a state machine
|
|
declaration (see BOOST_MSM_EUML_DECLARE_STATE_MACHINE). The expression
|
|
must follow the `transition table grammar`.
|
|
|
|
[[boost_msm_euml_declare_transition_tableiexpressiontable-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(iexpression,table-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_TRANSITION_TABLE but does not provide an instance,
|
|
simply a type declaration.
|
|
|
|
[[boost_msm_euml_internal_transition_tableexpression-table-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expression, table-instance-name)
|
|
|
|
This macro declares a transition table type and also declares a const
|
|
instance of the table. The expression must follow the
|
|
`transition table grammar`. For the moment, this macro is not used.
|
|
|
|
[[boost_msm_euml_declare_internal_transition_tableiexpressiontable-instance-name]]
|
|
|
|
==== BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(iexpression,table-instance-name)
|
|
|
|
Like BOOST_MSM_EUML_TRANSITION_TABLE but does not provide an instance,
|
|
simply a type declaration. This is currently the only way to declare an
|
|
internal transition table with eUML. For example:
|
|
|
|
....
|
|
BOOST_MSM_EUML_DECLARE_STATE((Open_Entry,Open_Exit),Open_def)
|
|
struct Open_impl : public Open_def
|
|
{
|
|
BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE((
|
|
open_close [internal_guard1] / internal_action1 ,
|
|
open_close [internal_guard2] / internal_action2
|
|
))
|
|
};
|
|
.... |