/home/aherms/Code/git/awds-routing/src/awds/PktPair.h

00001 #ifndef D__PktPair
00002 #define D__PktPair
00003 
00004 #include <awds/UCastMetric.h>
00005 
00006 #include <string>
00007 #include <sstream>
00008 
00009 
00010 namespace awds {
00011   
00014   class PktPair : public UCastMetric {
00015   protected:
00016 
00017     virtual RTopology::link_quality_t my_get_quality(NodeDescr &ndescr);
00018     virtual unsigned long my_calculate(RTopology::link_quality_t forward,RTopology::link_quality_t backward);
00019 
00020     struct s_node_data {
00021       bool active;
00022       gea::AbsTime lastsend;
00023       gea::Duration time;
00024       int capacity;
00025       std::vector<gea::Duration> times;
00026       int position;
00027       s_node_data(int c=0):active(true),lastsend(0),time(0),capacity(c),position(0) {
00028         if (capacity) {
00029           //      std::cout << "constructor: " << position << "  " << capacity << std::endl;
00030           times.resize(capacity);
00031           for (int i(0);i<capacity;++i) {
00032             times[i] = 1;
00033           }
00034         }
00035       }
00036       void setTime(gea::Duration t,double alpha) {
00037         if (times.size()) {
00038           times[position++] = t;
00039           position %= capacity;
00040         } else {
00041           time = alpha*t+(1-alpha)*(time);;
00042         }
00043       }
00044       gea::Duration getTime() {
00045         if (times.size()) {
00046           time = times[0];
00047           for (int i(1);i<capacity;++i) {
00048             time = std::min(time,times[i]);
00049           }
00050         }
00051         return time;
00052       }
00053     };
00054     typedef std::map<NodeId,s_node_data> Nodes;
00055     Nodes nodes;
00056     typedef std::map<NodeId,gea::AbsTime> FirstPackets;
00057     FirstPackets firstPackets;
00058 
00059     gea::Blocker blocker;
00060   public:
00061     gea::Duration interval;
00062     bool debug;
00063     double alpha;
00064     int packetSize;
00065     int bufferSize;
00066     PktPair(Routing *r);
00067     virtual ~PktPair();
00068     virtual void on_recv(BasePacket *p);
00069     virtual void on_wait(gea::Handle *h,gea::AbsTime t);
00070     virtual void addNode(NodeId &nodeId);
00071     virtual void begin_update();
00072     virtual void end_update();
00073     void start();
00074     virtual std::string get_values();
00075   };
00076 }
00077 
00078 
00079 
00080 
00081 #endif // D__PktPair
00082 /* This stuff is for emacs
00083  * Local variables:
00084  * mode:c++
00085  * c-basic-offset: 4
00086  * End:
00087  */

Generated on Tue Dec 11 17:58:48 2007 for AWDS by  doxygen 1.5.3-20071008