INET Framework for OMNeT++/OMNEST
inet::tcp::TCPVirtualDataRcvQueue::Region Class Reference

#include <TCPVirtualDataRcvQueue.h>

Inheritance diagram for inet::tcp::TCPVirtualDataRcvQueue::Region:
inet::tcp::TCPByteStreamRcvQueue::Region

Public Types

enum  CompareStatus {
  BEFORE = 1, BEFORE_TOUCH, OVERLAP, AFTER_TOUCH,
  AFTER
}
 

Public Member Functions

 Region (uint32 _begin, uint32 _end)
 
virtual ~Region ()
 
uint32 getBegin () const
 
uint32 getEnd () const
 
unsigned long getLength () const
 
unsigned long getLengthTo (uint32 seq) const
 
CompareStatus compare (const TCPVirtualDataRcvQueue::Region &other) const
 Compare self and other. More...
 
virtual bool merge (const TCPVirtualDataRcvQueue::Region *other)
 Merge other region to self. More...
 
virtual void copyTo (cPacket *msg) const
 Copy self to msg. More...
 
virtual TCPVirtualDataRcvQueue::Regionsplit (uint32 seq)
 Returns an allocated new Region object with filled with [begin..seq) and set self to [seq..end) More...
 

Protected Attributes

uint32 begin
 
uint32 end
 

Member Enumeration Documentation

Enumerator
BEFORE 
BEFORE_TOUCH 
OVERLAP 
AFTER_TOUCH 
AFTER 
Definition: TCPVirtualDataRcvQueue.h:50
Definition: TCPVirtualDataRcvQueue.h:50
Definition: TCPVirtualDataRcvQueue.h:50
Definition: TCPVirtualDataRcvQueue.h:50
Definition: TCPVirtualDataRcvQueue.h:50

Constructor & Destructor Documentation

inet::tcp::TCPVirtualDataRcvQueue::Region::Region ( uint32  _begin,
uint32  _end 
)
inline

Referenced by split().

51 : begin(_begin), end(_end) {};
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
virtual inet::tcp::TCPVirtualDataRcvQueue::Region::~Region ( )
inlinevirtual

Reimplemented in inet::tcp::TCPByteStreamRcvQueue::Region.

52 {};

Member Function Documentation

TCPVirtualDataRcvQueue::Region::CompareStatus inet::tcp::TCPVirtualDataRcvQueue::Region::compare ( const TCPVirtualDataRcvQueue::Region other) const

Compare self and other.

48 {
49  if (end == other.begin)
50  return BEFORE_TOUCH;
51  if (begin == other.end)
52  return AFTER_TOUCH;
53  if (seqLess(end, other.begin))
54  return BEFORE;
55  if (seqLess(other.end, begin))
56  return AFTER;
57  return OVERLAP;
58 }
Definition: TCPVirtualDataRcvQueue.h:50
Definition: TCPVirtualDataRcvQueue.h:50
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
Definition: TCPVirtualDataRcvQueue.h:50
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
Definition: TCPVirtualDataRcvQueue.h:50
Definition: TCPVirtualDataRcvQueue.h:50
void inet::tcp::TCPVirtualDataRcvQueue::Region::copyTo ( cPacket *  msg) const
virtual

Copy self to msg.

Reimplemented in inet::tcp::TCPByteStreamRcvQueue::Region.

Referenced by inet::tcp::TCPByteStreamRcvQueue::Region::copyTo(), inet::tcp::TCPByteStreamRcvQueue::extractBytesUpTo(), and inet::tcp::TCPVirtualDataRcvQueue::extractBytesUpTo().

61 {
62  msg->setByteLength(getLength());
63 }
unsigned long getLength() const
Definition: TCPVirtualDataRcvQueue.h:55
uint32 inet::tcp::TCPVirtualDataRcvQueue::Region::getBegin ( ) const
inline
unsigned long inet::tcp::TCPVirtualDataRcvQueue::Region::getLength ( ) const
inline

Referenced by inet::tcp::TCPByteStreamRcvQueue::Region::copyTo(), and copyTo().

55 { return (ulong)(end - begin); }
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
unsigned long ulong
Definition: INETDefs.h:64
ulong inet::tcp::TCPVirtualDataRcvQueue::Region::getLengthTo ( uint32  seq) const
66 {
67  // seq below 1st region
68  if (seqLE(seq, begin))
69  return 0;
70 
71  if (seqLess(seq, end)) // part of 1st region
72  return (ulong)(seq - begin);
73 
74  return (ulong)(end - begin);
75 }
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
bool seqLE(uint32 a, uint32 b)
Definition: TCPSegment.h:33
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
unsigned long ulong
Definition: INETDefs.h:64
bool inet::tcp::TCPVirtualDataRcvQueue::Region::merge ( const TCPVirtualDataRcvQueue::Region other)
virtual

Merge other region to self.

Reimplemented in inet::tcp::TCPByteStreamRcvQueue::Region.

Referenced by inet::tcp::TCPVirtualDataRcvQueue::merge().

28 {
29  if (seqLess(end, other->begin) || seqLess(other->end, begin))
30  return false;
31  if (seqLess(other->begin, begin))
32  begin = other->begin;
33  if (seqLess(end, other->end))
34  end = other->end;
35  return true;
36 }
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
TCPVirtualDataRcvQueue::Region * inet::tcp::TCPVirtualDataRcvQueue::Region::split ( uint32  seq)
virtual

Returns an allocated new Region object with filled with [begin..seq) and set self to [seq..end)

Reimplemented in inet::tcp::TCPByteStreamRcvQueue::Region.

Referenced by inet::tcp::TCPVirtualDataRcvQueue::extractTo().

39 {
40  ASSERT(seqGreater(seq, begin) && seqLess(seq, end));
41 
42  Region *reg = new Region(begin, seq);
43  begin = seq;
44  return reg;
45 }
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
bool seqGreater(uint32 a, uint32 b)
Definition: TCPSegment.h:34
Region(uint32 _begin, uint32 _end)
Definition: TCPVirtualDataRcvQueue.h:51

Member Data Documentation


The documentation for this class was generated from the following files: