#include "PacketFactory.h" #include <stdlib.h> #include <time.h> // inizializzazione dei membri statici int PacketFactory:: countnum_ = 0; PacketFactory* PacketFactory:: pfinstance_ = 0; PacketFactory* PacketFactory:: instance() { if (pfinstance_ == 0) // prima chiamata { pfinstance_ = new PacketFactory(); //crea l'unica istanza } pfinstance_->add("unreachable"); return pfinstance_; //indirizzo dell'unica istanza } PacketFactory:: PacketFactory() { } void PacketFactory:: add(const Address& addr) { addr_vect_.push_back( addr ); } Packet* PacketFactory:: create(const Address& addr) { Address originator = addr; Address destination; Info info = countnum_++; int j; int size = addr_vect_.size(); //cout << "PF--> vect size: " << size << endl; //scelta pseudocasuale dell'indirizzo di destinazione srand48( long( time( 0 ) + countnum_ ) ); j = int( lrand48() ); //cout << "j----> " << j << endl; /* se l'indirizzo di destinazione risulta * uguale a quello di origine, allora * si sceglie il prossimo nodo, in modo * circolare. ( nell'else ) */ if ( addr_vect_[ (j % size) ] != originator ) { //cout << "PF--> indirizzo diverso" << endl; destination = addr_vect_[ (j % size) ]; } else { //cout << "PF--> indirizzo uguale" << endl; destination = addr_vect_[ ( (j+1) % size) ]; } //cout << "---> destinazione --> " << destination << endl; //cout << "debug prima di creare" << endl; Packet* packet = new Packet( originator, destination, info ); //cout << "debug dopo aver creato" << endl; return packet; }