A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
length-example.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 Lawrence Livermore National Laboratory
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
7 */
8
9#include "ns3/core-module.h"
10#include "ns3/length.h"
11
12#include <iostream>
13
14/**
15 * @defgroup length-examples Demonstrates usage of the ns3::Length class
16 * @ingroup core-examples
17 * @ingroup length
18 */
19
20/**
21 * @file
22 * @ingroup length-examples
23 * Demonstrates usage of the ns3::Length class
24 */
25
26using namespace ns3;
27
28/**
29 * @ingroup length-examples
30 * @brief Demonstrates the use of ns3::Length constructors.
31 */
32void
34{
35 double input = 5;
36 Length::Quantity quantity(input, Length::Unit::Meter);
37
38 std::cout << "\nConstructors:\n"
39 << "Length (" << input << ", Unit::Meter) = " << Length(input, Length::Unit::Meter)
40 << "\n"
41 << "Length (" << input << ", \"m\") = " << Length(input, "m") << "\n"
42 << "Length (" << input << ", \"meter\") = " << Length(input, "meter") << "\n"
43 << "Length (Quantity(" << input << ", Unit::Meter)) = " << Length(quantity) << "\n"
44 << "Length (\"5m\") = " << Length("5m") << "\n"
45 << "Length (\"5 m\") = " << Length("5 m") << "\n"
46 << "Length (\"5meter\") = " << Length("5meter") << "\n"
47 << "Length (\"5 meter\") = " << Length("5 meter") << "\n"
48 << "Length (\"5meters\") = " << Length("5meters") << "\n"
49 << "Length (\"5 meters\") = " << Length("5 meters") << std::endl;
50}
51
52/**
53 * @ingroup length-examples
54 * @brief Demonstrates the use of ns3::Length conversions.
55 */
56void
58{
59 // construct length using value and unit
60 Length moonDistance(3.84402e8, Length::Unit::Meter);
61
62 // Demonstrate conversion to various units
63 std::cout << "\n"
64 << "Conversions:\n"
65 << "Distance to moon = " << moonDistance << "\n"
66 << "In Feet: " << moonDistance.As(Length::Unit::Foot) << "\n"
67 << "In Miles: " << moonDistance.As(Length::Unit::Mile) << "\n"
68 << "In Kilometers: " << moonDistance.As(Length::Unit::Kilometer) << std::endl;
69}
70
71/**
72 * @ingroup length-examples
73 * @brief Demonstrates the use of ns3::Length arithmetic operators.
74 */
75void
77{
78 double scale = 10;
79
80 // construct lengths using helper functions
81 Length oneMeter = Meters(1);
82 Length twoMeter = Meters(2);
83
84 std::cout << "\n"
85 << "Arithmetic Operations:\n"
86 << "Addition: " << oneMeter << " + " << twoMeter << " = " << (oneMeter + twoMeter)
87 << "\n"
88 << "Subtraction: " << twoMeter << " - " << oneMeter << " = " << (twoMeter - oneMeter)
89 << "\n"
90 << "Multiplication By Scalar: " << oneMeter << " * " << scale << " = "
91 << (oneMeter * scale) << "\n"
92 << "Division: " << oneMeter << " / " << twoMeter << " = " << (oneMeter / twoMeter)
93 << "\n"
94 << "Division By Scalar: " << oneMeter << " / " << scale << " = " << (oneMeter / scale)
95 << std::endl;
96}
97
98/**
99 * @ingroup length-examples
100 * @brief Demonstrates the use of ns3::Length equality operators.
101 */
102void
104{
105 Length oneMeter = Meters(1);
106 Length twoMeter = Meters(2);
107 Length threeMeter = Meters(3);
108
109 // NOLINTBEGIN(misc-redundant-expression)
110 std::cout << "\n"
111 << "Comparison Operations:\n"
112 << std::boolalpha << "Equality: " << oneMeter << " == " << oneMeter << " is "
113 << (oneMeter == oneMeter) << "\n"
114 << "Equality: " << oneMeter << " == " << twoMeter << " is " << (oneMeter == twoMeter)
115 << "\n"
116 << "Inequality: " << oneMeter << " != " << oneMeter << " is "
117 << (oneMeter != oneMeter) << "\n"
118 << "Inequality: " << oneMeter << " != " << twoMeter << " is "
119 << (oneMeter != twoMeter) << "\n"
120 << "Lesser: " << oneMeter << " < " << oneMeter << " is " << (oneMeter < oneMeter)
121 << "\n"
122 << "Lesser: " << oneMeter << " < " << twoMeter << " is " << (oneMeter < twoMeter)
123 << "\n"
124 << "Lesser: " << threeMeter << " < " << oneMeter << " is " << (threeMeter < oneMeter)
125 << "\n"
126 << "Greater: " << oneMeter << " > " << oneMeter << " is " << (oneMeter > oneMeter)
127 << "\n"
128 << "Greater: " << oneMeter << " > " << twoMeter << " is " << (oneMeter > twoMeter)
129 << "\n"
130 << "Greater: " << threeMeter << " > " << oneMeter << " is " << (threeMeter > oneMeter)
131 << std::endl;
132 // NOLINTEND(misc-redundant-expression)
133}
134
135/**
136 * @ingroup length-examples
137 * @brief Demonstrates the use of ns3::Length multiplications and divisions.
138 */
139void
141{
142 // construct length using helper function
143 Length totalLen = Feet(20);
144 Length pieceLen = Feet(3);
145 Length remainder;
146
147 int64_t count = Div(totalLen, pieceLen, &remainder);
148
149 std::cout << "\nHow many times can a " << totalLen.As(Length::Unit::Foot) << " length "
150 << "be split into " << pieceLen.As(Length::Unit::Foot) << " sized pieces? " << count
151 << "\nremainder: " << remainder.As(Length::Unit::Foot) << std::endl;
152
153 std::cout << "\nHow much remains after splitting a " << totalLen.As(Length::Unit::Foot)
154 << " length into " << pieceLen.As(Length::Unit::Foot) << " sized pieces? "
155 << Mod(totalLen, pieceLen).As(Length::Unit::Foot) << std::endl;
156}
157
158int
159main(int argc, char** argv)
160{
161 Constructors();
162 Conversions();
165 DivAndMod();
166
167 return 0;
168}
An immutable class which represents a value in a specific length unit.
Definition length.h:261
Represents a length in meters.
Definition length.h:233
Quantity As(Unit unit) const
Create a Quantity in a specific unit from a Length.
Definition length.cc:376
void Conversions()
Demonstrates the use of ns3::Length conversions.
void Constructors()
Demonstrates the use of ns3::Length constructors.
void EqualityOperators()
Demonstrates the use of ns3::Length equality operators.
void ArithmeticOperators()
Demonstrates the use of ns3::Length arithmetic operators.
void DivAndMod()
Demonstrates the use of ns3::Length multiplications and divisions.
Length Feet(double value)
Construct a length from a value in the indicated unit.
Definition length.cc:824
Length Mod(const Length &numerator, const Length &denominator)
Calculate the amount remaining after dividing two lengths.
Definition length.cc:490
Length Meters(double value)
Construct a length from a value in the indicated unit.
Definition length.cc:800
int64_t Div(const Length &numerator, const Length &denominator, Length *remainder)
Calculate how many times numerator can be split into denominator sized pieces.
Definition length.cc:471
Every class exported by the ns3 library is enclosed in the ns3 namespace.