00001 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ 00002 // 00003 // Copyright (c) 2006 Georgia Tech Research Corporation 00004 // 00005 // This program is free software; you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License version 2 as 00007 // published by the Free Software Foundation; 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 // 00018 // Author: Rajib Bhattacharjea<raj.b@gatech.edu> 00019 // 00020 00021 // Ported from: 00022 // Georgia Tech Network Simulator - Manage 32 bit unsigned sequence numbers 00023 // George F. Riley. Georgia Tech, Spring 2002 00024 00025 #ifndef __seq_h__ 00026 #define __seq_h__ 00027 00028 #include <stdint.h> 00029 00030 #define MAX_SEQ ((uint32_t)0xffffffff) 00031 00032 /** 00033 * \ingroup tcp 00034 * 00035 * \brief Class to manage arithmetic operations on sequence numbers (mod 2^32) 00036 */ 00037 class SequenceNumber { 00038 public: 00039 SequenceNumber () : seq(0) { } 00040 SequenceNumber (const uint32_t s) : seq (s) { } 00041 00042 operator uint32_t () const { return seq;} 00043 00044 SequenceNumber& operator= (const uint32_t s) { seq = s; return *this;} 00045 00046 SequenceNumber& operator+= (const uint32_t s) { seq += s; return *this;} 00047 SequenceNumber operator++ () { seq++; return *this;} 00048 SequenceNumber operator++ (int) { SequenceNumber ss (seq); seq++; return ss;} 00049 SequenceNumber& operator-= (const uint32_t s) { seq -= s; return *this;} 00050 SequenceNumber operator-- () { seq--; return *this;} 00051 SequenceNumber operator-- (int) { SequenceNumber ss (seq); seq--; return ss;} 00052 public: 00053 uint32_t seq; 00054 }; 00055 00056 // Comparison operators 00057 00058 bool operator< (const SequenceNumber l, const SequenceNumber r); 00059 bool operator<= (const SequenceNumber l, const SequenceNumber r); 00060 bool operator> (const SequenceNumber l, const SequenceNumber r); 00061 bool operator>= (const SequenceNumber l, const SequenceNumber r); 00062 00063 // Non-member arithmetic operators 00064 SequenceNumber operator+ (const SequenceNumber l, const SequenceNumber r); 00065 SequenceNumber operator- (const SequenceNumber l, const SequenceNumber r); 00066 00067 #endif 00068 00069