Program Listing for File BondSM_sm.hpp
↰ Return to documentation for file (include/bondcpp/BondSM_sm.hpp
)
// 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<BondSMState &>(*_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_