
#include <msgq.h>

Public Types | |
| typedef P | prio_t | 
| The datatype for msg priorities.   | |
| typedef P | prio_t | 
Public Member Functions | |
| msgQ () | |
| Hardly any initialization required.   | |
| void | enq (const msg_t *msg, const prio_t &prio=prio_t(), const bool isFifo=true) | 
| Given a message (optionally with a priority and queuing policy), enqueue it for delivery.   | |
| const msg_t * | deq () | 
| Pop (and return) the next message to deliver.   | |
| size_t | size () const | 
| Number of messages in the queue.   | |
| size_t | max_size () const | 
| bool | empty () const | 
| Is the queue empty?   | |
| void | enumerate (msg_t **first, msg_t **last) const | 
| Just so that we can support CqsEnumerateQueue().   | |
| msgQ () | |
| size_t | size () const | 
| size_t | max_size () const | 
| bool | empty () const | 
| void | enumerate (msg_t **first, msg_t **last) const | 
| void | enq (const msg_t *msg, const prio_t &prio=prio_t(), const bool isFifo=true) | 
| const msg_t * | deq () | 
Private Types | |
| typedef std::deque< const msg_t * > | bkt_t | 
| Message bucket type.   | |
| typedef std::pair< prio_t,  bkt_t * >  | prioidx_t | 
| A key-val pair of a priority value and a handle to the bucket of msgs of that priority.   | |
| typedef std::unordered_map < prio_t, bkt_t >  | bktmap_t | 
| A type for mapping between priority values and msg buckets.   | |
Private Attributes | |
| std::vector< const msg_t * > | randQ | 
| All the messages go in one bin when we're picking them out randomly.   | |
| size_t | qSize | 
| The size of this message queue.   | |
| bktmap_t | msgbuckets | 
| Collection of msg buckets, each holding msgs of a given priority (maps priorities to buckets).   | |
| std::priority_queue< prioidx_t,  std::vector< prioidx_t > , std::greater< prioidx_t > >  | prioQ | 
| A _min_ heap of distinct msg priorities along with handles to matching buckets.   | |
| std::deque< const msg_t * > | bkt | 
Friends | |
| std::ostream & | operator<< (std::ostream &out, const msgQ &q) | 
| An ostream operator overload, that currently just prints q size.   | |
| std::ostream & | operator<< (std::ostream &out, const msgQ &q) | 
Templated on the type of the priority field. Defaults to int priority. All scheduling policies are encapsulated behind this queue interface.
All messages of a given priority p are stored in a single container. Since each message can be enqueued either to the front or back of this container, a dequeue is used. Each such dequeue is referred to as a bucket. The set of priority values of all the messages in the container is stored in a min-heap. A deq() operation simply peeks at the most important prio value, and finds the bucket associated with that value. It then dequeues the message at the front of this bucket. A mapping between the priority values and the corresponding buckets is maintained. enq() operations simply find the bucket corresponding to a prio value and place the msg into it.
Definition at line 37 of file msgq.h.
| typedef P conv::msgQ< P >::prio_t | 
typedef std::deque<const msg_t*> conv::msgQ< P >::bkt_t [private]           | 
        
typedef std::pair<prio_t, bkt_t*> conv::msgQ< P >::prioidx_t [private]           | 
        
typedef std::unordered_map<prio_t, bkt_t> conv::msgQ< P >::bktmap_t [private]           | 
        
| typedef P conv::msgQ< P >::prio_t | 
| conv::msgQ< P >::msgQ | ( | ) |  [inline] | 
        
| conv::msgQ< P >::msgQ | ( | ) |  [inline] | 
        
| void conv::msgQ< P >::enq | ( | const msg_t * | msg, | |
| const prio_t & |  prio = prio_t(),  | 
        |||
| const bool |  isFifo = true | |||
| ) |  [inline] | 
        
Given a message (optionally with a priority and queuing policy), enqueue it for delivery.
Definition at line 94 of file msgq.h.
References conv::msgQ< P >::bkt, conv::msgQ< P >::msgbuckets, conv::msgQ< P >::prioQ, conv::msgQ< P >::qSize, and conv::msgQ< P >::randQ.
| const msg_t * conv::msgQ< P >::deq | ( | void | ) |  [inline] | 
        
Pop (and return) the next message to deliver.
For detecting races, and for a general check that applications dont depend on priorities or message ordering for correctness, charm can be built with a randomized scheduler queue.
In this case, this container's deq() operation will not actually respect priorities. Instead it simply returns a randomly selected msg.
Definition at line 140 of file msgq.h.
References conv::msgQ< P >::bkt, conv::msgQ< P >::empty(), msg, conv::msgQ< P >::msgbuckets, conv::msgQ< P >::prioQ, and conv::msgQ< P >::qSize.

| size_t conv::msgQ< P >::size | ( | void | ) |  const [inline] | 
        
Number of messages in the queue.
Definition at line 53 of file msgq.h.
References conv::msgQ< P >::qSize.
Referenced by CqsEnumerateQueue().

| size_t conv::msgQ< P >::max_size | ( | ) |  const [inline] | 
        
| bool conv::msgQ< P >::empty | ( | ) |  const [inline] | 
        
Is the queue empty?
Definition at line 57 of file msgq.h.
References conv::msgQ< P >::qSize.
Referenced by conv::msgQ< P >::deq().

| void conv::msgQ< P >::enumerate | ( | msg_t ** | first, | |
| msg_t ** | last | |||
| ) |  const [inline] | 
        
Just so that we can support CqsEnumerateQueue().
Definition at line 196 of file msgq.h.
References conv::msgQ< P >::msgbuckets, and conv::msgQ< P >::randQ.
Referenced by CqsEnumerateQueue().

| size_t conv::msgQ< P >::size | ( | void | ) |  const [inline] | 
        
| size_t conv::msgQ< P >::max_size | ( | ) |  const [inline] | 
        
| bool conv::msgQ< P >::empty | ( | ) |  const [inline] | 
        
| void conv::msgQ< P >::enumerate | ( | msg_t ** | first, | |
| msg_t ** | last | |||
| ) |  const [inline] | 
        
| void conv::msgQ< P >::enq | ( | const msg_t * | msg, | |
| const prio_t & |  prio = prio_t(),  | 
        |||
| const bool |  isFifo = true | |||
| ) |  [inline] | 
        
| const msg_t* conv::msgQ< P >::deq | ( | void | ) |  [inline] | 
        
| std::ostream& operator<< | ( | std::ostream & | out, | |
| const msgQ< P > & | q | |||
| ) |  [friend] | 
        
| std::ostream& operator<< | ( | std::ostream & | out, | |
| const msgQ< P > & | q | |||
| ) |  [friend] | 
        
std::vector<const msg_t*> conv::msgQ< P >::randQ [private]           | 
        
All the messages go in one bin when we're picking them out randomly.
Definition at line 73 of file msgq.h.
Referenced by conv::msgQ< P >::enq(), and conv::msgQ< P >::enumerate().
size_t conv::msgQ< P >::qSize [private]           | 
        
The size of this message queue.
Definition at line 84 of file msgq.h.
Referenced by conv::msgQ< P >::deq(), conv::msgQ< P >::empty(), conv::msgQ< P >::enq(), and conv::msgQ< P >::size().
bktmap_t conv::msgQ< P >::msgbuckets [private]           | 
        
Collection of msg buckets, each holding msgs of a given priority (maps priorities to buckets).
Definition at line 86 of file msgq.h.
Referenced by conv::msgQ< P >::deq(), conv::msgQ< P >::enq(), and conv::msgQ< P >::enumerate().
std::priority_queue<prioidx_t, std::vector<prioidx_t>, std::greater<prioidx_t> > conv::msgQ< P >::prioQ [private]           | 
        
A _min_ heap of distinct msg priorities along with handles to matching buckets.
Definition at line 88 of file msgq.h.
Referenced by conv::msgQ< P >::deq(), and conv::msgQ< P >::enq().
std::deque<const msg_t*> conv::msgQ< P >::bkt [private]           | 
        
Definition at line 243 of file msgq.h.
Referenced by conv::msgQ< P >::deq(), conv::msgQ< P >::empty(), conv::msgQ< P >::enq(), conv::msgQ< P >::max_size(), and conv::msgQ< P >::size().
 1.5.5