-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpacketqueue.cpp
More file actions
49 lines (42 loc) · 1.23 KB
/
Copy pathpacketqueue.cpp
File metadata and controls
49 lines (42 loc) · 1.23 KB
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
#include "packetqueue.h"
PacketQueue::PacketQueue(bool limited, size_t limit, std::function<bool(Packet &,Packet &)> earlier): limited(limited),limit(limit),packetQueue{},earlier(earlier)
{
}
std::shared_ptr<Packet> PacketQueue::addPacket(Packet packet, double currentTime) {
//iterate
packet.enqueue(currentTime);
auto iterator = packetQueue.begin();
while(iterator != packetQueue.end() && (!(earlier(packet,*iterator))))
{
++iterator;
}
packetQueue.insert(iterator,packet);
if(limited && packetQueue.size()>limit)
{
Packet packet = packetQueue.back();
packet.dequeue(currentTime);
packet.drop();
packetQueue.pop_back();
return std::make_shared<Packet>(packet);
}
else
{
return std::shared_ptr<Packet>();
}
}
Packet PacketQueue::getNextPacket(double currentTime) {
Packet packet = packetQueue.front();
packet.dequeue(currentTime);
packetQueue.pop_front();
return packet;
}
bool PacketQueue::hasWork() {
return !packetQueue.empty();
}
bool PacketQueue::canTake(Packet packet) {
return !limited || (packetQueue.size() < limit) || (limit != 0 && earlier(packet,packetQueue.back()));
}
size_t PacketQueue::numberOfPacketsInQueue()
{
return packetQueue.size();
}