⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qhsm.h

📁 这是状态机的一个框架结构的例子,可以作为状态机的基本架构
💻 H
字号:
/******************************************************************** 
 * Quantum Hierarchical State Machine declarations ("C+" version)
 * Copyright (c) 2002 Miro Samek, Palo Alto, CA.
 * All Rights Reserved.
 *******************************************************************/
#ifndef qhsm_h
#define qhsm_h

#ifndef qevent_h
   #include "qevent.h"
#endif

typedef void (*QPseudoState)(struct QHsm *, QEvent const *);
typedef QPseudoState (*QState)(struct QHsm *, QEvent const *);
typedef QPseudoState QSTATE;  /* return value from a state-handler */

SUBCLASS(QHsm, Object)    /* Hierarchical State Machine base class */
   QState state__;                             /* the active state */
   QState source__;             /* source state during a transiton */
VTABLE(QHsm, Object)
METHODS
/* public members */
   void QHsmInit(QHsm *me, QEvent const *e); /* initial transition */
   void QHsmDispatch(QHsm *me, QEvent const *e);  /* take RTC step */
   int QHsmIsIn(QHsm const *me,QState state);     /* "is-in" query */
                                /* static method (no "me" pointer) */
   char const *QHsmGetVersion(void);

/* protected members */
   CLASS(Tran_)                     /* protected inner class Tran_ */
      QState chain[8];
      unsigned short actions;   /* action mask (2-bits for action) */
   METHODS
   END_CLASS

   QHsm *QHsmCtor_(QHsm *me, QPseudoState initial);        /* Ctor */
   void QHsmXtor_(QHsm *me);                               /* Xtor */

   QSTATE QHsm_top(QHsm *me, QEvent const *);       /* "top" state */
   #define QHsmGetState_(me_) ((me_)->state__)
   void QHsmTran_(QHsm *me, QState target);  /* dynamic transition */
   void QHsmTranStat_(QHsm *me, Tran_ *t, QState target);
   #define Q_INIT(target_) (((QHsm*)me)->state__ = (QState)(target_))
   #define Q_TRAN(target_) if (1) { \
      static Tran_ t_;              \
      QHsmTranStat_((QHsm *)me, &t_, (QState)(target_));\
   } else
   #define Q_TRAN_DYN(target_) \
      QHsmTran_((QHsm *)me, (QState)(target_))
/* private methods */
   void QHsmTranSetup__(QHsm *me, Tran_ *t, QState target);
END_CLASS 


    /* helper macro to calculate static dimension of a 1-dim array */
#define DIM(array_) (sizeof(array_)/sizeof(*(array_)))

#endif                                                   /* qhsm_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -