#include <tbb/concurrent_queue.h>
-#include <boost/foreach.hpp>
#include <boost/thread/mutex.hpp>
#include "semaphore.h"
public:
typedef unsigned int size_type;
private:
- std::map<Prio, tbb::concurrent_queue<T>, std::greater<Prio>> queues_by_priority_;
- semaphore space_available_;
- semaphore elements_available_;
- mutable boost::mutex capacity_mutex_;
- size_type capacity_;
+ std::map<Prio, tbb::concurrent_queue<T>, std::greater<Prio>> queues_by_priority_;
+ size_type capacity_;
+ semaphore space_available_ { capacity_ };
+ semaphore elements_available_ { 0u };
+ mutable boost::mutex capacity_mutex_;
public:
/**
* Constructor.
*/
template<class PrioList>
blocking_priority_queue(size_type capacity, const PrioList& priorities)
- : space_available_(capacity)
- , elements_available_(0u)
- , capacity_(capacity)
+ : capacity_(capacity)
{
- BOOST_FOREACH(Prio priority, priorities)
+ for (Prio priority : priorities)
{
queues_by_priority_.insert(std::make_pair(priority, tbb::concurrent_queue<T>()));
}
acquire_transaction transaction(elements_available_, true);
- BOOST_FOREACH(auto& queue, queues_by_priority_)
+ for (auto& queue : queues_by_priority_)
{
if (queue.first < minimum_priority)
{
void pop_acquired_any_priority(T& element, acquire_transaction& transaction)
{
- BOOST_FOREACH(auto& queue, queues_by_priority_)
+ for (auto& queue : queues_by_priority_)
{
if (queue.second.try_pop(element))
{