XRootD
XrdEc::sync_queue< Element > Struct Template Reference

#include <XrdEcUtilities.hh>

+ Collaboration diagram for XrdEc::sync_queue< Element >:

Classes

struct  wait_interrupted
 

Public Member Functions

 sync_queue ()
 
Element dequeue ()
 
bool dequeue (Element &e)
 
bool empty ()
 
void enqueue (Element &&element)
 
void interrupt ()
 

Detailed Description

template<typename Element>
struct XrdEc::sync_queue< Element >

Definition at line 168 of file XrdEcUtilities.hh.


Class Documentation

◆ XrdEc::sync_queue::wait_interrupted

struct XrdEc::sync_queue::wait_interrupted

template<typename Element>
struct XrdEc::sync_queue< Element >::wait_interrupted

Definition at line 173 of file XrdEcUtilities.hh.

+ Collaboration diagram for XrdEc::sync_queue< Element >::wait_interrupted:

Constructor & Destructor Documentation

◆ sync_queue()

template<typename Element >
XrdEc::sync_queue< Element >::sync_queue ( )
inline

Definition at line 178 of file XrdEcUtilities.hh.

178  : interrupted( false )
179  {
180  }

Member Function Documentation

◆ dequeue() [1/2]

template<typename Element >
Element XrdEc::sync_queue< Element >::dequeue ( )
inline

Definition at line 196 of file XrdEcUtilities.hh.

197  {
198  std::unique_lock<std::mutex> lck( mtx );
199  while( elements.empty() )
200  {
201  cv.wait( lck );
202  if( interrupted ) throw wait_interrupted();
203  }
204  Element element = std::move( elements.front() );
205  elements.pop();
206  return element;
207  }

◆ dequeue() [2/2]

template<typename Element >
bool XrdEc::sync_queue< Element >::dequeue ( Element &  e)
inline

Definition at line 213 of file XrdEcUtilities.hh.

214  {
215  std::unique_lock<std::mutex> lck( mtx );
216  if( elements.empty() ) return false;
217  e = std::move( elements.front() );
218  elements.pop();
219  return true;
220  }

◆ empty()

template<typename Element >
bool XrdEc::sync_queue< Element >::empty ( )
inline

Definition at line 225 of file XrdEcUtilities.hh.

226  {
227  std::unique_lock<std::mutex> lck( mtx );
228  return elements.empty();
229  }

◆ enqueue()

template<typename Element >
void XrdEc::sync_queue< Element >::enqueue ( Element &&  element)
inline

Definition at line 185 of file XrdEcUtilities.hh.

186  {
187  std::unique_lock<std::mutex> lck( mtx );
188  elements.push( std::move( element ) );
189  cv.notify_all();
190  }

◆ interrupt()

template<typename Element >
void XrdEc::sync_queue< Element >::interrupt ( )
inline

Definition at line 234 of file XrdEcUtilities.hh.

235  {
236  interrupted = true;
237  cv.notify_all();
238  }

Referenced by XrdEc::StrmWriter::~StrmWriter().

+ Here is the caller graph for this function:

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