INET Framework for OMNeT++/OMNEST
inet::Macho::_StateInstance Class Referenceabstract

#include <Macho.h>

Inheritance diagram for inet::Macho::_StateInstance:
inet::Macho::_RootInstance inet::Macho::_SubstateInstance< S >

Public Member Functions

virtual ~_StateInstance ()
 
void entry (_StateInstance &previous, bool first=true)
 
void exit (_StateInstance &next)
 
void init (bool history)
 
void saveHistory (_StateInstance &shallow, _StateInstance &deep)
 
void setHistorySuper (_StateInstance &deep)
 
void shutdown ()
 
void restore (_StateInstance &instance)
 
virtual ID id ()=0
 
virtual Key key ()=0
 
virtual const char * name ()=0
 
virtual _StateInstancecreate (_MachineBase &machine, _StateInstance *parent)=0
 
virtual void createBox ()=0
 
virtual void deleteBox ()=0
 
void setBox (void *box)
 
bool isChild (const _StateInstance &instance)
 
_StateSpecificationspecification ()
 
void * box ()
 
_MachineBasemachine ()
 
void setHistory (_StateInstance *history) const
 
_StateInstancehistory () const
 

Protected Member Functions

 _StateInstance (_MachineBase &machine, _StateInstance *parent)
 

Protected Attributes

_MachineBasemyMachine
 
_StateSpecificationmySpecification
 
_StateInstancemyHistory
 
_StateInstancemyParent
 
void * myBox
 
void * myBoxPlace
 

Constructor & Destructor Documentation

◆ _StateInstance()

inet::_StateInstance::_StateInstance ( _MachineBase machine,
_StateInstance parent 
)
protected
122  : myMachine(machine)
123  , mySpecification(nullptr)
124  , myHistory(nullptr)
125  , myParent(parent)
126  , myBox(nullptr)
127  , myBoxPlace(nullptr)
128 {
129 }

◆ ~_StateInstance()

inet::_StateInstance::~_StateInstance ( )
virtual
132 {
133  if (myBoxPlace)
134  ::operator delete(myBoxPlace);
135 
136  delete mySpecification;
137 }

Member Function Documentation

◆ box()

void* inet::Macho::_StateInstance::box ( )
inline
801  {
802  assert(myBox);
803  return myBox;
804  }

Referenced by setBox().

◆ create()

virtual _StateInstance* inet::Macho::_StateInstance::create ( _MachineBase machine,
_StateInstance parent 
)
pure virtual

◆ createBox()

virtual void inet::Macho::_StateInstance::createBox ( )
pure virtual

◆ deleteBox()

virtual void inet::Macho::_StateInstance::deleteBox ( )
pure virtual

◆ entry()

void inet::_StateInstance::entry ( _StateInstance previous,
bool  first = true 
)
140 {
141  // Only Root has no parent
142  if (!myParent)
143  return;
144 
145  // first entry or previous state is not substate -> perform entry
146  if (first || !previous.isChild(*this)) {
147  myParent->entry(previous, false);
148 
149  createBox();
150 
151  MACHO_TRC2(name(), "Entry");
153  }
154 }

Referenced by entry(), and inet::Macho::_MachineBase::rattleOn().

◆ exit()

void inet::_StateInstance::exit ( _StateInstance next)
157 {
158  // Only Root has no parent
159  if (!myParent)
160  return;
161 
162  // self transition or next state is not substate -> perform exit
163  if (this == &next || !next.isChild(*this)) {
164  MACHO_TRC2(name(), "Exit");
166 
167  // EmptyBox should be most common box, so optimize for this case.
169  mySpecification->_deleteBox(*this);
170 
171  myParent->exit(next);
172  }
173 }

Referenced by exit(), and inet::Macho::_MachineBase::rattleOn().

◆ history()

_StateInstance* inet::Macho::_StateInstance::history ( ) const
inline

◆ id()

virtual ID inet::Macho::_StateInstance::id ( )
pure virtual

◆ init()

void inet::_StateInstance::init ( bool  history)
176 {
177  if (history && myHistory) {
178  MACHO_TRC3(name(), "History transition to", myHistory->name());
179  myMachine.setPendingState(*myHistory, &_theDefaultInitializer);
180  }
181  else {
182  MACHO_TRC2(name(), "Init");
184  }
185 
186  myHistory = nullptr;
187 }

Referenced by inet::Macho::_DefaultInitializer::execute(), inet::Macho::_HistoryInitializer::execute(), and inet::Macho::_AdaptingInitializer::execute().

◆ isChild()

bool inet::Macho::_StateInstance::isChild ( const _StateInstance instance)
inline
790  {
791  return this == &instance || (myParent && myParent->isChild(instance));
792  }

Referenced by entry(), exit(), isChild(), and inet::Macho::_MachineBase::rattleOn().

◆ key()

◆ machine()

◆ name()

virtual const char* inet::Macho::_StateInstance::name ( )
pure virtual

◆ restore()

void inet::Macho::_StateInstance::restore ( _StateInstance instance)
inline
755  {
756  mySpecification->_restore(instance);
757  }

◆ saveHistory()

void inet::Macho::_StateInstance::saveHistory ( _StateInstance shallow,
_StateInstance deep 
)
inline
728  {
729  // Check state's history strategy.
730  mySpecification->_saveHistory(*this, shallow, deep);
731  }

Referenced by setHistorySuper().

◆ setBox()

void inet::Macho::_StateInstance::setBox ( void *  box)
inline
776  {
777  assert(!myBox);
778 
779  if (myBoxPlace) {
780  // Free cached memory of previously used box.
781  ::operator delete(myBoxPlace);
782  myBoxPlace = 0;
783  }
784 
785  myBox = box;
786  }

Referenced by inet::Macho::Machine< fsm::TopState >::Machine(), and inet::Macho::_MachineBase::rattleOn().

◆ setHistory()

void inet::Macho::_StateInstance::setHistory ( _StateInstance history) const
inline
813  {
814  myHistory = history;
815  }

Referenced by inet::Macho::MachoLink< C, P >::clearHistory().

◆ setHistorySuper()

void inet::Macho::_StateInstance::setHistorySuper ( _StateInstance deep)
inline
735  {
736  if (myParent)
737  // Let it choose between deep or shallow history.
738  myParent->saveHistory(*this, deep);
739  }

Referenced by inet::Macho::_MachineBase::rattleOn().

◆ shutdown()

void inet::Macho::_StateInstance::shutdown ( )
inline
750  {
752  }

◆ specification()

Member Data Documentation

◆ myBox

◆ myBoxPlace

◆ myHistory

_StateInstance* inet::Macho::_StateInstance::myHistory
mutableprotected

Referenced by history(), init(), and setHistory().

◆ myMachine

_MachineBase& inet::Macho::_StateInstance::myMachine
protected

Referenced by init(), and machine().

◆ myParent

_StateInstance* inet::Macho::_StateInstance::myParent
protected

Referenced by entry(), exit(), isChild(), and setHistorySuper().

◆ mySpecification


The documentation for this class was generated from the following files:
inet::Macho::_StateInstance::saveHistory
void saveHistory(_StateInstance &shallow, _StateInstance &deep)
Definition: Macho.h:727
inet::Macho::_StateInstance::name
virtual const char * name()=0
inet::Macho::_StateSpecification::init
virtual void init()
Definition: Macho.h:547
inet::Macho::_StateInstance::history
_StateInstance * history() const
Definition: Macho.h:817
inet::Macho::_StateInstance::exit
void exit(_StateInstance &next)
Definition: Macho.cc:156
inet::Macho::_StateInstance::createBox
virtual void createBox()=0
inet::Macho::_StateInstance::isChild
bool isChild(const _StateInstance &instance)
Definition: Macho.h:789
inet::Macho::_StateInstance::myBox
void * myBox
Definition: Macho.h:827
inet::Macho::_StateInstance::entry
void entry(_StateInstance &previous, bool first=true)
Definition: Macho.cc:139
inet::Macho::_StateSpecification::_shutdown
virtual void _shutdown()
Definition: Macho.cc:96
inet::Macho::_StateSpecification::_restore
virtual void _restore(_StateInstance &current)
Definition: Macho.cc:101
inet::Macho::_StateInstance::myHistory
_StateInstance * myHistory
Definition: Macho.h:825
inet::Macho::_StateInstance::myParent
_StateInstance * myParent
Definition: Macho.h:826
inet::Macho::_MachineBase::setPendingState
void setPendingState(_StateInstance &instance, _Initializer *init)
Definition: Macho.h:1518
inet::Macho::_StateInstance::mySpecification
_StateSpecification * mySpecification
Definition: Macho.h:824
MACHO_TRC2
#define MACHO_TRC2(STATE, MSG)
Definition: Macho.cc:46
inet::Macho::_StateInstance::box
void * box()
Definition: Macho.h:800
inet::Macho::_StateSpecification::entry
virtual void entry()
Definition: Macho.h:540
inet::Macho::_StateSpecification::_deleteBox
virtual void _deleteBox(_StateInstance &instance)
Definition: Macho.h:568
inet::Macho::_StateInstance::machine
_MachineBase & machine()
Definition: Macho.h:806
inet::Macho::_StateSpecification::exit
virtual void exit()
Definition: Macho.h:537
MACHO_TRC3
#define MACHO_TRC3(STATE, MSG1, MSG2)
Definition: Macho.cc:47
inet::Macho::_StateInstance::myMachine
_MachineBase & myMachine
Definition: Macho.h:823
inet::Macho::_EmptyBox::theEmptyBox
static _EmptyBox theEmptyBox
Definition: Macho.h:384
inet::Macho::_StateInstance::myBoxPlace
void * myBoxPlace
Definition: Macho.h:828
inet::Macho::_StateSpecification::_saveHistory
virtual void _saveHistory(_StateInstance &self, _StateInstance &shallow, _StateInstance &deep)
Definition: Macho.h:571