2021-08-27 15:12:48 +01:00
|
|
|
module eventy.queues;
|
|
|
|
|
2021-08-31 10:34:22 +01:00
|
|
|
import eventy.event : Event;
|
|
|
|
import core.sync.mutex : Mutex;
|
|
|
|
import std.container.dlist;
|
|
|
|
import std.range;
|
|
|
|
|
2021-08-27 15:12:48 +01:00
|
|
|
/**
|
|
|
|
* Queue
|
|
|
|
*
|
|
|
|
* Represents a queue with a given ID that can
|
|
|
|
* have Event-s enqueued to it
|
|
|
|
*/
|
|
|
|
public final class Queue
|
|
|
|
{
|
2021-08-31 10:34:22 +01:00
|
|
|
public ulong id;
|
2021-08-27 15:12:48 +01:00
|
|
|
/* TODO: Add queue of Event's here */
|
2021-08-31 10:34:22 +01:00
|
|
|
|
|
|
|
private DList!(Event) queue;
|
|
|
|
private Mutex queueLock;
|
|
|
|
|
|
|
|
|
2021-09-01 13:50:39 +01:00
|
|
|
this(ulong id)
|
|
|
|
{
|
|
|
|
this.id = id;
|
|
|
|
queueLock = new Mutex();
|
|
|
|
}
|
|
|
|
|
2021-09-01 14:33:07 +01:00
|
|
|
public DList!(Event).Range getKak()
|
|
|
|
{
|
|
|
|
return queue[];
|
|
|
|
}
|
|
|
|
|
2021-08-31 10:34:22 +01:00
|
|
|
public void add(Event e)
|
|
|
|
{
|
|
|
|
/* Lock the queue */
|
|
|
|
queueLock.lock();
|
|
|
|
|
|
|
|
queue.insert(e);
|
|
|
|
|
|
|
|
/* Unlock the queue */
|
|
|
|
queueLock.unlock();
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool hasEvents()
|
|
|
|
{
|
|
|
|
bool has;
|
|
|
|
|
|
|
|
/* Lock the queue */
|
|
|
|
queueLock.lock();
|
|
|
|
|
2021-09-01 13:50:39 +01:00
|
|
|
has = !(queue[]).empty();
|
2021-08-31 10:34:22 +01:00
|
|
|
|
|
|
|
/* Unlock the queue */
|
|
|
|
queueLock.unlock();
|
|
|
|
|
|
|
|
return has;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Event popEvent()
|
|
|
|
{
|
|
|
|
Event poppedEvent;
|
|
|
|
|
|
|
|
/* Lock the queue */
|
|
|
|
queueLock.lock();
|
|
|
|
|
|
|
|
poppedEvent = (queue[]).front();
|
2021-09-01 14:33:07 +01:00
|
|
|
queue.removeFront();
|
2021-08-31 10:34:22 +01:00
|
|
|
|
|
|
|
/* Unlock the queue */
|
|
|
|
queueLock.unlock();
|
|
|
|
|
|
|
|
return poppedEvent;
|
|
|
|
}
|
2021-08-27 15:12:48 +01:00
|
|
|
}
|