Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_thread_safe_queue.hpp
1#pragma once
2
3#include <deque>
4#include <mutex>
5
6namespace spk
7{
19 template <typename TType>
21 {
22 public:
24 using value_type = TType;
25
26 private:
27 mutable std::mutex _mutex;
28 std::deque<TType> _queue;
29
30 public:
35 void insert(TType &&p_value)
36 {
37 std::lock_guard<std::mutex> lock(_mutex);
38 _queue.push_back(std::move(p_value));
39 }
40
45 void insert(const TType &p_value)
46 {
47 std::lock_guard<std::mutex> lock(_mutex);
48 _queue.push_back(p_value);
49 }
50
56 TType popFront()
57 {
58 std::lock_guard<std::mutex> lock(_mutex);
59 if (_queue.empty() == true)
60 {
61 throw std::runtime_error("Can't popFront an empty ThreadSafeQueue");
62 }
63 TType out = std::move(_queue.front());
64 _queue.pop_front();
65 return out;
66 }
67
73 TType popBack()
74 {
75 std::lock_guard<std::mutex> lock(_mutex);
76 if (_queue.empty() == true)
77 {
78 throw std::runtime_error("Can't popBack an empty ThreadSafeQueue");
79 }
80 TType out = std::move(_queue.back());
81 _queue.pop_back();
82 return out;
83 }
84
89 bool empty() const noexcept
90 {
91 std::lock_guard<std::mutex> lock(_mutex);
92 return _queue.empty();
93 }
94 };
95}
Minimal mutex-protected FIFO deque wrapper.
Definition spk_thread_safe_queue.hpp:21
bool empty() const noexcept
Checks whether the queue is empty.
Definition spk_thread_safe_queue.hpp:89
TType popBack()
Pops the back element.
Definition spk_thread_safe_queue.hpp:73
TType popFront()
Pops the front element.
Definition spk_thread_safe_queue.hpp:56
void insert(TType &&p_value)
Inserts a new element by move.
Definition spk_thread_safe_queue.hpp:35
void insert(const TType &p_value)
Inserts a new element by copy.
Definition spk_thread_safe_queue.hpp:45
TType value_type
Element type stored by the queue.
Definition spk_thread_safe_queue.hpp:24