forked from metin2/server
53 lines
908 B
C
53 lines
908 B
C
|
#ifndef __INC_LIBTHECORE_EVENT_QUEUE_H__
|
||
|
#define __INC_LIBTHECORE_EVENT_QUEUE_H__
|
||
|
|
||
|
#ifdef M2_USE_POOL
|
||
|
#include "pool.h"
|
||
|
#endif
|
||
|
|
||
|
#include "stable_priority_queue.h"
|
||
|
|
||
|
struct TQueueElement
|
||
|
{
|
||
|
LPEVENT pvData;
|
||
|
int iStartTime;
|
||
|
int iKey;
|
||
|
bool bCancel;
|
||
|
};
|
||
|
|
||
|
class CEventQueue
|
||
|
{
|
||
|
public:
|
||
|
struct FuncQueueComp
|
||
|
{
|
||
|
bool operator () (TQueueElement * left, TQueueElement * right) const
|
||
|
{
|
||
|
return (left->iKey > right->iKey);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
public:
|
||
|
CEventQueue();
|
||
|
~CEventQueue();
|
||
|
|
||
|
TQueueElement * Enqueue(LPEVENT data, int duration, int pulse);
|
||
|
TQueueElement * Dequeue();
|
||
|
void Delete(TQueueElement * pElem);
|
||
|
void Requeue(TQueueElement *, int key);
|
||
|
int GetTopKey();
|
||
|
int Size();
|
||
|
|
||
|
protected:
|
||
|
void Destroy();
|
||
|
|
||
|
private:
|
||
|
stable_priority_queue<TQueueElement *, std::vector<TQueueElement *>, FuncQueueComp> m_pq_queue;
|
||
|
|
||
|
#ifdef M2_USE_POOL
|
||
|
ObjectPool<TQueueElement> pool_;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|