24 #include <glog/logging.h> 28 template <
class T, QueueBehaviorIfFull kBehavior = QueueBehaviorIfFull::THROW>
36 for (
int8_t i = 0;
i < numPriorities;
i++) {
37 queues_.emplace_back(max_capacity);
42 CHECK_LT(capacities.
size(), 256) <<
"At most 255 priorities supported";
45 for (
auto capacity : capacities) {
61 size_t queue = priority < 0
64 CHECK_LT(queue,
queues_.size());
102 if (it->readIfNotEmpty(item)) {
120 size += q.sizeGuess();
void write(const T &in, folly::io::Appender &appender)
BlockingQueueAddResult add(T item) override
static const int8_t MID_PRI
constexpr detail::Map< Move > move
bool post()
Silently saturates if value is already 2^32-1.
constexpr size_type size() const
std::vector< folly::MPMCQueue< T > > queues_
—— Concurrent Priority Queue Implementation ——
PriorityLifoSemMPMCQueue(uint8_t numPriorities, size_t max_capacity)
PriorityLifoSemMPMCQueue(folly::Range< const size_t * > capacities)
folly::Optional< T > try_take_for(std::chrono::milliseconds time) override
bool try_wait_for(const std::chrono::duration< Rep, Period > &timeout)
uint8_t getNumPriorities() override
bool nonBlockingTake(T &item)
BlockingQueueAddResult addWithPriority(T item, int8_t priority) override
std::chrono::nanoseconds time()