1 #include <boost/statechart/state_machine.hpp>
3 #include <boost/statechart/event_base.hpp>
4 #include <boost/statechart/state.hpp>
7 namespace sc = boost::statechart;
10 template< class MostDerived,
12 class Inner = boost::mpl::list<> >
13 struct TimedState : boost::statechart::state<MostDerived, Context, Inner>
16 typedef TimedState base_state;
17 typedef typename boost::statechart::state<MostDerived, Context, Inner> base_type;
18 #define global_timer_list base_type::outermost_context().my_handle()->timer_list_.timeouts
20 std::list<Timer *> active_timers;
21 TimedState(typename base_type::my_context ctx ) : base_type( ctx ) {
24 if(global_timer_list.size()>0 && active_timers.size()>0)
26 std::list<Timer *>::iterator it;
27 for(it = active_timers.begin(); it!= active_timers.end(); it++)
29 global_timer_list.remove(*it);
31 //std::cout<<"delka "<<global_timer_list.size()<<std::endl;
34 void runTimer(Timer &t, long int milisec, const boost::intrusive_ptr< boost::statechart::event_base > &e)
36 base_type::outermost_context().my_handle()->timer_list_.addTimer(t, milisec, e);
37 active_timers.push_back(&t);
39 // TODO Compiletime check - timed state jen v automatu s nasim schedulerem
42 template< class MostDerived,
44 class Inner = boost::mpl::list<> >
45 struct TimedSimpleState : boost::statechart::simple_state<MostDerived, Context, Inner>
48 typedef TimedSimpleState base_state;
49 typedef typename boost::statechart::simple_state<MostDerived, Context, Inner> base_type;
50 #define global_timer_list base_type::outermost_context().my_handle()->timer_list_.timeouts
52 std::list<Timer *> active_timers;
56 if(global_timer_list.size()>0 && active_timers.size()>0)
58 std::list<Timer *>::iterator it;
59 for(it = active_timers.begin(); it!= active_timers.end(); it++)
61 global_timer_list.remove(*it);
63 //std::cout<<"delka "<<global_timer_list.size()<<std::endl;
66 void runTimer(Timer &t, long int milisec, const boost::intrusive_ptr< boost::statechart::event_base > &e)
68 base_type::outermost_context().my_handle()->timer_list_.addTimer(t, milisec, e);
69 active_timers.push_back(&t);
71 // TODO Compiletime check - timed state jen v automatu s nasim schedulerem