208#if defined(__clang__)
209#if defined(_WIN32) || defined(_WIN64)
210#pragma clang diagnostic push
211#pragma clang diagnostic ignored "-Wreserved-identifier"
221template<
class T,
class U>
235#define TOPSTATE(TOP) \
236 struct TOP : public ::Macho::Link< TOP, ::Macho::TopBase< TOP > >
239#define SUBSTATE(STATE, SUPERSTATE) \
240 struct STATE : public ::Macho::Link< STATE, SUPERSTATE >
249 S(::Macho::_StateInstance & instance) : ::Macho::Link<S, SUPER>(instance) { \
251 using MustDeriveFromLink = ::CheckSameType< ::Macho::Link<S, SUPER>, LINK>::Check; \
254 static const char * _state_name() { return #S; } \
256 Box & box() { return *static_cast<Box *>(_box()); } \
257 friend class ::_VS8_Bug_101615;
260#define DEEPHISTORY() \
263 void _saveHistory(::Macho::_StateInstance & self, ::Macho::_StateInstance & , ::Macho::_StateInstance & deep) override\
264 { self.setHistory(&deep); SELF::SUPER::_setHistorySuper(self, deep); } \
267 void _setHistorySuper(::Macho::_StateInstance & self, ::Macho::_StateInstance & deep) override\
268 { self.setHistorySuper(deep); } \
270 static_assert(true, "dummy for extra semicolon warning")
276 virtual void _saveHistory(::Macho::_StateInstance & self, ::Macho::_StateInstance & shallow, ::Macho::_StateInstance & deep) \
277 { self.setHistory(&shallow); SELF::SUPER::_setHistorySuper(self, deep); } \
280 virtual void _setHistorySuper(::Macho::_StateInstance & self, ::Macho::_StateInstance & deep) \
281 { self.setHistorySuper(deep); } \
283 static_assert(true, "dummy for extra semicolon warning")
286#define PERSISTENT() \
288 virtual void _deleteBox(::Macho::_StateInstance & instance) {} \
314 using ID =
unsigned int;
330 place = ::operator
new(
sizeof(B));
345 static_cast<B *
>(box)->~B();
350#ifdef MACHO_SNAPSHOTS
352 void * _cloneBox(
void * other) {
354 return new B(*
static_cast<B *
>(other));
366#ifdef MACHO_SNAPSHOTS
368 void * _cloneBox<_EmptyBox>(
void * other);
404 : _myStateInstance(instance)
416 template<
class S,
class P1>
419 template<
class S,
class P1,
class P2>
420 void setState(
const P1 & p1,
const P2 & p2);
422 template<
class S,
class P1,
class P2,
class P3>
423 void setState(
const P1 & p1,
const P2 & p2,
const P3 & p3);
425 template<
class S,
class P1,
class P2,
class P3,
class P4>
426 void setState(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4);
428 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5>
429 void setState(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5);
431 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
432 void setState(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5,
const P6 & p6);
470 virtual void exit() {}
473 virtual void entry() {}
480 virtual void init() {}
490 template<
class C,
class P>
535 template<
class C,
class P>
542 using TOP =
typename P::TOP;
553 return key() == other || SUPER::isChild(other);
557 return static_cast<_KeyData *
>(other)->childPredicate(
key());
591 template<
class U,
class V>
604 friend class ::TestAccess;
615 this->_setHistorySuper(self, deep);
666#ifdef MACHO_SNAPSHOTS
686 virtual const char *
name() = 0;
693#ifdef MACHO_SNAPSHOTS
694 virtual void cloneBox(
void *
box) = 0;
767 assert(
false);
return nullptr;
772#ifdef MACHO_SNAPSHOTS
773 virtual void cloneBox(
void *
box) {}
776 const char *
name()
override {
return "Root"; }
792 template<
class C,
class P>
803 using Box =
typename S::Box;
810 const char *
name()
override {
return S::_state_name(); }
835#ifdef MACHO_SNAPSHOTS
836 virtual void cloneBox(
void *
box) {
867 template<
class TOP,
class R,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
869 using Signature = R (TOP::*)(P1, P2, P3, P4, P5, P6);
872 _Event6(Signature handler,
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5,
const P6 & p6)
884 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
899 template<
class TOP,
class R,
class P1,
class P2,
class P3,
class P4,
class P5>
901 using Signature = R (TOP::*)(P1, P2, P3, P4, P5);
904 _Event5(Signature handler,
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5)
915 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
929 template<
class TOP,
class R,
class P1,
class P2,
class P3,
class P4>
931 using Signature = R (TOP::*)(P1, P2, P3, P4);
934 _Event4(Signature handler,
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4)
944 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
957 template<
class TOP,
class R,
class P1,
class P2,
class P3>
959 using Signature = R (TOP::*)(P1, P2, P3);
962 _Event3(Signature handler,
const P1 & p1,
const P2 & p2,
const P3 & p3)
971 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
983 template<
class TOP,
class R,
class P1,
class P2>
985 using Signature = R (TOP::*)(P1, P2);
988 _Event2(Signature handler,
const P1 & p1,
const P2 & p2)
996 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
1007 template<
class TOP,
class R,
class P1>
1009 using Signature = R (TOP::*)(P1);
1019 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
1029 template<
class TOP,
class R>
1031 using Signature = R (TOP::*)();
1040 TOP & behaviour =
static_cast<TOP &
>(instance.
specification());
1049 template<
class TOP,
class R,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
1050 inline IEvent<TOP> *
Event(R (TOP::*handler)(P1, P2, P3, P4, P5, P6), const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6) {
1051 return new _Event6<TOP, R, P1, P2, P3, P4, P5, P6>(handler, p1, p2, p3, p4, p5, p6);
1055 template<
class TOP,
class R,
class P1,
class P2,
class P3,
class P4,
class P5>
1056 inline IEvent<TOP> *
Event(R (TOP::*handler)(P1, P2, P3, P4, P5), const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5) {
1057 return new _Event5<TOP, R, P1, P2, P3, P4, P5>(handler, p1, p2, p3, p4, p5);
1061 template<
class TOP,
class R,
class P1,
class P2,
class P3,
class P4>
1062 inline IEvent<TOP> *
Event(R (TOP::*handler)(P1, P2, P3, P4), const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4) {
1066 template<
class TOP,
class R,
class P1,
class P2,
class P3>
1067 inline IEvent<TOP> *
Event(R (TOP::*handler)(P1, P2, P3), const P1 & p1, const P2 & p2, const P3 & p3) {
1071 template<
class TOP,
class R,
class P1,
class P2>
1076 template<
class TOP,
class R,
class P1>
1081 template<
class TOP,
class R>
1095 template<
class S,
class P1>
1101 template<
class S,
class P1,
class P2>
1104 behaviour.init(p1, p2);
1107 template<
class S,
class P1,
class P2,
class P3>
1110 behaviour.init(p1, p2, p3);
1113 template<
class S,
class P1,
class P2,
class P3,
class P4>
1116 behaviour.init(p1, p2, p3, p4);
1119 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5>
1122 behaviour.init(p1, p2, p3, p4, p5);
1125 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
1128 behaviour.init(p1, p2, p3, p4, p5, p6);
1165 void destroy()
override {}
1174 instance.
init(
false);
1184 instance.
init(
true);
1195 instance.
init(
true);
1210 template<
class S,
class P1>
1222 ::_VS8_Bug_101615::execute<S, P1>(instance,
myParam1);
1230 template<
class S,
class P1,
class P2>
1252 template<
class S,
class P1,
class P2,
class P3>
1276 template<
class S,
class P1,
class P2,
class P3,
class P4>
1302 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5>
1305 _Initializer5(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5)
1318 ::_VS8_Bug_101615::execute<S, P1, P2, P3, P4, P5>(instance,
myParam1,
myParam2,
myParam3,
myParam4,
myParam5);
1330 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
1333 _Initializer6(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5,
const P6 & p6)
1343 return new _Initializer6<S, P1, P2, P3, P4, P5, P6>(
myParam1,
myParam2,
myParam3,
myParam4,
myParam5,
myParam6);
1347 _VS8_Bug_101615::execute<S, P1, P2, P3, P4, P5, P6>(instance,
myParam1,
myParam2,
myParam3,
myParam4,
myParam5,
myParam6);
1387 "There is already a state transition pending!");
1431#ifdef MACHO_SNAPSHOTS
1443 template<
class C,
class P>
1463 friend class ::TestAccess;
1517 if (
this == &other)
return *
this;
1541 return static_cast<_KeyData *
>(k)->childPredicate(
key());
1575 return Alias(S::key());
1578 template<
class S,
class P1>
1583 template<
class S,
class P1,
class P2>
1588 template<
class S,
class P1,
class P2,
class P3>
1593 template<
class S,
class P1,
class P2,
class P3,
class P4>
1594 Alias State(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4) {
1598 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5>
1599 Alias State(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5) {
1600 return Alias(S::key(),
new _Initializer5<S, P1, P2, P3, P4, P5>(p1, p2, p3, p4, p5));
1603 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
1604 Alias State(
const P1 & p1,
const P2 & p2,
const P3 & p3,
const P4 & p4,
const P5 & p5,
const P6 & p6) {
1605 return Alias(S::key(),
new _Initializer6<S, P1, P2, P3, P4, P5, P6>(p1, p2, p3, p4, p5, p6));
1625#ifdef MACHO_SNAPSHOTS
1627 class Snapshot :
public _MachineBase {
1629 Snapshot(Machine<TOP> & machine);
1632 free(Machine<TOP>::theStateCount);
1636 friend class Machine<TOP>;
1638 Snapshot(
const Snapshot<TOP> & other);
1639 Snapshot & operator=(
const Snapshot<TOP> & other);
1669 return static_cast<TOP *
>(& (myMachine.myCurrentState->specification()) );
1680 static_assert(
static_cast<MustDeriveFromTopBase*
>(
nullptr)==
nullptr,
"dummy");
1683 start(TOP::_getInstance(*
this));
1692 static_assert(
static_cast<MustDeriveFromTopBase*
>(
nullptr)==
nullptr,
"dummy");
1698#ifdef MACHO_SNAPSHOTS
1700 Machine(
const Snapshot<TOP> & snapshot) {
1702 copy(snapshot.myInstances, theStateCount);
1706 Machine<TOP> & operator=(
const Snapshot<TOP> & snapshot) {
1712 free(theStateCount);
1713 copy(snapshot.myInstances, theStateCount);
1720 current->restore(*current);
1729 free(theStateCount);
1748 if (destroy)
delete event;
1754 const typename TOP::Box &
box()
const {
1760 template<
class C,
class P>
1767#ifdef MACHO_SNAPSHOTS
1768 friend class Snapshot<TOP>;
1774 static ID theStateCount;
1800 template<
class S,
class P1>
1807 template<
class S,
class P1,
class P2>
1814 template<
class S,
class P1,
class P2,
class P3>
1821 template<
class S,
class P1,
class P2,
class P3,
class P4>
1828 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5>
1832 m.
setPendingState(instance,
new _Initializer5<S, P1, P2, P3, P4, P5>(p1, p2, p3, p4, p5));
1835 template<
class S,
class P1,
class P2,
class P3,
class P4,
class P5,
class P6>
1839 m.
setPendingState(instance,
new _Initializer6<S, P1, P2, P3, P4, P5, P6>(p1, p2, p3, p4, p5, p6));
1874 _myStateInstance.machine().setPendingEvent(event);
1880 return static_cast<Machine<TOP> &
>(this->_myStateInstance.machine());
1886 template<
class C,
class P>
1888 : P(P::_getInstance(instance.machine()))
1891 , _myStateInstance(instance)
1895 template<
class C,
class P>
1897 return _myStateInstance.box();
1901 template<
class C,
class P>
1907 template<
class C,
class P>
1908 inline _StateInstance & Link<C, P>::_getInstance(_MachineBase & machine) {
1911 if (instance ==
nullptr)
1913 instance =
new _SubstateInstance<C>(machine, &P::_getInstance(machine));
1918 template<
class C,
class P>
1924 template<
class C,
class P>
1929 template<
class C,
class P>
1932 if (instance !=
nullptr)
1936 template<
class C,
class P>
1939 if (instance !=
nullptr)
1943 template<
class C,
class P>
1948 if (instance !=
nullptr)
1949 history = instance->
history();
1951 return history !=
nullptr ? history->
key() : key();
1954 template<
class C,
class P>
1960 template<
class C,
class P>
1962 return Alias(key());
1968#ifdef MACHO_SNAPSHOTS
1984#if defined(__clang__)
1985#if defined(_WIN32) || defined(_WIN64)
1986#pragma clang diagnostic pop
_KeyData * key() const
Definition Macho.h:1558
Alias & operator=(const Alias &other)
Definition Macho.h:1516
Key myStateKey
Definition Macho.h:1562
bool isChild(Key k) const
Definition Macho.h:1536
~Alias()
Definition Macho.h:1527
Alias(Key key, _Initializer *init)
Definition Macho.h:1504
_Initializer * myInitializer
Definition Macho.h:1565
void setState(_MachineBase &machine) const
Alias(const Alias &other)
Definition Macho.h:1511
ID id() const
Definition Macho.h:1548
bool isParent(Key k) const
Definition Macho.h:1540
const char * name() const
Definition Macho.h:1544
Alias(Key key, bool history=false)
Definition Macho.h:1492
static void clearHistoryDeep(const _MachineBase &machine)
Definition Macho.h:1937
static bool isCurrent(const _MachineBase &machine)
Definition Macho.h:1919
static bool isParent(Key other)
Definition Macho.h:556
void entry() override
Definition Macho.h:582
friend class Link
Definition Macho.h:592
static bool isCurrentDirect(const _MachineBase &machine)
Definition Macho.h:1925
P SUPER
Definition Macho.h:539
typename P::TOP TOP
Definition Macho.h:542
void exit() override
Definition Macho.h:584
void * _box()
Definition Macho.h:1896
void init() override
Definition Macho.h:583
static Key key()
Definition Macho.h:1955
static void clearHistory(const _MachineBase &machine)
Definition Macho.h:1930
static Alias history(const _MachineBase &machine)
Definition Macho.h:1944
static bool isChild(Key other)
Definition Macho.h:552
static Alias alias()
Definition Macho.h:1961
Machine()
Definition Macho.h:1676
~Machine() override
Definition Macho.h:1727
void dispatch(IEvent< TOP > *event, bool destroy=true)
Definition Macho.h:1744
const TOP::Box & box() const
Definition Macho.h:1754
AfterAdvice operator->()
Definition Macho.h:1735
Machine(const Alias &state)
Definition Macho.h:1688
static const ID value
Definition Macho.h:628
T TOP
Definition Macho.h:517
TopBase(_StateInstance &instance)
Definition Macho.h:520
void dispatch(IEvent< TOP > *event)
Definition Macho.h:1872
const Machine< TOP > & machine()
Definition Macho.h:1879
_Initializer * clone() override
Definition Macho.h:1198
const _MachineBase & myMachine
Definition Macho.h:1205
_AdaptingInitializer(const _MachineBase &machine)
Definition Macho.h:1192
void execute(_StateInstance &instance) override
Definition Macho.h:1194
Key adapt(Key key) override
void execute(_StateInstance &instance) override
Definition Macho.h:1173
static _EmptyBox theEmptyBox
Definition Macho.h:321
void dispatch(_StateInstance &instance) override
Definition Macho.h:1039
_Event0(Signature handler)
Definition Macho.h:1034
Signature myHandler
Definition Macho.h:1044
Signature myHandler
Definition Macho.h:1023
_Event1(Signature handler, const P1 &p1)
Definition Macho.h:1012
P1 myParam1
Definition Macho.h:1024
void dispatch(_StateInstance &instance) override
Definition Macho.h:1018
P1 myParam1
Definition Macho.h:1001
P2 myParam2
Definition Macho.h:1002
_Event2(Signature handler, const P1 &p1, const P2 &p2)
Definition Macho.h:988
Signature myHandler
Definition Macho.h:1000
void dispatch(_StateInstance &instance)
Definition Macho.h:995
P3 myParam3
Definition Macho.h:978
_Event3(Signature handler, const P1 &p1, const P2 &p2, const P3 &p3)
Definition Macho.h:962
P1 myParam1
Definition Macho.h:976
Signature myHandler
Definition Macho.h:975
void dispatch(_StateInstance &instance)
Definition Macho.h:970
P2 myParam2
Definition Macho.h:977
void dispatch(_StateInstance &instance)
Definition Macho.h:943
_Event4(Signature handler, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4)
Definition Macho.h:934
P4 myParam4
Definition Macho.h:952
P2 myParam2
Definition Macho.h:950
P1 myParam1
Definition Macho.h:949
Signature myHandler
Definition Macho.h:948
P3 myParam3
Definition Macho.h:951
P1 myParam1
Definition Macho.h:920
P2 myParam2
Definition Macho.h:921
P4 myParam4
Definition Macho.h:923
Signature myHandler
Definition Macho.h:919
_Event5(Signature handler, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5)
Definition Macho.h:904
P5 myParam5
Definition Macho.h:924
P3 myParam3
Definition Macho.h:922
void dispatch(_StateInstance &instance)
Definition Macho.h:914
void dispatch(_StateInstance &instance)
Definition Macho.h:883
_Event6(Signature handler, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6)
Definition Macho.h:872
P3 myParam3
Definition Macho.h:891
P4 myParam4
Definition Macho.h:892
P1 myParam1
Definition Macho.h:889
P6 myParam6
Definition Macho.h:894
Signature myHandler
Definition Macho.h:888
P5 myParam5
Definition Macho.h:893
P2 myParam2
Definition Macho.h:890
void execute(_StateInstance &instance) override
Definition Macho.h:1183
virtual void dispatch(_StateInstance &)=0
virtual ~_IEventBase()=default
void execute(_StateInstance &instance) override
Definition Macho.h:1221
P1 myParam1
Definition Macho.h:1226
_Initializer * clone() override
Definition Macho.h:1217
_Initializer1(const P1 &p1)
Definition Macho.h:1213
_Initializer2(const P1 &p1, const P2 &p2)
Definition Macho.h:1233
_Initializer * clone() override
Definition Macho.h:1238
void execute(_StateInstance &instance) override
Definition Macho.h:1242
P1 myParam1
Definition Macho.h:1247
P2 myParam2
Definition Macho.h:1248
P1 myParam1
Definition Macho.h:1270
P2 myParam2
Definition Macho.h:1271
_Initializer * clone() override
Definition Macho.h:1261
_Initializer3(const P1 &p1, const P2 &p2, const P3 &p3)
Definition Macho.h:1255
void execute(_StateInstance &instance) override
Definition Macho.h:1265
P3 myParam3
Definition Macho.h:1272
_Initializer * clone() override
Definition Macho.h:1286
P3 myParam3
Definition Macho.h:1297
_Initializer4(const P1 &p1, const P2 &p2, const P3 &p3, P4 &p4)
Definition Macho.h:1279
P1 myParam1
Definition Macho.h:1295
P2 myParam2
Definition Macho.h:1296
P4 myParam4
Definition Macho.h:1298
void execute(_StateInstance &instance) override
Definition Macho.h:1290
P3 myParam3
Definition Macho.h:1324
P4 myParam4
Definition Macho.h:1325
_Initializer5(const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5)
Definition Macho.h:1305
P5 myParam5
Definition Macho.h:1326
void execute(_StateInstance &instance) override
Definition Macho.h:1317
P1 myParam1
Definition Macho.h:1322
P2 myParam2
Definition Macho.h:1323
_Initializer * clone() override
Definition Macho.h:1313
P1 myParam1
Definition Macho.h:1351
P2 myParam2
Definition Macho.h:1352
_Initializer * clone() override
Definition Macho.h:1342
P6 myParam6
Definition Macho.h:1356
P4 myParam4
Definition Macho.h:1354
_Initializer6(const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6)
Definition Macho.h:1333
void execute(_StateInstance &instance) override
Definition Macho.h:1346
P3 myParam3
Definition Macho.h:1353
P5 myParam5
Definition Macho.h:1355
virtual ~_Initializer()=default
virtual Key adapt(Key key)
Definition Macho.h:1152
virtual _Initializer * clone()=0
virtual void execute(_StateInstance &instance)=0
virtual void destroy()
Definition Macho.h:1150
const _StateInstance * getInstance(ID id) const
Definition Macho.h:1410
_StateInstance * myPendingState
Definition Macho.h:1469
void allocate(unsigned int count)
void * myPendingBox
Definition Macho.h:1473
void setState(_StateInstance &instance, _Initializer *init)
friend class _StateInstance
Definition Macho.h:1460
class Alias currentState() const
_StateInstance *& getInstance(ID id)
Definition Macho.h:1405
void start(const Alias &state)
_Initializer * myPendingInit
Definition Macho.h:1470
void setPendingEvent(_IEventBase *event)
Definition Macho.h:1394
void start(_StateInstance &instance)
void setState(const Alias &state)
_StateInstance * myCurrentState
Definition Macho.h:1466
void free(unsigned int count)
void setPendingState(_StateInstance &instance, _Initializer *init)
Definition Macho.h:1385
_IEventBase * myPendingEvent
Definition Macho.h:1475
_StateInstance ** myInstances
Definition Macho.h:1478
void clearHistoryDeep(unsigned int count, const _StateInstance &instance) const
_RootInstance(_MachineBase &machine, _StateInstance *parent)
Definition Macho.h:754
const char * name() override
Definition Macho.h:776
void deleteBox() override
Definition Macho.h:771
ID id() override
Definition Macho.h:761
friend class _StateSpecification
Definition Macho.h:752
Key key() override
Definition Macho.h:765
void createBox() override
Definition Macho.h:770
_StateInstance * create(_MachineBase &machine, _StateInstance *parent) override
Definition Macho.h:779
virtual ~_StateInstance()
virtual _StateInstance * create(_MachineBase &machine, _StateInstance *parent)=0
void setBox(void *box)
Definition Macho.h:698
void exit(_StateInstance &next)
virtual void deleteBox()=0
void * myBoxPlace
Definition Macho.h:744
void setHistory(_StateInstance *history) const
Definition Macho.h:730
void shutdown()
Definition Macho.h:674
_MachineBase & machine()
Definition Macho.h:725
void entry(_StateInstance &previous, bool first=true)
void setHistorySuper(_StateInstance &deep)
Definition Macho.h:660
_StateInstance * myHistory
Definition Macho.h:741
bool isChild(const _StateInstance &instance)
Definition Macho.h:711
virtual const char * name()=0
_MachineBase & myMachine
Definition Macho.h:739
void * box()
Definition Macho.h:720
_StateInstance(_MachineBase &machine, _StateInstance *parent)
void restore(_StateInstance &instance)
Definition Macho.h:678
_StateSpecification & specification()
Definition Macho.h:715
void * myBox
Definition Macho.h:743
virtual void createBox()=0
void saveHistory(_StateInstance &shallow, _StateInstance &deep)
Definition Macho.h:654
_StateInstance * myParent
Definition Macho.h:742
_StateSpecification * mySpecification
Definition Macho.h:740
_StateInstance * history() const
Definition Macho.h:734
static bool isChild(Key)
Definition Macho.h:398
friend class _StateInstance
Definition Macho.h:493
void setStateDirect(typename S::Box *box=0)
Definition Macho.h:1861
virtual void _setHistorySuper(_StateInstance &, _StateInstance &)
Definition Macho.h:466
void setStateBox(typename S::Box *box=0)
Definition Macho.h:1852
void setState(const class Alias &state)
void setState(_StateInstance ¤t)
void setStateHistory()
Definition Macho.h:1844
virtual void _restore(_StateInstance ¤t)
virtual ~_StateSpecification()=default
void setState()
Definition Macho.h:1794
_StateSpecification(_StateInstance &instance)
Definition Macho.h:403
_StateInstance * create(_MachineBase &machine, _StateInstance *parent) override
Definition Macho.h:821
Key key() override
Definition Macho.h:816
const char * name() override
Definition Macho.h:810
typename S::Box Box
Definition Macho.h:803
ID id() override
Definition Macho.h:812
void deleteBox() override
Definition Macho.h:830
_SubstateInstance(_MachineBase &machine, _StateInstance *parent)
Definition Macho.h:795
void createBox() override
Definition Macho.h:825
~_SubstateInstance() override
Definition Macho.h:805
static void execute(Macho::_StateInstance &instance, const P1 &p1)
Definition Macho.h:1096
static void execute(Macho::_StateInstance &instance, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6)
Definition Macho.h:1126
static void execute(Macho::_StateInstance &instance, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4)
Definition Macho.h:1114
static void execute(Macho::_StateInstance &instance, const P1 &p1, const P2 &p2)
Definition Macho.h:1102
static void execute(Macho::_StateInstance &instance, const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5)
Definition Macho.h:1120
static void execute(Macho::_StateInstance &instance, const P1 &p1, const P2 &p2, const P3 &p3)
Definition Macho.h:1108
void _deleteBox< _EmptyBox >(void *&box, void *&place)
void * _createBox< _EmptyBox >(void *&place)
static _HistoryInitializer _theHistoryInitializer
Definition Macho.h:1363
void * Key
Definition Macho.h:310
IEvent< TOP > * Event(R(TOP::*handler)(P1, P2, P3, P4, P5, P6), const P1 &p1, const P2 &p2, const P3 &p3, const P4 &p4, const P5 &p5, const P6 &p6)
Definition Macho.h:1050
void * _createBox(void *&place)
Definition Macho.h:328
Alias StateHistory(const _MachineBase &machine)
Definition Macho.h:1612
static _DefaultInitializer _theDefaultInitializer
Definition Macho.h:1362
Alias State()
Definition Macho.h:1574
void _deleteBox(void *&box, void *&place)
Definition Macho.h:341
unsigned int ID
Definition Macho.h:314
bool Check
Definition Macho.h:227
TOP * operator->()
Definition Macho.h:1668
~AfterAdvice()
Definition Macho.h:1665
AfterAdvice(Machine< TOP > &m)
Definition Macho.h:1662
const NameFn name
Definition Macho.h:385
const Generator instanceGenerator
Definition Macho.h:380
const char *(*)() NameFn
Definition Macho.h:377
bool(*)(Key) Predicate
Definition Macho.h:376
_StateInstance &(*)(_MachineBase &) Generator
Definition Macho.h:375
const ID id
Definition Macho.h:386
const Predicate childPredicate
Definition Macho.h:383