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

ReXmitQ Class Reference

#include <rxmit_queue.h>

Collaboration diagram for ReXmitQ:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ReXmitQ ()
void insert (Time rxat, Packet *p, int num_rexmits)
void peekHead (Time *rxat, Packet **pp, int *rexmits_left)
void removeHead ()
void remove (Packet *p)
ReXmitQIter iter ()

Private Attributes

rexent_head head

Constructor & Destructor Documentation

ReXmitQ::ReXmitQ  ) 
 

Definition at line 46 of file rxmit_queue.cc.

References head, and LIST_INIT.

00047 {
00048   LIST_INIT(&head)
00049 }


Member Function Documentation

void ReXmitQ::insert Time  rxat,
Packet p,
int  num_rexmits
 

Definition at line 52 of file rxmit_queue.cc.

References head, LIST_INSERT_AFTER, LIST_INSERT_BEFORE, and LIST_INSERT_HEAD.

Referenced by imepAgent::handlerReXmitTimer(), and imepAgent::scheduleReXmit().

00053 {
00054   struct rexent *r = new rexent;
00055   r->rexmit_at = rxat;
00056   r->p = p;
00057   r->rexmits_left = num_rexmits;
00058 
00059   struct rexent *i;
00060 
00061   if (NULL == head.lh_first || rxat < head.lh_first->rexmit_at) 
00062     {
00063       LIST_INSERT_HEAD(&head, r, next);
00064       return;
00065     }
00066 
00067   for (i = head.lh_first ; i != NULL ; i = i->next.le_next )
00068     {
00069       if (rxat < i->rexmit_at) 
00070         {
00071           LIST_INSERT_BEFORE(i, r, next);
00072           return;
00073         }
00074       if (NULL == i->next.le_next)
00075         {
00076           LIST_INSERT_AFTER(i, r, next);
00077           return;
00078         }
00079     }
00080 }

ReXmitQIter ReXmitQ::iter  )  [inline]
 

Definition at line 84 of file rxmit_queue.h.

References head.

Referenced by imepAgent::findObjectSequence(), and imepAgent::purgeReXmitQ().

00084                             {
00085     return ReXmitQIter(head.lh_first); 
00086   }

void ReXmitQ::peekHead Time rxat,
Packet **  pp,
int *  rexmits_left
 

Definition at line 83 of file rxmit_queue.cc.

References head.

Referenced by imepAgent::handlerReXmitTimer().

00084 {
00085   struct rexent *i;
00086   i = head.lh_first;
00087   if (NULL == i) {
00088     *rxat = -1; *pp = NULL; *rexmits_left = -1;
00089     return;
00090   }
00091   *rxat = i->rexmit_at;
00092   *pp = i->p; 
00093   *rexmits_left = i->rexmits_left;
00094 }

void ReXmitQ::remove Packet p  ) 
 

Definition at line 107 of file rxmit_queue.cc.

References head, and LIST_REMOVE.

Referenced by imepAgent::purgeReXmitQ(), and imepAgent::removeObjectResponse().

00108 {
00109   struct rexent *i;
00110   for (i = head.lh_first ; i != NULL ; i = i->next.le_next )
00111     {
00112       if (p == i->p)
00113         {
00114           LIST_REMOVE(i, next);
00115           delete i;
00116           return;
00117         }
00118     }
00119 }

void ReXmitQ::removeHead  ) 
 

Definition at line 97 of file rxmit_queue.cc.

References head, and LIST_REMOVE.

Referenced by imepAgent::handlerReXmitTimer().

00098 {
00099   struct rexent *i;
00100   i = head.lh_first;
00101   if (NULL == i) return;
00102   LIST_REMOVE(i, next);
00103   delete i;
00104 }


Member Data Documentation

rexent_head ReXmitQ::head [private]
 

Definition at line 89 of file rxmit_queue.h.

Referenced by insert(), iter(), peekHead(), remove(), removeHead(), and ReXmitQ().


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