CAF  0.17.3
Public Types | Public Member Functions | List of all members
caf::intrusive::drr_queue< Policy > Class Template Reference

A Deficit Round Robin queue. More...

#include <drr_queue.hpp>

Inheritance diagram for caf::intrusive::drr_queue< Policy >:
caf::intrusive::task_queue< Policy >

Public Types

using super = task_queue< Policy >
 
using deficit_type = typename policy_type::deficit_type
 
using policy_type = Policy
 
using unique_pointer = typename policy_type::unique_pointer
 
using value_type = typename policy_type::mapped_type
 
- Public Types inherited from caf::intrusive::task_queue< Policy >
using policy_type = Policy
 
using value_type = typename policy_type::mapped_type
 
using node_type = typename value_type::node_type
 
using node_pointer = node_type *
 
using pointer = value_type *
 
using const_pointer = const value_type *
 
using reference = value_type &
 
using const_reference = const value_type &
 
using unique_pointer = typename policy_type::unique_pointer
 
using task_size_type = typename policy_type::task_size_type
 
using iterator = forward_iterator< value_type >
 
using const_iterator = forward_iterator< const value_type >
 

Public Member Functions

 drr_queue (policy_type p)
 
 drr_queue (drr_queue &&other)
 
drr_queueoperator= (drr_queue &&other)
 
deficit_type deficit () const
 
void inc_deficit (deficit_type x) noexcept
 
void flush_cache () const noexcept
 
template<class F >
bool consume (F &f) noexcept(noexcept(f(std::declval< value_type & >())))
 Consumes items from the queue until the queue is empty or there is not enough deficit to dequeue the next task. More...
 
template<class F >
new_round_result new_round (deficit_type quantum, F &consumer)
 Run a new round with quantum, dispatching all tasks to consumer. More...
 
- Public Member Functions inherited from caf::intrusive::task_queue< Policy >
 task_queue (policy_type p)
 
 task_queue (task_queue &&other)
 
task_queueoperator= (task_queue &&other)
 
policy_type & policy () noexcept
 Returns the policy object.
 
const policy_type & policy () const noexcept
 Returns the policy object.
 
task_size_type total_task_size () const noexcept
 Returns the accumulated size of all stored tasks.
 
bool empty () const noexcept
 Returns whether the queue has no elements.
 
pointer peek () noexcept
 Peeks at the first element in the queue. More...
 
template<class F >
void peek_all (F f) const
 Applies f to each element in the queue.
 
void clear ()
 Removes all elements from the queue.
 
iterator begin () noexcept
 Returns an iterator to the dummy before the first element.
 
const_iterator begin () const noexcept
 Returns an iterator to the dummy before the first element.
 
const_iterator cbegin () const noexcept
 Returns an iterator to the dummy before the first element.
 
iterator end () noexcept
 Returns a pointer to the dummy past the last element.
 
const_iterator end () const noexcept
 Returns a pointer to the dummy past the last element.
 
const_iterator cend () const noexcept
 Returns a pointer to the dummy past the last element.
 
pointer front () noexcept
 Returns a pointer to the first element.
 
pointer back () noexcept
 Returns a pointer to the last element.
 
bool push_back (pointer ptr) noexcept
 Appends ptr to the queue. More...
 
bool push_back (unique_pointer ptr) noexcept
 Appends ptr to the queue. More...
 
template<class... Ts>
bool emplace_back (Ts &&... xs)
 Creates a new element from xs... and appends it.
 
template<class Container >
void prepend (Container &other)
 Transfers all element from other to the front of this queue.
 
template<class Container >
void append (Container &other)
 Transfers all element from other to the back of this queue.
 

Additional Inherited Members

- Static Public Member Functions inherited from caf::intrusive::task_queue< Policy >
static pointer promote (node_pointer ptr) noexcept
 Casts a node type to its value type.
 
- Protected Attributes inherited from caf::intrusive::task_queue< Policy >
node_type head_
 node element pointing to the first element.
 
node_type tail_
 node element pointing past the last element.
 
task_size_type total_task_size_
 Stores the total size of all items in the queue.
 
node_pointer old_last_
 Used for LIFO -> FIFO insertion.
 
node_pointer new_head_
 Used for LIFO -> FIFO insertion.
 
policy_type policy_
 Manipulates instances of T.
 

Detailed Description

template<class Policy>
class caf::intrusive::drr_queue< Policy >

A Deficit Round Robin queue.

Member Function Documentation

◆ consume()

template<class Policy >
template<class F >
bool caf::intrusive::drr_queue< Policy >::consume ( F &  f)
noexcept

Consumes items from the queue until the queue is empty or there is not enough deficit to dequeue the next task.

Returns
true if f consumed at least one item.

◆ new_round()

template<class Policy >
template<class F >
new_round_result caf::intrusive::drr_queue< Policy >::new_round ( deficit_type  quantum,
F &  consumer 
)

Run a new round with quantum, dispatching all tasks to consumer.

Returns
true if at least one item was consumed, false otherwise.

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