|
| SequenceNumber () |
|
| SequenceNumber (NUMERIC_TYPE value) |
| Constructs a SequenceNumber with the given value. More...
|
|
| SequenceNumber (SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > const &value) |
| Constructs a SequenceNumber from a copy. More...
|
|
NUMERIC_TYPE | GetValue () const |
| Extracts the numeric value of the sequence number. More...
|
|
bool | operator!= (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Inequality operator for comparing sequence numbers. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator+ (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Operator defining addition of two sequence numbers. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator+ (SIGNED_TYPE delta) const |
| Addition operator for adding numeric value to sequence number. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator++ () |
| Prefix increment operator. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator++ (int) |
| Postfix increment operator. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > & | operator+= (SIGNED_TYPE value) |
| Plus equals operator. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator- (SIGNED_TYPE delta) const |
| Subtraction operator for subtracting numeric value from sequence number. More...
|
|
SIGNED_TYPE | operator- (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Subtraction operator for subtracting sequence number from sequence number. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator-- () |
| Prefix decrement operator. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator-- (int) |
| Postfix decrement operator. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > & | operator-= (SIGNED_TYPE value) |
| Minus equals operator. More...
|
|
bool | operator< (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Less than operator for comparing sequence numbers. More...
|
|
bool | operator<= (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Less than or equal operator for comparing sequence numbers. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > & | operator= (NUMERIC_TYPE value) |
| Constructs a SequenceNumber from an assignment of given value. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > & | operator= (SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > const &value) |
| Constructs a SequenceNumber from an assignment of another sequence number. More...
|
|
bool | operator== (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Equality operator for comparing sequence number. More...
|
|
bool | operator> (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Here is the critical part, how the comparison is made taking into account wrap-around. More...
|
|
bool | operator>= (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &other) const |
| Greater than or equal operator for comparing sequence numbers. More...
|
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator & (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Bitwise AND operator - unimplemented. More...
|
|
bool | operator! () const |
| Logical NOT operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator% (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Modulo operator - unimplemented. More...
|
|
bool | operator&& (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Logical AND operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator* (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Multiplication operator - unimplemented. More...
|
|
int | operator* () |
| Indirection operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > & | operator+= (SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > const &value) |
| Plus equals operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > & | operator-= (SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > const &value) |
| Minus equals operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator/ (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Division operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator<< (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Bitwise left shift operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator>> (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Bitwise right shift operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator^ (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Bitwise XOR operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator| (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Bitwise OR operator - unimplemented. More...
|
|
bool | operator|| (const SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > &b) const |
| Logical OR operator - unimplemented. More...
|
|
SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE > | operator~ () const |
| Bitwise NOT operator - unimplemented. More...
|
|
template<typename NUMERIC_TYPE, typename SIGNED_TYPE>
class ns3::SequenceNumber< NUMERIC_TYPE, SIGNED_TYPE >
Generic "sequence number" class.
This class can be used to handle sequence numbers. In networking protocols, sequence numbers are fixed precision integer numbers that are used to order events relative to each other. A sequence number is expected to increase over time but, since it has a limited number of bits, the number will "wrap around" from the maximum value that can represented with the given number of bits back to zero. For this reason, comparison of two sequence numbers, and subtraction, is non-trivial. The SequenceNumber class behaves like a number, with the usual arithmetic operators implemented, but knows how to correctly compare and subtract sequence numbers.
This is a templated class. To use it you need to supply two fundamental types as template parameters: NUMERIC_TYPE and SIGNED_TYPE. For instance, SequenceNumber<uint32_t, int32_t> gives you a 32-bit sequence number, while SequenceNumber<uint16_t, int16_t> is a 16-bit one. For your convenience, these are typedef'ed as SequenceNumber32 and SequenceNumber16, respectively.
Definition at line 53 of file sequence-number.h.
template<typename NUMERIC_TYPE, typename SIGNED_TYPE>
Here is the critical part, how the comparison is made taking into account wrap-around.
From RFC 3626:
The sequence number S1 is said to be "greater than" the sequence number S2 if: S1 > S2 AND S1 - S2 <= MAXVALUE/2 OR S2 > S1 AND S2 - S1 > MAXVALUE/2
- Parameters
-
other | sequence number to compare to this one |
- Returns
- true if this sequence number is greater than other
Definition at line 268 of file sequence-number.h.
Referenced by ns3::SequenceNumber< uint8_t, int8_t >::operator<().