server/game/src/event_queue.cpp

80 lines
1.2 KiB
C++
Raw Normal View History

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;
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();
}