1 // Copyright 2010 Christophe Henry
2 // henry UNDERSCORE christophe AT hotmail DOT com
3 // This is an extended version of the state machine available in the boost::mpl library
4 // Distributed under the same license as the original.
5 // Copyright for the original version:
6 // Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed
7 // under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
11 #ifndef IPOD_FUNCTORS_HPP
12 #define IPOD_FUNCTORS_HPP
13 #include <boost/msm/front/euml/euml.hpp>
15 BOOST_MSM_EUML_ACTION(NotHolding_Entry)
17 template <class Event,class FSM,class STATE>
18 void operator()(Event const&,FSM&,STATE& )
20 std::cout << "entering: NotHolding" << std::endl;
23 BOOST_MSM_EUML_ACTION(Holding_Entry)
25 template <class Event,class FSM,class STATE>
26 void operator()(Event const&,FSM&,STATE& )
28 std::cout << "entering: Holding" << std::endl;
31 BOOST_MSM_EUML_ACTION(NotPlaying_Entry)
33 template <class Event,class FSM,class STATE>
34 void operator()(Event const&,FSM&,STATE& )
36 std::cout << "entering: NotPlaying" << std::endl;
39 BOOST_MSM_EUML_ACTION(NoMenuMode_Entry)
41 template <class Event,class FSM,class STATE>
42 void operator()(Event const&,FSM&,STATE& )
44 std::cout << "entering: NoMenuMode" << std::endl;
47 BOOST_MSM_EUML_ACTION(NoOnOffButton_Entry)
49 template <class Event,class FSM,class STATE>
50 void operator()(Event const&,FSM&,STATE& )
52 std::cout << "entering: NoOnOffButton" << std::endl;
55 BOOST_MSM_EUML_ACTION(OffDown_Entry)
57 template <class Event,class FSM,class STATE>
58 void operator()(Event const&,FSM&,STATE& )
60 std::cout << "entering: OffDown" << std::endl;
63 BOOST_MSM_EUML_ACTION(PlayerOff_Entry)
65 template <class Event,class FSM,class STATE>
66 void operator()(Event const&,FSM&,STATE& )
68 std::cout << "entering: PlayerOff" << std::endl;
71 BOOST_MSM_EUML_ACTION(CheckMiddleButton_Entry)
73 template <class Event,class FSM,class STATE>
74 void operator()(Event const&,FSM&,STATE& )
76 std::cout << "entering: CheckMiddleButton" << std::endl;
79 BOOST_MSM_EUML_ACTION(Playing_Entry)
81 template <class Event,class FSM,class STATE>
82 void operator()(Event const&,FSM& fsm,STATE& )
84 std::cout << "entering: Playing" << std::endl;
85 std::cout << "playing song:" << fsm.get_attribute(m_SongIndex) << std::endl;
88 BOOST_MSM_EUML_ACTION(WaitingForNextPrev_Entry)
90 template <class Event,class FSM,class STATE>
91 void operator()(Event const&,FSM&,STATE& )
93 std::cout << "entering: WaitingForNextPrev" << std::endl;
96 BOOST_MSM_EUML_ACTION(Paused_Entry)
98 template <class Event,class FSM,class STATE>
99 void operator()(Event const&,FSM&,STATE& )
101 std::cout << "entering: Paused" << std::endl;
104 BOOST_MSM_EUML_ACTION(WaitingForEnd_Entry)
106 template <class Event,class FSM,class STATE>
107 void operator()(Event const&,FSM&,STATE& )
109 std::cout << "entering: OffDown" << std::endl;
112 BOOST_MSM_EUML_ACTION(NoForward_Entry)
114 template <class Event,class FSM,class STATE>
115 void operator()(Event const&,FSM&,STATE& )
117 std::cout << "entering: NoForward" << std::endl;
120 BOOST_MSM_EUML_ACTION(ForwardPressed_Entry)
122 template <class Event,class FSM,class STATE>
123 void operator()(Event const&,FSM&,STATE& )
125 std::cout << "entering: ForwardPressed" << std::endl;
128 BOOST_MSM_EUML_ACTION(ForwardPressed_Exit)
130 template <class Event,class FSM,class STATE>
131 void operator()(Event const&,FSM&,STATE& )
133 std::cout << "leaving: ForwardPressed" << std::endl;
136 BOOST_MSM_EUML_ACTION(FastForward_Entry)
138 template <class Event,class FSM,class STATE>
139 void operator()(Event const&,FSM&,STATE& )
141 std::cout << "entering: FastForward" << std::endl;
144 BOOST_MSM_EUML_ACTION(FastForward_Exit)
146 template <class Event,class FSM,class STATE>
147 void operator()(Event const&,FSM&,STATE& )
149 std::cout << "leaving: FastForward" << std::endl;
152 BOOST_MSM_EUML_ACTION(StdDisplay_Entry)
154 template <class Event,class FSM,class STATE>
155 void operator()(Event const&,FSM&,STATE& )
157 std::cout << "entering: StdDisplay" << std::endl;
160 BOOST_MSM_EUML_ACTION(SetPosition_Entry)
162 template <class Event,class FSM,class STATE>
163 void operator()(Event const&,FSM&,STATE& )
165 std::cout << "entering: SetPosition" << std::endl;
168 BOOST_MSM_EUML_ACTION(SetMark_Entry)
170 template <class Event,class FSM,class STATE>
171 void operator()(Event const&,FSM&,STATE& )
173 std::cout << "entering: SetMark" << std::endl;
176 BOOST_MSM_EUML_ACTION(PlayingExit_Entry)
178 template <class Event,class FSM,class STATE>
179 void operator()(Event const&,FSM&,STATE& )
181 std::cout << "entering: PlayingExit" << std::endl;
184 BOOST_MSM_EUML_ACTION(WaitingForSongChoice_Entry)
186 template <class Event,class FSM,class STATE>
187 void operator()(Event const&,FSM&,STATE& )
189 std::cout << "entering: WaitingForSongChoice" << std::endl;
192 BOOST_MSM_EUML_ACTION(StartCurrentSong_Entry)
194 template <class Event,class FSM,class STATE>
195 void operator()(Event const&,FSM&,STATE& )
197 std::cout << "entering: StartCurrentSong" << std::endl;
200 BOOST_MSM_EUML_ACTION(MenuExit_Entry)
202 template <class Event,class FSM,class STATE>
203 void operator()(Event const&,FSM&,STATE& )
205 std::cout << "entering: MenuExit" << std::endl;
208 BOOST_MSM_EUML_ACTION(show_selected_song)
210 template <class FSM,class EVT,class SourceState,class TargetState>
211 void operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState& )
213 std::cout << "selecting song:" << fsm.get_attribute(m_SongIndex) << std::endl;
216 BOOST_MSM_EUML_ACTION(do_fast_forward)
218 template <class FSM,class EVT,class SourceState,class TargetState>
219 void operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState& )
221 std::cout << "moving song forward..." << std::endl;
224 BOOST_MSM_EUML_ACTION(show_playing_song)
226 template <class FSM,class EVT,class SourceState,class TargetState>
227 void operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState& )
229 std::cout << "playing song:" << fsm.get_attribute(m_SongIndex) << std::endl;
232 BOOST_MSM_EUML_ACTION(show_player_off)
234 template <class FSM,class EVT,class SourceState,class TargetState>
235 void operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState& )
237 std::cout << "turning player off" << std::endl;
240 BOOST_MSM_EUML_ACTION(show_player_on)
242 template <class FSM,class EVT,class SourceState,class TargetState>
243 void operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState& )
245 std::cout << "turning player on" << std::endl;