UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
vulkan_display_detail::ConcurrentQueue< T, max_size > Class Template Reference

#include <concurrent_queue.hpp>

Inheritance diagram for vulkan_display_detail::ConcurrentQueue< T, max_size >:
Inheritance graph
Collaboration diagram for vulkan_display_detail::ConcurrentQueue< T, max_size >:
Collaboration graph

Public Member Functions

T force_push (T item)
 
template<typename Rep , typename Period >
T timed_pop (std::chrono::duration< Rep, Period > timeout)
 
T try_pop ()
 
bool try_push (T item)
 
T wait_pop ()
 
void wait_push (T item)
 

Private Member Functions

T pop (bool nonblocking=false)
 
void push_and_unlock (std::unique_lock< std::mutex > &lock, T &&item)
 

Private Attributes

std::mutex mutex {}
 
std::queue< T > queue
 
std::condition_variable queue_decremented_cv {}
 
std::condition_variable queue_incremented_cv {}
 

Detailed Description

template<typename T, size_t max_size = unlimited_size>
class vulkan_display_detail::ConcurrentQueue< T, max_size >

Definition at line 51 of file concurrent_queue.hpp.

Member Function Documentation

◆ force_push()

template<typename T , size_t max_size = unlimited_size>
T vulkan_display_detail::ConcurrentQueue< T, max_size >::force_push ( T item)
inline

Definition at line 103 of file concurrent_queue.hpp.

103 {
104 std::unique_lock lock{mutex};
105 T result = {};
106 if (queue.size() >= max_size) {
107 result = std::move(queue.front());
108 queue.pop();
109 }
110 push_and_unlock(lock, std::move(item));
111 return result;
112 }
void push_and_unlock(std::unique_lock< std::mutex > &lock, T &&item)
Definition hd-rum.c:27

References vulkan_display_detail::ConcurrentQueue< T, max_size >::push_and_unlock().

Here is the call graph for this function:

◆ pop()

template<typename T , size_t max_size = unlimited_size>
T vulkan_display_detail::ConcurrentQueue< T, max_size >::pop ( bool nonblocking = false)
inlineprivate

Definition at line 63 of file concurrent_queue.hpp.

64 {
65 std::unique_lock<std::mutex> lock{mutex};
66 if (queue.size() == 0 && nonblocking) {
67 return T();
68 }
69
70 queue_incremented_cv.wait(lock, [this]{return queue.size() > 0;});
71 T result = std::move(queue.front());
72 queue.pop();
73
74 lock.unlock();
75 queue_decremented_cv.notify_one();
76 return result;
77 }

References vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_decremented_cv, and vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_incremented_cv.

Referenced by vulkan_display_detail::ConcurrentQueue< T, max_size >::try_pop(), and vulkan_display_detail::ConcurrentQueue< T, max_size >::wait_pop().

◆ push_and_unlock()

template<typename T , size_t max_size = unlimited_size>
void vulkan_display_detail::ConcurrentQueue< T, max_size >::push_and_unlock ( std::unique_lock< std::mutex > & lock,
T && item )
inlineprivate

◆ timed_pop()

template<typename T , size_t max_size = unlimited_size>
template<typename Rep , typename Period >
T vulkan_display_detail::ConcurrentQueue< T, max_size >::timed_pop ( std::chrono::duration< Rep, Period > timeout)
inline

Definition at line 88 of file concurrent_queue.hpp.

88 {
89 std::unique_lock<std::mutex> lock{mutex};
90
91 queue_incremented_cv.wait_for(lock, timeout, [this]{return queue.size() > 0;});
92 if (queue.empty()){
93 return T{};
94 }
95 T result = std::move(queue.front());
96 queue.pop();
97
98 lock.unlock();
99 queue_decremented_cv.notify_one();
100 return result;
101 }

References vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_decremented_cv, and vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_incremented_cv.

◆ try_pop()

template<typename T , size_t max_size = unlimited_size>
T vulkan_display_detail::ConcurrentQueue< T, max_size >::try_pop ( )
inline

Definition at line 79 of file concurrent_queue.hpp.

79 {
80 return pop(true);
81 }

References vulkan_display_detail::ConcurrentQueue< T, max_size >::pop().

Here is the call graph for this function:

◆ try_push()

template<typename T , size_t max_size = unlimited_size>
bool vulkan_display_detail::ConcurrentQueue< T, max_size >::try_push ( T item)
inline

Definition at line 114 of file concurrent_queue.hpp.

114 {
115 std::unique_lock lock{mutex};
116 if (queue.size() >= max_size) {
117 return false;
118 }
119 push_and_unlock(lock, std::move(item));
120 return true;
121 }

References vulkan_display_detail::ConcurrentQueue< T, max_size >::push_and_unlock().

Here is the call graph for this function:

◆ wait_pop()

template<typename T , size_t max_size = unlimited_size>
T vulkan_display_detail::ConcurrentQueue< T, max_size >::wait_pop ( )
inline

Definition at line 83 of file concurrent_queue.hpp.

83 {
84 return pop(false);
85 }

References vulkan_display_detail::ConcurrentQueue< T, max_size >::pop().

Here is the call graph for this function:

◆ wait_push()

template<typename T , size_t max_size = unlimited_size>
void vulkan_display_detail::ConcurrentQueue< T, max_size >::wait_push ( T item)
inline

Definition at line 123 of file concurrent_queue.hpp.

123 {
124 std::unique_lock lock{mutex};
125 if (max_size != unlimited_size) {
126 queue_decremented_cv.wait(lock, [this]{return queue.size() < max_size;});
127 }
128 push_and_unlock(lock, std::move(item));
129 }
constexpr size_t unlimited_size

References vulkan_display_detail::ConcurrentQueue< T, max_size >::push_and_unlock(), vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_decremented_cv, and vulkan_display_detail::unlimited_size.

Here is the call graph for this function:

Member Data Documentation

◆ mutex

template<typename T , size_t max_size = unlimited_size>
std::mutex vulkan_display_detail::ConcurrentQueue< T, max_size >::mutex {}
mutableprivate

Definition at line 53 of file concurrent_queue.hpp.

53{};

◆ queue

template<typename T , size_t max_size = unlimited_size>
std::queue<T> vulkan_display_detail::ConcurrentQueue< T, max_size >::queue
private

Definition at line 52 of file concurrent_queue.hpp.

◆ queue_decremented_cv

template<typename T , size_t max_size = unlimited_size>
std::condition_variable vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_decremented_cv {}
private

◆ queue_incremented_cv

template<typename T , size_t max_size = unlimited_size>
std::condition_variable vulkan_display_detail::ConcurrentQueue< T, max_size >::queue_incremented_cv {}
private

The documentation for this class was generated from the following file: