@@ -23,7 +23,8 @@ template <typename T> class Queue {
23
23
public:
24
24
using amount_function = std::function<size_t (const T &element)>;
25
25
26
- Queue (size_t limit = 0 , amount_function func = nullptr );
26
+ Queue (size_t limit = 0 , // elements (0 means no limit)
27
+ amount_function func = nullptr );
27
28
~Queue ();
28
29
29
30
void stop ();
@@ -50,10 +51,7 @@ template <typename T> class Queue {
50
51
51
52
template <typename T>
52
53
Queue<T>::Queue(size_t limit, amount_function func) : mLimit (limit), mAmount (0 ) {
53
- mAmountFunction = func ? func : [](const T &element) -> size_t {
54
- static_cast <void >(element);
55
- return 1 ;
56
- };
54
+ mAmountFunction = func ? func : []([[maybe_unused]] const T &element) -> size_t { return 1 ; };
57
55
}
58
56
59
57
template <typename T> Queue<T>::~Queue () { stop (); }
@@ -76,7 +74,7 @@ template <typename T> bool Queue<T>::empty() const {
76
74
77
75
template <typename T> bool Queue<T>::full() const {
78
76
std::lock_guard lock (mMutex );
79
- return mQueue .size () >= mLimit ;
77
+ return mLimit > 0 && mQueue .size () >= mLimit ;
80
78
}
81
79
82
80
template <typename T> size_t Queue<T>::size() const {
@@ -91,7 +89,7 @@ template <typename T> size_t Queue<T>::amount() const {
91
89
92
90
template <typename T> void Queue<T>::push(T element) {
93
91
std::unique_lock lock (mMutex );
94
- mPushCondition .wait (lock, [this ]() { return ! mLimit || mQueue .size () < mLimit || mStopping ; });
92
+ mPushCondition .wait (lock, [this ]() { return mLimit == 0 || mQueue .size () < mLimit || mStopping ; });
95
93
if (mStopping )
96
94
return ;
97
95
0 commit comments