A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS > Class Template Reference

Generic "sequence number" class. More...

#include "sequence-number.h"

Inheritance diagram for ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >:
Collaboration diagram for ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >:

Public Types

using SIGNED_TYPE = std::make_signed_t<NUMERIC_TYPE>
 SIGNED_TYPE is used in some operators, and is the signed counterpart of NUMERIC_TYPE.

Public Member Functions

 SequenceNumber ()=default
 SequenceNumber (NUMERIC_TYPE value)
 Constructs a SequenceNumber with the given value.
constexpr NUMERIC_TYPE GetValue () const
 Extracts the numeric value of the sequence number.
bool operator! () const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator% (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator& (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
bool operator&& (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
int operator* ()=delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator* (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator+ (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &other) const
 Operator defining addition of two sequence numbers.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator+ (SIGNED_TYPE delta) const
 Addition operator for adding numeric value to sequence number.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator++ ()
 Prefix increment operator.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator++ (int)
 Postfix increment operator.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & operator+= (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &)=delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & operator+= (SIGNED_TYPE value)
 Plus equals operator.
int64_t operator- (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &other) const
 Subtraction operator for subtracting a sequence number from another sequence number.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator- (SIGNED_TYPE delta) const
 Subtraction operator for subtracting numeric value from sequence number.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator-- ()
 Prefix decrement operator.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator-- (int)
 Postfix decrement operator.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & operator-= (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &)=delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & operator-= (SIGNED_TYPE value)
 Minus equals operator.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator/ (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator<< (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
constexpr std::strong_ordering operator<=> (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &other) const
 Spaceship comparison operator.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & operator= (NUMERIC_TYPE value)
 Constructs a SequenceNumber from an assignment of given value.
constexpr bool operator== (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &other) const
 Equality operator for comparing sequence number.
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator>> (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator^ (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator| (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
bool operator|| (const SequenceNumber< NUMERIC_TYPE, NUM_BITS > &) const =delete
SequenceNumber< NUMERIC_TYPE, NUM_BITS > operator~ () const =delete

Static Public Attributes

static constexpr NUMERIC_TYPE N_BITS {NUM_BITS}
 Number of bits used by the sequence number.
static constexpr size_t N_SEQUENCE_NUMBERS = 1 << NUM_BITS
 Total number of sequence numbers.

Private Attributes

NUMERIC_TYPE m_value {0}
 Sequence number value.

Static Private Attributes

static constexpr NUMERIC_TYPE HALF_MAX_VALUE = MAX_VALUE / 2
 Half the maximum representable value, used internally.
static constexpr NUMERIC_TYPE MAX_VALUE
 Maximum representable value.

Friends

template<typename NUMERIC_TYPE2, uint8_t NUM_BITS2>
std::ostream & operator<< (std::ostream &os, const SequenceNumber< NUMERIC_TYPE2, NUM_BITS2 > &val)
 For printing sequence number.
template<typename NUMERIC_TYPE2, uint8_t NUM_BITS2>
std::istream & operator>> (std::istream &is, const SequenceNumber< NUMERIC_TYPE2, NUM_BITS2 > &val)
 For loading sequence number from input streams.

Detailed Description

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
requires std::unsigned_integral<std::remove_cv_t<NUMERIC_TYPE>> && (NUM_BITS < 64) && (NUM_BITS <= std::numeric_limits<NUMERIC_TYPE>::digits)
class ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >

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.

Sequence number operations are defined in RFC 1982. However, the RFC leaves as implementation-dependent the case of two sequence numbers whose difference is equal to half of the possible range (e.g., 0 and 128 for a 8-bit sequence number). RFC 3626 (OLSR) fixes this ambiguity by defining the relationship. This implementation follows the RFC 3626 definition. Hence, in this example, 128 is less than 0.

The relationship table for a 4-bit sequence number is the following:

  • 4-bit sequence number value 0 = 0
  • 4-bit sequence number value 1 > 0
  • 4-bit sequence number value 2 > 0
  • 4-bit sequence number value 3 > 0
  • 4-bit sequence number value 4 > 0
  • 4-bit sequence number value 5 > 0
  • 4-bit sequence number value 6 > 0
  • 4-bit sequence number value 7 > 0
  • 4-bit sequence number value 8 < 0
  • 4-bit sequence number value 9 < 0
  • 4-bit sequence number value 10 < 0
  • 4-bit sequence number value 11 < 0
  • 4-bit sequence number value 12 < 0
  • 4-bit sequence number value 13 < 0
  • 4-bit sequence number value 14 < 0
  • 4-bit sequence number value 15 < 0

This is a templated class. To use it you need to supply one fundamental type as a template parameter: NUMERIC_TYPE. The second parameter NUM_BITS is optional, and represents the number of bits used in the SequenceNumber. It must be equal or less than the number of available bits in the NUMERIC_TYPE.

For instance, SequenceNumber<uint32_t> gives you a 32-bit sequence number, while SequenceNumber<uint16_t, 10> is a 10-bit one.

For your convenience, SequenceNumber32, SequenceNumber16, and SequenceNumber8 are defined as typedefs.

You can safely assign a value to a sequence number, provided that it is in the allowed range. E.g, the following code will raise an assert:

// 42 is representable in uint8_t, but needs more than 4 bits
SequenceNumber()=default

Sequence numbers can be printed, but they can not be automatically converted to an integer type. Furthermore, the conversion from an integer type must be explicit, e.g., it is not possible to compare a sequence number and an integer:

SequenceNumber<uint8_t, 4> seqNum1{0}; // OK
SequenceNumber<uint8_t, 4> seqNum2{1}; // OK
seqNum2 = 2; // OK
std::cout << "seqNum1 < seqNum2? " << std::boolalpha << (seqNum1 < seqNum2) << "\n"; // OK
// std::cout << "seqNum1 < 1? " << std::boolalpha << (seqNum1 < 1) << "\n"; // ERROR
Generic "sequence number" class.

The above limitation is to avoid mistakes, since integers and sequence numbers have very different comparison rules.

Note
Due to the internal representation and the semantics of operator - between two sequence numbers, SequenceNumber<uint64_t> are disallowed.

Definition at line 113 of file sequence-number.h.

Member Typedef Documentation

◆ SIGNED_TYPE

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
using ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::SIGNED_TYPE = std::make_signed_t<NUMERIC_TYPE>

SIGNED_TYPE is used in some operators, and is the signed counterpart of NUMERIC_TYPE.

Definition at line 120 of file sequence-number.h.

Constructor & Destructor Documentation

◆ SequenceNumber() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::SequenceNumber ( )
default

◆ SequenceNumber() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::SequenceNumber ( NUMERIC_TYPE value)
inlineexplicit

Constructs a SequenceNumber with the given value.

Parameters
valuethe sequence number value

Definition at line 134 of file sequence-number.h.

Member Function Documentation

◆ GetValue()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
NUMERIC_TYPE ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::GetValue ( ) const
inlineconstexpr

◆ operator!()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
bool ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator! ( ) const
delete

◆ operator%()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator% ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator&()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator& ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator&&()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
bool ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator&& ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator*() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
int ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator* ( )
delete

◆ operator*() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator* ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator+() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator+ ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & other) const
inline

Operator defining addition of two sequence numbers.

Note
: this operator ignores the logical relationship between the operands (i.e., lesser, greater) and simply adds the respective values. If possible, avoid to use it.
Parameters
othersequence number added to this
Returns
sequence number representing sum

Definition at line 245 of file sequence-number.h.

◆ operator+() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator+ ( SIGNED_TYPE delta) const
inline

Addition operator for adding numeric value to sequence number.

This function is syntactic sugar for:

for (auto index=0; index<value, index++)
{
seqNum++;
}
uint32_t u
Parameters
deltavalue to add to sequence number
Returns
sequence number representing sum

Definition at line 268 of file sequence-number.h.

◆ operator++() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator++ ( )
inline

Prefix increment operator.

Returns
incremented sequence number

Definition at line 171 of file sequence-number.h.

◆ operator++() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator++ ( int )
inline

Postfix increment operator.

Returns
incremented sequence number

Definition at line 182 of file sequence-number.h.

◆ operator+=() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator+= ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & )
delete

◆ operator+=() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator+= ( SIGNED_TYPE value)
inline

Plus equals operator.

Parameters
valuevalue to add to sequence number
Returns
incremented sequence number

Definition at line 215 of file sequence-number.h.

◆ operator-() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
int64_t ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator- ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & other) const
inline

Subtraction operator for subtracting a sequence number from another sequence number.

This function returns a signed distance between two sequence numbers. The dynamic range of the difference might be larger than the underlying unit type. I.e., the following code is a bug:

int8_t difference = seqNum1 - seqNum2;

because the result will be negative, even if the first operand is greater than the second.

Parameters
othersequence number to subtract from this sequence number
Returns
numeric value representing the signed difference

Definition at line 313 of file sequence-number.h.

◆ operator-() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator- ( SIGNED_TYPE delta) const
inline

Subtraction operator for subtracting numeric value from sequence number.

This function is syntactic sugar for:

for (auto index=0; index<value, index++)
{
seqNum--;
}
Parameters
deltavalue to subtract from sequence number
Returns
sequence number representing difference

Definition at line 290 of file sequence-number.h.

◆ operator--() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator-- ( )
inline

Prefix decrement operator.

Returns
decremented sequence number

Definition at line 193 of file sequence-number.h.

◆ operator--() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator-- ( int )
inline

Postfix decrement operator.

Returns
decremented sequence number

Definition at line 203 of file sequence-number.h.

◆ operator-=() [1/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator-= ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & )
delete

◆ operator-=() [2/2]

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator-= ( SIGNED_TYPE value)
inline

Minus equals operator.

Parameters
valuevalue to subtract from sequence number
Returns
decremented sequence number

Definition at line 228 of file sequence-number.h.

◆ operator/()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator/ ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator<<()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator<< ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator<=>()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
std::strong_ordering ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator<=> ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & other) const
inlineconstexpr

Spaceship comparison operator.

All the other comparison operators are automatically generated from this one.

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
othersequence number to compare to this one
Returns
The result of the comparison.

Definition at line 355 of file sequence-number.h.

◆ operator=()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator= ( NUMERIC_TYPE value)
inline

Constructs a SequenceNumber from an assignment of given value.

Parameters
valuesequence number to copy
Returns
reference to the assignee

Definition at line 148 of file sequence-number.h.

◆ operator==()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
bool ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator== ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & other) const
inlineconstexpr

Equality operator for comparing sequence number.

Parameters
othersequence number to compare to this sequence number
Returns
true if the sequence numbers are equal

Definition at line 335 of file sequence-number.h.

◆ operator>>()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator>> ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator^()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator^ ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator|()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator| ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator||()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
bool ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator|| ( const SequenceNumber< NUMERIC_TYPE, NUM_BITS > & ) const
delete

◆ operator~()

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
SequenceNumber< NUMERIC_TYPE, NUM_BITS > ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::operator~ ( ) const
delete

◆ operator<<

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
template<typename NUMERIC_TYPE2, uint8_t NUM_BITS2>
std::ostream & operator<< ( std::ostream & os,
const SequenceNumber< NUMERIC_TYPE2, NUM_BITS2 > & val )
friend

For printing sequence number.

Parameters
osoutput stream
valsequence number to display
Returns
output stream os

◆ operator>>

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
template<typename NUMERIC_TYPE2, uint8_t NUM_BITS2>
std::istream & operator>> ( std::istream & is,
const SequenceNumber< NUMERIC_TYPE2, NUM_BITS2 > & val )
friend

For loading sequence number from input streams.

Parameters
isinput stream
valsequence number to load
Returns
input stream is

Member Data Documentation

◆ HALF_MAX_VALUE

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
NUMERIC_TYPE ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::HALF_MAX_VALUE = MAX_VALUE / 2
staticconstexprprivate

Half the maximum representable value, used internally.

Definition at line 427 of file sequence-number.h.

◆ m_value

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
NUMERIC_TYPE ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::m_value {0}
private

◆ MAX_VALUE

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
NUMERIC_TYPE ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::MAX_VALUE
staticconstexprprivate
Initial value:
= NUM_BITS < std::numeric_limits<NUMERIC_TYPE>::digits
? (NUMERIC_TYPE{1} << NUM_BITS) - 1
: std::numeric_limits<NUMERIC_TYPE>::max()
STL namespace.

Maximum representable value.

Definition at line 422 of file sequence-number.h.

Referenced by ns3::operator>>().

◆ N_BITS

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
NUMERIC_TYPE ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::N_BITS {NUM_BITS}
staticconstexpr

Number of bits used by the sequence number.

Definition at line 126 of file sequence-number.h.

◆ N_SEQUENCE_NUMBERS

template<typename NUMERIC_TYPE, uint8_t NUM_BITS = std::numeric_limits<NUMERIC_TYPE>::digits>
size_t ns3::SequenceNumber< NUMERIC_TYPE, NUM_BITS >::N_SEQUENCE_NUMBERS = 1 << NUM_BITS
staticconstexpr

Total number of sequence numbers.

Definition at line 123 of file sequence-number.h.


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