aboutsummaryrefslogtreecommitdiff
path: root/include/MessageQueue.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/MessageQueue.hpp')
-rw-r--r--include/MessageQueue.hpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/MessageQueue.hpp b/include/MessageQueue.hpp
index 7c34d51..3f38ca2 100644
--- a/include/MessageQueue.hpp
+++ b/include/MessageQueue.hpp
@@ -4,6 +4,7 @@
#include <mutex>
#include <condition_variable>
#include <optional>
+#include <functional>
namespace QuickMedia {
template <typename T>
@@ -55,6 +56,17 @@ namespace QuickMedia {
std::unique_lock<std::mutex> lock(mutex);
running = true;
}
+
+ // Returns true from |callback| to remove the element
+ void erase_if(std::function<bool(T&)> callback) {
+ std::unique_lock<std::mutex> lock(mutex);
+ for(auto it = data_queue.begin(); it != data_queue.end();) {
+ if(callback(*it))
+ it = data_queue.erase(it);
+ else
+ ++it;
+ }
+ }
private:
std::deque<T> data_queue;
std::mutex mutex;