// // Receiver Window Buffer // // Idea: See SndWinBuf.h // // Usage Patterns ('sn' is a sequence number): // // o Create a w-slot window: RcvWinBuf *rwin = new RcvWinBuf(w); // o Display the window buffer: rwin->dump(); // o Accept status: Bool accept = rwin->isInWin(sn); // o Accept a pkt: rwin->insert(sn); rwin->advWin(); // o Has the seq num already buffered? rwin->isBuffered(sn); // typedef struct { Bool accept; // pkt has been accepted by rcvr? } Rbuf; class RcvWinBuf { public: int lo; // lowest sn in window (RO) int w; // window size (#pkts) (RO) RcvWinBuf(int w0); // create new receiver window buffer with w0 slots void advWin(void); // advance window until 1st slot needs a pkt inline void dump(void) { // dump buffer printf (" RcvWinBuf: lo = %d\n ", lo); for (int i=0; i= lo) && (sn0 < (lo+w))) return YES; else return NO; } inline void insert(int sn) { // insert pkt with sn(p) into buffer buf[sn%w].accept = YES; } private: Rbuf *buf; // w buffer ptrs };