00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028 #ifndef qequeue_h
00029 #define qequeue_h
00030
00040
00041 #ifndef QF_EQUEUE_CTR_SIZE
00042
00050 #define QF_EQUEUE_CTR_SIZE 1
00051 #endif
00052 #if (QF_EQUEUE_CTR_SIZE == 1)
00053
00059 typedef uint8_t QEQueueCtr;
00060 #elif (QF_EQUEUE_CTR_SIZE == 2)
00061 typedef uint16_t QEQueueCtr;
00062 #elif (QF_EQUEUE_CTR_SIZE == 4)
00063 typedef uint32_t QEQueueCtr;
00064 #else
00065 #error "QF_EQUEUE_CTR_SIZE defined incorrectly, expected 1, 2, or 4"
00066 #endif
00067
00068
00110 class QEQueue {
00111 private:
00112
00123 QEvent const *m_frontEvt;
00124
00126 QEvent const **m_ring;
00127
00130 QEQueueCtr m_end;
00131
00133 QEQueueCtr m_head;
00134
00136 QEQueueCtr m_tail;
00137
00139 QEQueueCtr m_nFree;
00140
00146 QEQueueCtr m_nMin;
00147
00148 public:
00149
00158 void init(QEvent const *qSto[], QEQueueCtr qLen);
00159
00169 void postFIFO(QEvent const *e);
00170
00180 void postLIFO(QEvent const *e);
00181
00193 QEvent const *get(void);
00194
00205 QEQueueCtr getNFree(void) const {
00206 return m_nFree;
00207 }
00208
00209 private:
00210 friend class QF;
00211 friend class QActive;
00212 };
00213
00214 #endif // qequeue_h
00215