A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
sequence-number-example.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 Universita' di Firenze, Italy
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
7 */
8
9/**
10 * @file
11 * Example to demonstrate the SequenceNumber class.
12 */
13
14#include "ns3/sequence-number.h"
15
16using namespace ns3;
17
18int
19main(int argc, char* argv[])
20{
21 // Note: most sequence numbers have pre-defined aliases, like SequenceNumber16.
22 // Here we use the template to define a reduced range sequence number.
23 // plus, we define our own short name, for simplicity.
24 using SequenceNumber4 = SequenceNumber<uint8_t, 4>;
25
26 SequenceNumber4 seqNum1(0u);
27 SequenceNumber4 seqNum2 = seqNum1;
28
29 // Error: SequenceNumbers must have the same underlying type and number of bits
30 // SequenceNumber<uint16_t, 4> seqNum3 = seqNum1;
31 // SequenceNumber<uint8_t, 5> seqNum4 = seqNum1;
32
33 for (size_t i = 0; i < SequenceNumber4::N_SEQUENCE_NUMBERS; i++)
34 {
35 std::string relation;
36 if (seqNum2 == seqNum1)
37 {
38 relation = " = ";
39 }
40 else if (seqNum2 < seqNum1)
41 {
42 relation = " < ";
43 }
44 else
45 {
46 relation = " > ";
47 }
48 std::cout << "4-bit sequence number value " << seqNum2 << relation << seqNum1 << std::endl;
49 seqNum2++;
50 }
51
52 std::cout << std::endl << "Table of comparisons (numbers are in hexadecimal):" << std::endl;
53 std::cout << " ";
54 for (size_t i = 0; i < SequenceNumber4::N_SEQUENCE_NUMBERS; i++)
55 {
56 std::cout << std::hex << i << " ";
57 }
58 std::cout << std::endl;
59
60 // We assign a value instead of incrementing the sequence number.
61 // Just an alternative way.
62 for (size_t i = 0; i < SequenceNumber4::N_SEQUENCE_NUMBERS; i++)
63 {
64 seqNum1 = i;
65 std::cout << std::hex << seqNum1 << " ";
66
67 for (size_t j = 0; j < SequenceNumber4::N_SEQUENCE_NUMBERS; j++)
68 {
69 seqNum2 = j;
70 std::string relation;
71 if (seqNum2 == seqNum1)
72 {
73 relation = " .";
74 }
75 else if (seqNum2 < seqNum1)
76 {
77 relation = " -";
78 }
79 else
80 {
81 relation = " +";
82 }
83 std::cout << relation;
84 }
85 std::cout << std::endl;
86 }
87
88 return 0;
89}
uint32_t u
Generic "sequence number" class.
Every class exported by the ns3 library is enclosed in the ns3 namespace.