Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

PacketQueue Class Reference

#include <queue.h>

Inheritance diagram for PacketQueue:

Inheritance graph
[legend]
Collaboration diagram for PacketQueue:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 PacketQueue ()
virtual int length () const
virtual int byteLength () const
virtual Packetenque (Packet *p)
virtual Packetdeque ()
Packetlookup (int n)
virtual void remove (Packet *)
void remove (Packet *, Packet *)
Packethead ()
Packettail ()
virtual void enqueHead (Packet *p)
void resetIterator ()
PacketgetNext ()

Protected Attributes

Packethead_
Packettail_
int len_
int bytes_

Private Attributes

Packetiter

Constructor & Destructor Documentation

PacketQueue::PacketQueue  )  [inline]
 

Definition at line 47 of file queue.h.

References bytes_, head_, len_, and tail_.

00047 : head_(0), tail_(0), len_(0), bytes_(0) {}


Member Function Documentation

virtual int PacketQueue::byteLength  )  const [inline, virtual]
 

Definition at line 49 of file queue.h.

References bytes_.

Referenced by REDQueue::bcount_(), Queue< T >::byteLength(), PIQueue::calculate_p(), REDQueue::deque(), PIQueue::deque(), DropTail::deque(), REDQueue::drop_early(), RIOQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PushbackQueue::enque(), PIQueue::enque(), and DropTail::enque().

00049 { return (bytes_); }

virtual Packet* PacketQueue::deque void   )  [inline, virtual]
 

Reimplemented in SemanticPacketQueue.

Definition at line 62 of file queue.h.

References hdr_cmn::access(), bytes_, head_, len_, Packet::next_, hdr_cmn::size(), and tail_.

Referenced by imepAgent::aggregateAckBlock(), imepAgent::aggregateHelloBlock(), imepAgent::aggregateObjectBlock(), Vq::deque(), SimpleIntServ::deque(), SFQ::deque(), SemanticPacketQueue::deque(), REMQueue::deque(), REDQueue::deque(), PIQueue::deque(), Marker::deque(), JoBS::deque(), GK::deque(), redQueue::deque(), DRR::deque(), DropTail::deque(), Demarker::deque(), SemanticPacketQueue::deque_acksfirst(), GK::enque(), DRR::enque(), DropTail::enque(), DSDV_Agent::forwardPacket(), LinkDelay::handle(), DSDV_Agent::processUpdate(), remove(), LinkDelay::reset(), and TBF::timeout().

00062                                 {
00063                 if (!head_) return 0;
00064                 Packet* p = head_;
00065                 head_= p->next_; // 0 if p == tail_
00066                 if (p == tail_) head_= tail_= 0;
00067                 --len_;
00068                 bytes_ -= hdr_cmn::access(p)->size();
00069                 return p;
00070         }

Here is the call graph for this function:

virtual Packet* PacketQueue::enque Packet p  )  [inline, virtual]
 

Reimplemented in SemanticPacketQueue.

Definition at line 50 of file queue.h.

References hdr_cmn::access(), bytes_, head_, len_, Packet::next_, hdr_cmn::size(), and tail_.

Referenced by Vq::enque(), SimpleIntServ::enque(), SFQ::enque(), SemanticPacketQueue::enque(), RIOQueue::enque(), REDQueue::enque(), PIQueue::enque(), Marker::enque(), JoBS::enque(), GK::enque(), redQueue::enque(), DRR::enque(), DropTail::enque(), Demarker::enque(), SemanticPacketQueue::enque_head(), DSDV_Agent::forwardPacket(), TBF::recv(), LinkDelay::recv(), imepAgent::recv_outgoing(), imepAgent::sendAck(), and imepAgent::sendHello().

00050                                          { // Returns previous tail
00051                 Packet* pt = tail_;
00052                 if (!tail_) head_= tail_= p;
00053                 else {
00054                         tail_->next_= p;
00055                         tail_= p;
00056                 }
00057                 tail_->next_= 0;
00058                 ++len_;
00059                 bytes_ += hdr_cmn::access(p)->size();
00060                 return pt;
00061         }

Here is the call graph for this function:

virtual void PacketQueue::enqueHead Packet p  )  [inline, virtual]
 

Definition at line 85 of file queue.h.

References hdr_cmn::access(), bytes_, head_, len_, Packet::next_, hdr_cmn::size(), and tail_.

Referenced by imepAgent::aggregateObjectBlock(), PushbackQueue::enque(), and PriQueue::recvHighPriority().

00085                                                  {
00086                 if (!head_) tail_ = p;
00087                 p->next_ = head_;
00088                 head_ = p;
00089                 ++len_;
00090                 bytes_ += hdr_cmn::access(p)->size();
00091         }

Here is the call graph for this function:

Packet* PacketQueue::getNext  )  [inline]
 

Definition at line 93 of file queue.h.

References iter, and Packet::next_.

00093                           { 
00094                 if (!iter) return 0;
00095                 Packet *tmp = iter; iter = iter->next_;
00096                 return tmp;
00097         }

Packet* PacketQueue::head  )  [inline]
 

Reimplemented in SemanticPacketQueue.

Definition at line 82 of file queue.h.

References head_.

Referenced by JoBS::adjustRatesRDC(), JoBS::arvAccounting(), JoBS::assignRateDropsADC(), JoBS::deque(), Vq::dropPacketForECN(), JoBS::enforceWC(), Vq::enque(), PriQueue::filter(), Vq::markPacketForECN(), JoBS::minRatesNeeded(), JoBS::pickDroppedRLC(), JoBS::projDelay(), TBF::timeout(), JoBS::updateError(), and TBF::~TBF().

00082 { return head_; }

virtual int PacketQueue::length  )  const [inline, virtual]
 

Definition at line 48 of file queue.h.

References len_.

Referenced by imepAgent::aggregateAckBlock(), imepAgent::aggregateHelloBlock(), imepAgent::aggregateObjectBlock(), redQueue::calcAvg(), PIQueue::calculate_p(), Vq::deque(), SimpleIntServ::deque(), REMQueue::deque(), REDQueue::deque(), PIQueue::deque(), GK::deque(), DropTail::deque(), SemanticPacketQueue::deque_acksfirst(), REDQueue::drop_early(), Vq::dropPacketForECN(), Vq::enque(), SimpleIntServ::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PushbackQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), redQueue::enque(), DropTail::enque(), Demarker::enque(), PriQueue::filter(), DSDV_Agent::forwardPacket(), redQueue::getRealLength(), imepAgent::handlerBeaconTimer(), imepAgent::handlerControlTimer(), Queue< T >::length(), SemanticPacketQueue::pickPacketForECN(), SemanticPacketQueue::pickPacketToDrop(), REDQueue::pickPacketToDrop(), PIQueue::pickPacketToDrop(), LinkDelay::pktintran(), TBF::recv(), PriQueue::recvHighPriority(), LinkDelay::reset(), TBF::timeout(), and TBF::~TBF().

00048 { return (len_); }

Packet* PacketQueue::lookup int  n  )  [inline]
 

Definition at line 71 of file queue.h.

References head_, and Packet::next_.

Referenced by DRR::deque(), PriQueue::filter(), SemanticPacketQueue::pickPacketForECN(), SemanticPacketQueue::pickPacketToDrop(), REDQueue::pickPacketToDrop(), PIQueue::pickPacketToDrop(), LinkDelay::pktintran(), and PriQueue::recvHighPriority().

00071                               {
00072                 for (Packet* p = head_; p != 0; p = p->next_) {
00073                         if (--n < 0)
00074                                 return (p);
00075                 }
00076                 return (0);
00077         }

void PacketQueue::remove Packet ,
Packet
 

Reimplemented in SemanticPacketQueue.

Definition at line 67 of file queue.cc.

References hdr_cmn::access(), bytes_, deque(), head_, len_, Packet::next_, hdr_cmn::size(), and tail_.

00067                                                        : screwy
00068 {
00069         if (pkt) {
00070                 if (head_ == pkt)
00071                         PacketQueue::deque(); /* decrements len_ internally */
00072                 else {
00073                         prev->next_ = pkt->next_;
00074                         if (tail_ == pkt)
00075                                 tail_ = prev;
00076                         --len_;
00077                         bytes_ -= hdr_cmn::access(pkt)->size();
00078                 }
00079         }
00080         return;
00081 }

Here is the call graph for this function:

void PacketQueue::remove Packet  )  [virtual]
 

Reimplemented in SemanticPacketQueue.

Definition at line 44 of file queue.cc.

References abort(), hdr_cmn::access(), bytes_, deque(), head_, len_, Packet::next_, hdr_cmn::size(), and tail_.

Referenced by SemanticPacketQueue::deque_acksfirst(), Vq::dropPacketForECN(), Vq::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), Demarker::enque(), PriQueue::filter(), SemanticPacketQueue::filterAcks(), PriQueue::recvHighPriority(), and SemanticPacketQueue::remove().

00045 {
00046         for (Packet *pp= 0, *p= head_; p; pp= p, p= p->next_) {
00047                 if (p == target) {
00048                         if (!pp) deque();
00049                         else {
00050                                 if (p == tail_) 
00051                                         tail_= pp;
00052                                 pp->next_= p->next_;
00053                                 --len_;
00054                                 bytes_ -= hdr_cmn::access(p)->size();
00055                         }
00056                         return;
00057                 }
00058         }
00059         fprintf(stderr, "PacketQueue:: remove() couldn't find target\n");
00060         abort();
00061 }

Here is the call graph for this function:

void PacketQueue::resetIterator  )  [inline]
 

Definition at line 92 of file queue.h.

References head_, and iter.

00092 {iter = head_;}

Packet* PacketQueue::tail  )  [inline]
 

Definition at line 83 of file queue.h.

References tail_.

00083 { return tail_; }


Member Data Documentation

int PacketQueue::bytes_ [protected]
 

Definition at line 103 of file queue.h.

Referenced by byteLength(), deque(), enque(), enqueHead(), PacketQueue(), and remove().

Packet* PacketQueue::head_ [protected]
 

Definition at line 100 of file queue.h.

Referenced by deque(), SemanticPacketQueue::deque_acksfirst(), enque(), SemanticPacketQueue::enque_head(), enqueHead(), SemanticPacketQueue::head(), head(), SemanticPacketQueue::lookup(), lookup(), PacketQueue(), remove(), and resetIterator().

Packet* PacketQueue::iter [private]
 

Definition at line 108 of file queue.h.

Referenced by getNext(), and resetIterator().

int PacketQueue::len_ [protected]
 

Definition at line 102 of file queue.h.

Referenced by deque(), enque(), SemanticPacketQueue::enque_head(), enqueHead(), length(), PacketQueue(), and remove().

Packet* PacketQueue::tail_ [protected]
 

Definition at line 101 of file queue.h.

Referenced by deque(), enque(), enqueHead(), PacketQueue(), remove(), and tail().


The documentation for this class was generated from the following files:
Generated on Tue Apr 20 13:06:45 2004 for NS2.26SourcesOriginal by doxygen 1.3.3