-
Notifications
You must be signed in to change notification settings - Fork 5
/
TdQueue.h
64 lines (52 loc) · 1.4 KB
/
TdQueue.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifndef TDQUEUE_H
#define TDQUEUE_H
#include <QQueue>
#include <QDebug>
template<typename T>
class TdQueue
{
public:
TdQueue() {}
void enqueue(T value) {
enqueue(value, 100);
}
void enqueue(T value, int priority) {
Item<T> item(priority, value);
// Start at 1 so never replace the head!!
for(int i = 1 ; i < _queue.count() ; ++i ) {
const Item<T>& otherItem = _queue[i];
if( priority < otherItem._priority ) {
_queue.insert(i, item);
qDebug().nospace().noquote() << "[QUEUE] Queue(" << _queue.count() << ") Enqueued at position " << i << " with priority " << item._priority;
return;
}
}
_queue.append(item);
qDebug().nospace().noquote() << "[QUEUE] Queue(" << _queue.count() << ") Enqueued at the end with priority " << item._priority;
}
T dequeue() {
const Item<T>& item = _queue.dequeue();
qDebug().nospace().noquote() << "[QUEUE] Queue(" << _queue.count() << ") Dequeue with priority " << item._priority;
return item._value;
}
T head() {
const Item<T>& item = _queue.head();
qDebug().nospace().noquote() << "[QUEUE] Queue(" << _queue.count() << ") Head with priority " << item._priority;
return item._value;
}
int count() {
return _queue.count();
}
private:
template<typename C>
struct Item {
int _priority;
C _value;
Item(int priority, C value) {
_priority = priority;
_value = value;
}
};
QQueue< Item<T > > _queue;
};
#endif // TDQUEUE_H