2022-03-05 12:44:06 +02:00
|
|
|
|
/*
|
|
|
|
|
* Filename: queue.c
|
|
|
|
|
* Description: ť ó<EFBFBD><EFBFBD>
|
|
|
|
|
*
|
|
|
|
|
* Author: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (aka. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Cronan), <EFBFBD>ۿ<EFBFBD><EFBFBD><EFBFBD> (aka. myevan, <EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>)
|
|
|
|
|
*/
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
|
|
|
|
#include "event_queue.h"
|
|
|
|
|
|
|
|
|
|
CEventQueue::CEventQueue()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CEventQueue::~CEventQueue()
|
|
|
|
|
{
|
|
|
|
|
Destroy();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CEventQueue::Destroy()
|
|
|
|
|
{
|
|
|
|
|
while (!m_pq_queue.empty())
|
|
|
|
|
{
|
|
|
|
|
TQueueElement * pElem = m_pq_queue.top();
|
|
|
|
|
m_pq_queue.pop();
|
|
|
|
|
|
|
|
|
|
Delete(pElem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQueueElement * CEventQueue::Enqueue(LPEVENT pvData, int duration, int pulse)
|
|
|
|
|
{
|
|
|
|
|
#ifdef M2_USE_POOL
|
|
|
|
|
TQueueElement * pElem = pool_.Construct();
|
|
|
|
|
#else
|
|
|
|
|
TQueueElement * pElem = M2_NEW TQueueElement;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
pElem->pvData = pvData;
|
|
|
|
|
pElem->iStartTime = pulse;
|
|
|
|
|
pElem->iKey = duration + pulse;
|
2022-03-09 21:30:51 +02:00
|
|
|
|
pElem->bCancel = false;
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
m_pq_queue.push(pElem);
|
|
|
|
|
return pElem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQueueElement * CEventQueue::Dequeue()
|
|
|
|
|
{
|
|
|
|
|
if (m_pq_queue.empty())
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
TQueueElement * pElem = m_pq_queue.top();
|
|
|
|
|
m_pq_queue.pop();
|
|
|
|
|
return pElem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CEventQueue::Delete(TQueueElement * pElem)
|
|
|
|
|
{
|
|
|
|
|
#ifdef M2_USE_POOL
|
|
|
|
|
pool_.Destroy(pElem);
|
|
|
|
|
#else
|
|
|
|
|
M2_DELETE(pElem);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CEventQueue::GetTopKey()
|
|
|
|
|
{
|
|
|
|
|
if (m_pq_queue.empty())
|
|
|
|
|
return INT_MAX;
|
|
|
|
|
|
|
|
|
|
return m_pq_queue.top()->iKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CEventQueue::Size()
|
|
|
|
|
{
|
|
|
|
|
return m_pq_queue.size();
|
|
|
|
|
}
|
|
|
|
|
|