DescriptionThis patch modifies the Queue class to allow subclasses to perform additional enqueue/dequeue/peek/remove operations which can manipulate any element in the queue (as required by WifiMacQueue). Now, the Queue class:
- defines a std::list<Ptr<Item>> (subclasses no longer define their own containers)
- has virtual public Enqueue/Dequeue/Peek/Remove methods that are undefined and must be defined by every subclass
- the only way subclasses have to manipulate the queue is through the following methods:
+ bool Queue<Item>::DoEnqueue (ConstIterator pos, Ptr<Item> item)
+ Ptr<Item> Queue<Item>::DoDequeue (ConstIterator pos)
+ Ptr<const Item> Queue<Item>::DoPeek (ConstIterator pos) const
+ Ptr<Item> Queue<Item>::DoRemove (ConstIterator pos)
Two protected methods (ConstIterator Head (void) const e ConstIterator Tail (void) const) are provided to allow subclasses to access any item in the queue. As an example:
template <typename Item>
bool
DropTailQueue<Item>::Enqueue (Ptr<Item> item)
{
NsLog (LOG_DEBUG, "Enqueue ", this, item);
return DoEnqueue (Tail (), item);
}
- subclasses can define additional public methods, as an example:
bool
WifiMacQueue::PushFront (Ptr<WifiMacQueueItem> item)
{
[...]
return DoEnqueue (Head (), item);
}
Patch Set 1 #Patch Set 2 : #Patch Set 3 : #
MessagesTotal messages: 3
|