6 Ekim 2008 Pazartesi

QueueDizdar.cc




#include "queueDizdar.h"

static class QueueDizdarClass : public TclClass {
public:
QueueDizdarClass() : TclClass("Queue/QueueDizdar") {}
TclObject* create(int, const char*const*) {
return (new QueueDizdar);
}
} class_queue_dizdar;

void QueueDizdar::enque(Packet* p) {
if(dusurmeTipi == 0) { //önden düşürme = front drop
if((kuyruk->length()) >= qlim_){//is queue full
//add the received packet to the end of the queue
kuyruk->enque(p);
//will be the first packet in the list
Packet* listedeIlkPaket;
//find the first packet
listedeIlkPaket = kuyruk->head();
//deque the first packet in the queue
//so the head will automaticaly jumps to
//next one on the queue
kuyruk->deque();
//drop that first packet that was just released
drop(listedeIlkPaket);
}else{//if not full add received packet
kuyruk->enque(p);
}

}else{
if(dusurmeTipi == 1) { //sondan düşürme = end drop
if(kuyruk->length() >= qlim_){//is queue full??
drop(p);
}else{
kuyruk->enque(p);
}

}else{ //rastgele düşürme = random drop
if(kuyruk->length() >= qlim_){//is queue full??
kuyruk->enque(p);
Packet* dusurulecekPaket;//this is the one which will be dropped
//find the packet by random number
//this is done by the lookup function
//func. returns the n th. packet
dusurulecekPaket = kuyruk->lookup(Random::integer(kuyruk->length()));
kuyruk->remove(dusurulecekPaket);//remove the selected packet
//from the queue
drop(dusurulecekPaket);
}else{
kuyruk->enque(p);
}
}
}
}

Packet* QueueDizdar::deque() {
kuyruk->deque();
}


Hiç yorum yok:

Yorum Gönder