Nix (Dev)
3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
Queue.hpp
Go to the documentation of this file.
1
#ifndef IV_SRC_CONTAINERS_QUEUE_HPP_
2
#define IV_SRC_CONTAINERS_QUEUE_HPP_
3
4
#include <condition_variable>
5
#include <mutex>
6
#include <queue>
7
#include <type_traits>
8
9
namespace
iv::containers
10
{
11
12
template
<
typename
T, u
int
64_t Size>
13
class
Queue
14
{
15
public
:
16
Queue
() =
default
;
17
Queue
(
const
Queue
&) =
delete
;
18
19
virtual
~Queue
()
20
{
21
clear
();
22
}
23
24
Queue
&
operator=
(
const
Queue
&other) =
delete
;
25
26
void
pop
(T &item)
27
{
28
std::scoped_lock lock(
m_mutex
);
29
30
while
(
m_data
.empty())
31
{
32
m_cond
.wait(lock);
33
}
34
35
item =
m_data
.front();
36
m_data
.pop();
37
}
38
39
bool
push
(
const
T &item)
40
{
41
std::scoped_lock lock(
m_mutex
);
42
43
if
(
m_data
.size() < Size)
44
{
45
m_data
.push(item);
46
m_cond
.notify_one();
47
48
return
true
;
49
}
50
51
return
false
;
52
}
53
54
void
clear
()
55
{
56
std::scoped_lock lock(
m_mutex
);
57
58
while
(not
m_data
.empty())
59
{
60
if
(std::is_pointer<T>::value)
61
{
62
T item =
m_data
.front();
63
m_data
.pop();
64
65
delete
item;
66
item =
nullptr
;
67
}
68
}
69
}
70
71
bool
empty
()
72
{
73
std::scoped_lock lock(
m_mutex
);
74
return
m_data
.empty();
75
}
76
77
bool
full
()
78
{
79
std::scoped_lock lock(
m_mutex
);
80
return
m_data
.size() == Size;
81
}
82
83
private
:
84
static_assert
(std::is_default_constructible<T>::value,
"T must be default constructible"
);
85
static_assert
(Size >= 50,
"Size is too small!"
);
86
static_assert
(Size <= 5000,
"Size is too long!"
);
87
88
std::queue<T>
m_data
;
89
std::mutex
m_mutex
;
90
std::condition_variable_any
m_cond
;
91
};
92
93
}
// namespace iv::containers
94
95
#endif
//IV_SRC_CONTAINERS_QUEUE_HPP_
iv::containers::Queue
Definition
Queue.hpp:14
iv::containers::Queue::Queue
Queue()=default
iv::containers::Queue::Queue
Queue(const Queue &)=delete
iv::containers::Queue::push
bool push(const T &item)
Definition
Queue.hpp:39
iv::containers::Queue::clear
void clear()
Definition
Queue.hpp:54
iv::containers::Queue::empty
bool empty()
Definition
Queue.hpp:71
iv::containers::Queue::m_cond
std::condition_variable_any m_cond
Definition
Queue.hpp:90
iv::containers::Queue::full
bool full()
Definition
Queue.hpp:77
iv::containers::Queue::m_data
std::queue< T > m_data
Definition
Queue.hpp:88
iv::containers::Queue::operator=
Queue & operator=(const Queue &other)=delete
iv::containers::Queue::pop
void pop(T &item)
Definition
Queue.hpp:26
iv::containers::Queue::~Queue
virtual ~Queue()
Definition
Queue.hpp:19
iv::containers::Queue::m_mutex
std::mutex m_mutex
Definition
Queue.hpp:89
iv::containers
Definition
CircularQueue.hpp:11
src
containers
Queue.hpp
Generated by
1.12.0