.. _program_listing_file_include_bondcpp_BondSM_sm.hpp: Program Listing for File BondSM_sm.hpp ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/bondcpp/BondSM_sm.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright (c) 2009, Willow Garage, 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: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // * 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. // // * Neither the name of the Willow Garage nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, 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. #ifndef BONDCPP__BONDSM_SM_HPP_ #define BONDCPP__BONDSM_SM_HPP_ /* * ex: set ro: * DO NOT EDIT. * generated by smc (http://smc.sourceforge.net/) * from file : BondSM_sm.sm */ #define SMC_USES_IOSTREAMS #include "smclib/statemap.hpp" // Forward declarations. class SM; class SM_WaitingForSister; class SM_Alive; class SM_AwaitSisterDeath; class SM_Dead; class SM_Default; class BondSMState; class BondSMContext; struct BondSM; class BondSMState : public statemap::State { public: BondSMState(const char * name, int stateId) : statemap::State(name, stateId) {} virtual void Entry(BondSMContext &) {} virtual void Exit(BondSMContext &) {} virtual void ConnectTimeout(BondSMContext & context); virtual void Die(BondSMContext & context); virtual void DisconnectTimeout(BondSMContext & context); virtual void HeartbeatTimeout(BondSMContext & context); virtual void SisterAlive(BondSMContext & context); virtual void SisterDead(BondSMContext & context); protected: virtual void Default(BondSMContext & context); }; class SM { public: static SM_WaitingForSister WaitingForSister; static SM_Alive Alive; static SM_AwaitSisterDeath AwaitSisterDeath; static SM_Dead Dead; }; class SM_Default : public BondSMState { public: SM_Default(const char * name, int stateId) : BondSMState(name, stateId) {} }; class SM_WaitingForSister : public SM_Default { public: SM_WaitingForSister(const char * name, int stateId) : SM_Default(name, stateId) {} void ConnectTimeout(BondSMContext & context); void Die(BondSMContext & context); void SisterAlive(BondSMContext & context); void SisterDead(BondSMContext & context); }; class SM_Alive : public SM_Default { public: SM_Alive(const char * name, int stateId) : SM_Default(name, stateId) {} void Die(BondSMContext & context); void HeartbeatTimeout(BondSMContext & context); void SisterAlive(BondSMContext & context); void SisterDead(BondSMContext & context); }; class SM_AwaitSisterDeath : public SM_Default { public: SM_AwaitSisterDeath(const char * name, int stateId) : SM_Default(name, stateId) {} void Die(BondSMContext & context); void DisconnectTimeout(BondSMContext & context); void HeartbeatTimeout(BondSMContext & context); void SisterAlive(BondSMContext & context); void SisterDead(BondSMContext & context); }; class SM_Dead : public SM_Default { public: SM_Dead(const char * name, int stateId) : SM_Default(name, stateId) {} void ConnectTimeout(BondSMContext & context); void Die(BondSMContext & context); void DisconnectTimeout(BondSMContext & context); void HeartbeatTimeout(BondSMContext & context); void SisterAlive(BondSMContext & context); void SisterDead(BondSMContext & context); }; class BondSMContext : public statemap::FSMContext { public: explicit BondSMContext(BondSM & owner) : FSMContext(SM::WaitingForSister), _owner(owner) {} BondSMContext(BondSM & owner, const statemap::State & state) : FSMContext(state), _owner(owner) {} virtual void enterStartState() { getState().Entry(*this); } BondSM & getOwner() const { return _owner; } BondSMState & getState() const { if (_state == NULL) { throw statemap::StateUndefinedException(); } return dynamic_cast(*_state); } void ConnectTimeout() { (getState()).ConnectTimeout(*this); } void Die() { (getState()).Die(*this); } void DisconnectTimeout() { (getState()).DisconnectTimeout(*this); } void HeartbeatTimeout() { (getState()).HeartbeatTimeout(*this); } void SisterAlive() { (getState()).SisterAlive(*this); } void SisterDead() { (getState()).SisterDead(*this); } private: BondSM & _owner; }; /* * Local variables: * buffer-read-only: t * End: */ #endif // BONDCPP__BONDSM_SM_HPP_