Vowpal Wabbit
Public Member Functions | Private Attributes | List of all members
VW::ptr_queue< T > Class Template Reference

#include <queue.h>

Public Member Functions

 ptr_queue (size_t max_size)
 
T * pop ()
 
void push (T *item)
 
void set_done ()
 
size_t size () const
 

Private Attributes

size_t max_size
 
std::queue< T * > object_queue
 
std::mutex mut
 
bool done = false
 
std::condition_variable is_not_full
 
std::condition_variable is_not_empty
 

Detailed Description

template<typename T>
class VW::ptr_queue< T >

Definition at line 22 of file queue.h.

Constructor & Destructor Documentation

◆ ptr_queue()

template<typename T>
VW::ptr_queue< T >::ptr_queue ( size_t  max_size)
inline

Definition at line 25 of file queue.h.

25 : max_size(max_size) {}
size_t max_size
Definition: queue.h:73

Member Function Documentation

◆ pop()

template<typename T>
T* VW::ptr_queue< T >::pop ( )
inline

Definition at line 27 of file queue.h.

Referenced by free_parser(), and VW::get_example().

28  {
29  std::unique_lock<std::mutex> lock(mut);
30  while (!done && object_queue.size() == 0)
31  {
32  is_not_empty.wait(lock);
33  }
34 
35  if (done && object_queue.size() == 0)
36  {
37  return nullptr;
38  }
39 
40  auto item = object_queue.front();
41  object_queue.pop();
42 
43  lock.unlock();
44  is_not_full.notify_all();
45  return item;
46  }
bool done
Definition: queue.h:77
std::condition_variable is_not_full
Definition: queue.h:79
std::queue< T * > object_queue
Definition: queue.h:74
std::mutex mut
Definition: queue.h:75
std::condition_variable is_not_empty
Definition: queue.h:80

◆ push()

template<typename T>
void VW::ptr_queue< T >::push ( T *  item)
inline

Definition at line 48 of file queue.h.

Referenced by thread_dispatch().

49  {
50  std::unique_lock<std::mutex> lock(mut);
51  while (object_queue.size() == max_size)
52  {
53  is_not_full.wait(lock);
54  }
55 
56  object_queue.push(item);
57 
58  lock.unlock();
59  is_not_empty.notify_all();
60  }
std::condition_variable is_not_full
Definition: queue.h:79
std::queue< T * > object_queue
Definition: queue.h:74
std::mutex mut
Definition: queue.h:75
size_t max_size
Definition: queue.h:73
std::condition_variable is_not_empty
Definition: queue.h:80

◆ set_done()

template<typename T>
void VW::ptr_queue< T >::set_done ( )
inline

Definition at line 62 of file queue.h.

Referenced by lock_done().

63  {
64  done = true;
65 
66  is_not_empty.notify_all();
67  is_not_full.notify_all();
68  }
bool done
Definition: queue.h:77
std::condition_variable is_not_full
Definition: queue.h:79
std::condition_variable is_not_empty
Definition: queue.h:80

◆ size()

template<typename T>
size_t VW::ptr_queue< T >::size ( ) const
inline

Definition at line 70 of file queue.h.

Referenced by free_parser(), and reset_source().

70 { return object_queue.size(); }
std::queue< T * > object_queue
Definition: queue.h:74

Member Data Documentation

◆ done

template<typename T>
bool VW::ptr_queue< T >::done = false
private

Definition at line 77 of file queue.h.

Referenced by VW::ptr_queue< example >::pop(), and VW::ptr_queue< example >::set_done().

◆ is_not_empty

template<typename T>
std::condition_variable VW::ptr_queue< T >::is_not_empty
private

◆ is_not_full

template<typename T>
std::condition_variable VW::ptr_queue< T >::is_not_full
private

◆ max_size

template<typename T>
size_t VW::ptr_queue< T >::max_size
private

Definition at line 73 of file queue.h.

Referenced by VW::ptr_queue< example >::push().

◆ mut

template<typename T>
std::mutex VW::ptr_queue< T >::mut
private

Definition at line 75 of file queue.h.

Referenced by VW::ptr_queue< example >::pop(), and VW::ptr_queue< example >::push().

◆ object_queue

template<typename T>
std::queue<T*> VW::ptr_queue< T >::object_queue
private

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