player.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 77 行

CPP
77
字号
// Copyright Aleksey Gurtovoy 2002-2004//// Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/mpl for documentation.// $Id: player.cpp 49268 2008-10-11 06:26:17Z agurtovoy $// $Date: 2008-10-11 02:26:17 -0400 (Sat, 11 Oct 2008) $// $Revision: 49268 $#include "state_machine.hpp"#include <boost/mpl/list.hpp>#include <iostream>namespace mpl = boost::mpl;class player    : public fsm::state_machine<player>{ public:    player() {}    // events    struct play_event : event<play_event> {};    struct stop_event : event<stop_event> {};    struct pause_event : event<pause_event> {};// MWCW 8.1 is too eager in inforcing access for non-type template parameters// private:    typedef player self_t;        // state invariants    void stopped_state_invariant() const {}    void playing_state_invariant() const {}    void paused_state_invariant() const {}    // states (invariants are passed as non-type template arguments)    typedef state<0, &self_t::stopped_state_invariant> stopped;    typedef state<1, &self_t::playing_state_invariant> playing;    typedef state<2, &self_t::paused_state_invariant> paused;// private:    // transition functions    bool do_play(play_event const&) { std::cout << "player::do_play\n"; return true; }    bool do_stop(stop_event const&) { std::cout << "player::do_stop\n"; return true; }    bool do_pause(pause_event const&) { std::cout << "player::do_pause\n"; return true; }    bool do_resume(play_event const&) { std::cout << "player::do_resume\n"; return true; }        // transitions, in the following format:    // | current state | event | next state | transition function |    friend class fsm::state_machine<player>;    typedef mpl::list<          transition<stopped, play_event,  playing, &player::do_play>        , transition<playing, stop_event,  stopped, &player::do_stop>        , transition<playing, pause_event, paused,  &player::do_pause>        , transition<paused,  play_event,  playing, &player::do_resume>        , transition<paused,  stop_event,  stopped, &player::do_stop>        >::type transition_table;            typedef stopped initial_state;};int main(){    player p;    p.process_event(player::play_event());    p.process_event(player::pause_event());    p.process_event(player::play_event());    p.process_event(player::stop_event());    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?