summaryrefslogtreecommitdiffstats
path: root/src/common/threadsafe_queue.h
diff options
context:
space:
mode:
authorB3n30 <benediktthomas@gmail.com>2018-07-21 16:16:21 +0200
committerfearlessTobi <thm.frey@gmail.com>2018-07-29 15:24:41 +0200
commit6e5f83ee24e1db09ef2e08576eeed1182bc169fe (patch)
tree4227f601d0209310f67ff46911f4aead05a560ea /src/common/threadsafe_queue.h
parentMerge pull request #847 from lioncash/ncm (diff)
downloadyuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.tar
yuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.tar.gz
yuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.tar.bz2
yuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.tar.lz
yuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.tar.xz
yuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.tar.zst
yuzu-6e5f83ee24e1db09ef2e08576eeed1182bc169fe.zip
Diffstat (limited to '')
-rw-r--r--src/common/threadsafe_queue.h32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/common/threadsafe_queue.h b/src/common/threadsafe_queue.h
index a0c731e8c..edf13bc49 100644
--- a/src/common/threadsafe_queue.h
+++ b/src/common/threadsafe_queue.h
@@ -33,9 +33,11 @@ public:
bool Empty() const {
return !read_ptr->next.load();
}
+
T& Front() const {
return read_ptr->current;
}
+
template <typename Arg>
void Push(Arg&& t) {
// create the element, add it to the queue
@@ -108,15 +110,41 @@ private:
// single reader, multiple writer queue
template <typename T, bool NeedSize = true>
-class MPSCQueue : public SPSCQueue<T, NeedSize> {
+class MPSCQueue {
public:
+ u32 Size() const {
+ return spsc_queue.Size();
+ }
+
+ bool Empty() const {
+ return spsc_queue.Empty();
+ }
+
+ T& Front() const {
+ return spsc_queue.Front();
+ }
+
template <typename Arg>
void Push(Arg&& t) {
std::lock_guard<std::mutex> lock(write_lock);
- SPSCQueue<T, NeedSize>::Push(t);
+ spsc_queue.Push(t);
+ }
+
+ void Pop() {
+ return spsc_queue.Pop();
+ }
+
+ bool Pop(T& t) {
+ return spsc_queue.Pop(t);
+ }
+
+ // not thread-safe
+ void Clear() {
+ spsc_queue.Clear();
}
private:
+ SPSCQueue<T, NeedSize> spsc_queue;
std::mutex write_lock;
};
} // namespace Common