📄 stateinterface.hxx
字号:
#if !defined(VOCAL_STATEINTERFACE_HXX)#define VOCAL_STATEINTERFACE_HXX/* ==================================================================== * The Vovida Software License, Version 1.0 * * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The names "VOCAL", "Vovida Open Communication Application Library", * and "Vovida Open Communication Application Library (VOCAL)" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor * may "VOCAL" appear in their name, without prior written * permission of Vovida Networks, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * ==================================================================== * * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc. For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */static const char* const StateInterface_hxx_Version = "$Id: StateInterface.hxx,v 1.2 2001/08/10 04:02:04 icahoon Exp $";#include <map>#include <string>#include "Writer.hxx"#include "Stimulus.hxx"#include "NonCopyable.hxx"/** Infrastructure common to VOCAL. */namespace Vocal {/** Infrastructure in VOCAL related to "algorithms and the assignment of * responsibilities between objects".<br><br> * * See Design Patterns, ISBN 0-201-63361-2, Chapter 5. */namespace Behavioral{class Action;/** A concrete class representing a state in a finite state machine.<br><br> * * The state allows an entry Action to be specified such that upon entry * into the state, the entry action will be executed. The state also allows * an exit action to be specified such that upon leaving the state, the * exit action will be executed.<br><br> * * A state will respond to a given Stimulus by performing a series of Actions * * * * @see Vocal::Behavioral::Stimulus * @see Vocal::Behavioral::Context * @see Vocal::Behavioral::Action */class StateInterface : public Vocal::IO::Writer, public Vocal::NonCopyable{ public: /** Contruct the state, given an optional name, given an optional * entry action, and given an optional exit action. */ StateInterface( const char * name = 0, Action * entry = 0, Action * exit = 0 ); /** Virtual destructor. */ virtual ~StateInterface(); /** For the given Stimulus, the Action will be executed, and the * state machine will transition to the nextState. */ void addAction( const Stimulus & stimulus, Action & action, StateInterface & nextState ); /** For the given Stimulus, the Action will be executed. If the * Action was successful, it will transition to the nextState, * otherwise it will transition to the nextStateOnFail. * * This is used only for conditional state transitions, where * an action may fail depending on external data associated * with the stimulus. */ void addAction( const Stimulus & stimulus, Action & action, StateInterface & nextState, StateInterface & nextStateOnFail ); /** Associate an entry action to be performed. */ void entryAction(Action &); /** Associate an exit action to be performed. */ void exitAction(Action &); /** Called when entering this state. */ virtual void enter() throw (); /** Called to handle the given stimulus. */ StateInterface & stimulate( const Stimulus & stimulus ) throw (); /** Called when exiting the state. */ virtual void exit() throw(); /** Write the state to an ostream. */ virtual ostream & writeTo(ostream &) const; /** Returns the instance specific name, if given during construction. */ virtual const string & name() const; private: class StimulusData { public: StimulusData( Action & action, StateInterface & nextState, StateInterface * nextStateOnFail ); Action & action_; StateInterface & nextState_; StateInterface * nextStateOnFail_; }; typedef map<Stimulus, StimulusData> StimulusTable; typedef pair<Stimulus, StimulusData> StimulusPair; StimulusTable stimulusTable_; string myName; Action * myEntry; Action * myExit;};} // namespace Behavioral} // namespace Vocal#endif // !defined(VOCAL_STATEINTERFACE_HXX)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -