diff options
author | B3n30 <benediktthomas@gmail.com> | 2018-07-21 16:16:21 +0200 |
---|---|---|
committer | fearlessTobi <thm.frey@gmail.com> | 2018-07-29 15:24:41 +0200 |
commit | 6e5f83ee24e1db09ef2e08576eeed1182bc169fe (patch) | |
tree | 4227f601d0209310f67ff46911f4aead05a560ea | |
parent | Merge pull request #847 from lioncash/ncm (diff) | |
download | yuzu-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 |
-rw-r--r-- | src/common/threadsafe_queue.h | 32 |
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 |