📄 instatereactiontest.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Copyright 2005-2008 Andreas Huber Doenni// Distributed under the Boost Software License, Version 1.0. (See accompany-// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//////////////////////////////////////////////////////////////////////////////#include <boost/statechart/state_machine.hpp>#include <boost/statechart/event.hpp>#include <boost/statechart/simple_state.hpp>#include <boost/statechart/in_state_reaction.hpp>#include <boost/statechart/result.hpp>#include <boost/mpl/list.hpp>#include <boost/test/test_tools.hpp>namespace sc = boost::statechart;namespace mpl = boost::mpl;struct E : sc::event< E > {};struct F : sc::event< F > {};struct G : sc::event< G > {};struct H : sc::event< H > {};struct I : sc::event< I > {};struct A;struct InStateReactionTest : sc::state_machine< InStateReactionTest, A > {};struct B;struct A : sc::simple_state< A, InStateReactionTest, B >{ A() : eventCount_( 0 ) {} // The following 3 functions could be implemented with one function // template, but this causes problems with CW and Intel 9.1. void IncrementCount( const sc::event_base & ) { ++eventCount_; } void IncrementCount( const E & ) { ++eventCount_; } void IncrementCount( const G & ) { ++eventCount_; } typedef mpl::list< sc::in_state_reaction< E, A, &A::IncrementCount >, sc::in_state_reaction< sc::event_base, A, &A::IncrementCount > > reactions; unsigned int eventCount_;}; struct B : sc::simple_state< B, A > { B() : eventCount_( 0 ) {} void IncrementCount( const F & ) { ++eventCount_; } typedef mpl::list< sc::in_state_reaction< F, B, &B::IncrementCount >, sc::in_state_reaction< G, A, &A::IncrementCount >, sc::in_state_reaction< I > > reactions; unsigned int eventCount_; };void RequireEventCounts( const InStateReactionTest & machine, unsigned int aCount, unsigned int bCount){ BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == aCount ); BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == bCount );}int test_main( int, char* [] ){ InStateReactionTest machine; machine.initiate(); RequireEventCounts(machine, 0, 0); machine.process_event( F() ); RequireEventCounts(machine, 0, 1); machine.process_event( E() ); RequireEventCounts(machine, 1, 1); machine.process_event( E() ); machine.process_event( F() ); RequireEventCounts(machine, 2, 2); machine.process_event( G() ); RequireEventCounts(machine, 3, 2); machine.process_event( H() ); RequireEventCounts(machine, 4, 2); machine.process_event( I() ); RequireEventCounts(machine, 4, 2); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -