proxygen
folly::PriorityMPMCQueue< T, Atom, Dynamic > Class Template Reference

#include <PriorityMPMCQueue.h>

Public Member Functions

 PriorityMPMCQueue (size_t numPriorities, size_t capacity)
 
size_t getNumPriorities ()
 
bool write (T &&item)
 
bool writeWithPriority (T &&item, size_t priority)
 
bool writeWithPriority (T &&item, size_t priority, std::chrono::milliseconds timeout)
 
bool read (T &item)
 
bool readWithPriority (T &item, size_t priority)
 
size_t size () const
 
size_t sizeGuess () const
 
bool isEmpty () const
 Returns true if there are no items available for dequeue. More...
 

Private Attributes

std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
 

Detailed Description

template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
class folly::PriorityMPMCQueue< T, Atom, Dynamic >

PriorityMPMCQueue is a thin wrapper on MPMCQueue, providing priorities by managing multiple underlying MPMCQueues. As of now, this does not implement a blocking interface. For the purposes of this class, lower number is higher priority

Definition at line 35 of file PriorityMPMCQueue.h.

Constructor & Destructor Documentation

template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
folly::PriorityMPMCQueue< T, Atom, Dynamic >::PriorityMPMCQueue ( size_t  numPriorities,
size_t  capacity 
)
inline

Definition at line 37 of file PriorityMPMCQueue.h.

References i, and folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

37  {
38  CHECK_GT(numPriorities, 0);
39  queues_.reserve(numPriorities);
40  for (size_t i = 0; i < numPriorities; i++) {
41  queues_.emplace_back(capacity);
42  }
43  }
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_

Member Function Documentation

template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
size_t folly::PriorityMPMCQueue< T, Atom, Dynamic >::getNumPriorities ( )
inline

Definition at line 45 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

Referenced by TEST(), folly::PriorityMPMCQueue< T, Atom, Dynamic >::write(), and folly::PriorityMPMCQueue< T, Atom, Dynamic >::writeWithPriority().

45  {
46  return queues_.size();
47  }
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
bool folly::PriorityMPMCQueue< T, Atom, Dynamic >::isEmpty ( ) const
inline

Returns true if there are no items available for dequeue.

Definition at line 106 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::size().

Referenced by TEST().

106  {
107  return size() == 0;
108  }
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
bool folly::PriorityMPMCQueue< T, Atom, Dynamic >::read ( T item)
inline

Definition at line 70 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

Referenced by TEST().

70  {
71  for (auto& q : queues_) {
72  if (q.readIfNotEmpty(item)) {
73  return true;
74  }
75  }
76  return false;
77  }
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
bool folly::PriorityMPMCQueue< T, Atom, Dynamic >::readWithPriority ( T item,
size_t  priority 
)
inline

Definition at line 79 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

Referenced by TEST().

79  {
80  return queues_[priority].readIfNotEmpty(item);
81  }
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
size_t folly::PriorityMPMCQueue< T, Atom, Dynamic >::size ( ) const
inline

Definition at line 83 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

Referenced by folly::PriorityMPMCQueue< T, Atom, Dynamic >::isEmpty(), and TEST().

83  {
84  size_t total_size = 0;
85  for (auto& q : queues_) {
86  // MPMCQueue can have a negative size if there are pending readers.
87  // Since we don't expose a blocking interface this shouldn't happen,
88  // But just in case we put a floor at 0
89  total_size += std::max<ssize_t>(0, q.size());
90  }
91  return total_size;
92  }
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
size_t folly::PriorityMPMCQueue< T, Atom, Dynamic >::sizeGuess ( ) const
inline

Definition at line 94 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

Referenced by TEST().

94  {
95  size_t total_size = 0;
96  for (auto& q : queues_) {
97  // MPMCQueue can have a negative size if there are pending readers.
98  // Since we don't expose a blocking interface this shouldn't happen,
99  // But just in case we put a floor at 0
100  total_size += std::max<ssize_t>(0, q.sizeGuess());
101  }
102  return total_size;
103  }
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
bool folly::PriorityMPMCQueue< T, Atom, Dynamic >::write ( T &&  item)
inline

Definition at line 50 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::getNumPriorities(), folly::gen::move, and folly::PriorityMPMCQueue< T, Atom, Dynamic >::writeWithPriority().

Referenced by TEST().

50  {
51  return writeWithPriority(std::move(item), getNumPriorities() / 2);
52  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
bool writeWithPriority(T &&item, size_t priority)
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
bool folly::PriorityMPMCQueue< T, Atom, Dynamic >::writeWithPriority ( T &&  item,
size_t  priority 
)
inline

Definition at line 54 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::getNumPriorities(), min, folly::gen::move, and folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

Referenced by TEST(), and folly::PriorityMPMCQueue< T, Atom, Dynamic >::write().

54  {
55  size_t queue = std::min(getNumPriorities() - 1, priority);
56  CHECK_LT(queue, queues_.size());
57  return queues_.at(queue).write(std::move(item));
58  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
LogLevel min
Definition: LogLevel.cpp:30
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_
template<typename T, template< typename > class Atom = std::atomic, bool Dynamic = false>
bool folly::PriorityMPMCQueue< T, Atom, Dynamic >::writeWithPriority ( T &&  item,
size_t  priority,
std::chrono::milliseconds  timeout 
)
inline

Definition at line 60 of file PriorityMPMCQueue.h.

References folly::PriorityMPMCQueue< T, Atom, Dynamic >::getNumPriorities(), min, folly::gen::move, now(), and folly::PriorityMPMCQueue< T, Atom, Dynamic >::queues_.

63  {
64  size_t queue = std::min(getNumPriorities() - 1, priority);
65  CHECK_LT(queue, queues_.size());
66  return queues_.at(queue).tryWriteUntil(
67  std::chrono::steady_clock::now() + timeout, std::move(item));
68  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
std::chrono::steady_clock::time_point now()
LogLevel min
Definition: LogLevel.cpp:30
std::vector< folly::MPMCQueue< T, Atom, Dynamic > > queues_

Member Data Documentation


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