|
Boost Users : |
Subject: [Boost-users] [boost.users] [statechart] question about event processing rules in orthogonal states.
From: Ernesto Rodriguez Reina (erreina_at_[hidden])
Date: 2015-12-18 11:08:12
Hi everyone,
The statechart search for an event handler in post-order (children first
then parent), however when we have orthogonal states involved then the
behaviour I am experiencing is different.
Let say we have an state X with two children [orthogonal] states Y and W.
Assuming none of the handlers discard (or defer) an event, the handler for
that event is called in the following order: Y, X, W, X. Note that the
handler of X is called twice. The following code demonstrates the issue:
<code>
struct EvTest : sc::event< EvTest > {};
struct Test;
struct Inner1;
struct Inner2;
struct Machine : sc::state_machine< Machine, Test > {};
struct Test : sc::simple_state<Test, Machine, mpl::list<Inner1, Inner2> >{
typedef sc::custom_reaction< EvTest > reactions;
sc::result react( const EvTest){
std::cout << "Test" << std::endl;
// return discard_event();
return forward_event();
}
};
struct Inner1 : sc::simple_state<Inner1, Test::orthogonal< 0 > >{};
struct Inner2 : sc::simple_state<Inner2, Test::orthogonal< 1 > >{
typedef sc::custom_reaction< EvTest > reactions;
sc::result react( const EvTest){
std::cout << "Inner2" << std::endl;
return forward_event();
}
};
</code>
When the event "EvTest" is received, the output I am getting is:
<output>
Test
Inner2
Test
</output>
If there something that I am missing?
Best,
Ernesto Rodriguez Reina
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net