A Discrete-Event Network Simulator
API
length-example.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2019 Lawrence Livermore National Laboratory
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
19  */
20 
21 #include "ns3/core-module.h"
22 #include "ns3/length.h"
23 
24 #include <iostream>
25 
33 using namespace ns3;
35 
36 void Constructors ()
37 {
38  double input = 5;
39  Length::Quantity quantity (input, Unit::Meter);
40 
41  std::cout << "\nConstructors:"
42  << "\nLength (" << input << ", Unit::Meter) = " << Length (input, Unit::Meter)
43  << "\nLength (" << input << ", \"m\") = " << Length (input, "m")
44  << "\nLength (" << input << ", \"meter\") = " << Length (input, "meter")
45  << "\nLength (Quantity(" << input << ", Unit::Meter)) = " << Length (quantity)
46  << "\nLength (\"5m\") = " << Length ("5m")
47  << "\nLength (\"5 m\") = " << Length ("5 m")
48  << "\nLength (\"5meter\") = " << Length ("5meter")
49  << "\nLength (\"5 meter\") = " << Length ("5 meter")
50  << "\nLength (\"5meters\") = " << Length ("5meters")
51  << "\nLength (\"5 meters\") = " << Length ("5 meters")
52  << std::endl;
53 }
54 
55 void Conversions ()
56 {
57  //construct length using value and unit
58  Length moonDistance (3.84402e8, Unit::Meter);
59 
60  //Demonstrate conversion to various units
61  std::cout << "\nConversions: "
62  << "\nDistance to moon = " << moonDistance
63  << "\nIn Feet: " << moonDistance.As (Unit::Foot)
64  << "\nIn Miles: " << moonDistance.As (Unit::Mile)
65  << "\nIn Kilometers: " << moonDistance.As (Unit::Kilometer)
66  << std::endl;
67 }
68 
70 {
71  double scale = 10;
72 
73  //construct lengths using helper functions
74  Length oneMeter = Meters (1);
75  Length twoMeter = Meters (2);
76 
77  std::cout << "\nArithmetic Operations:"
78  << "\nAddition: " << oneMeter << " + " << oneMeter << " = "
79  << (oneMeter + oneMeter)
80  << "\nSubtraction: " << oneMeter << " - " << oneMeter << " = "
81  << (oneMeter - oneMeter)
82  << "\nMultiplication By Scalar: " << oneMeter << " * " << scale << " = "
83  << (oneMeter * scale)
84  << "\nDivision: " << oneMeter << " / " << twoMeter << " = "
85  << (oneMeter / twoMeter)
86  << "\nDivision By Scalar: " << oneMeter << " / " << scale << " = "
87  << (oneMeter / scale)
88  << std::endl;
89 
90 }
91 
93 {
94  Length oneMeter = Meters (1);
95  Length twoMeter = Meters (2);
96  Length threeMeter = Meters (3);
97 
98  std::cout << "\nComparison Operations:" << std::boolalpha
99  << "\nEquality: " << oneMeter << " == " << oneMeter << " is "
100  << (oneMeter == oneMeter)
101  << "\nEquality: " << oneMeter << " == " << twoMeter << " is "
102  << (oneMeter == twoMeter)
103  << "\nInequality: " << oneMeter << " != " << oneMeter << " is "
104  << (oneMeter != oneMeter)
105  << "\nInequality: " << oneMeter << " != " << twoMeter << " is "
106  << (oneMeter != twoMeter)
107  << "\nLesser: " << oneMeter << " < " << oneMeter << " is "
108  << (oneMeter < oneMeter)
109  << "\nLesser: " << oneMeter << " < " << twoMeter << " is "
110  << (oneMeter < twoMeter)
111  << "\nLesser: " << threeMeter << " < " << oneMeter << " is "
112  << (threeMeter < oneMeter)
113  << "\nGreater: " << oneMeter << " > " << oneMeter << " is "
114  << (oneMeter > oneMeter)
115  << "\nGreater: " << oneMeter << " > " << twoMeter << " is "
116  << (oneMeter > twoMeter)
117  << "\nGreater: " << threeMeter << " > " << oneMeter << " is "
118  << (threeMeter > oneMeter)
119  << std::endl;
120 }
121 
122 void DivAndMod ()
123 {
124  //construct length using helper function
125  Length totalLen = Feet (20);
126  Length pieceLen = Feet (3);
127  Length remainder;
128 
129  int64_t count = Div (totalLen, pieceLen, &remainder);
130 
131  std::cout << "\nHow many times can a " << totalLen.As (Unit::Foot) << " length "
132  << "be split into " << pieceLen.As (Unit::Foot) << " sized pieces? "
133  << count
134  << "\nremainder: " << remainder.As (Unit::Foot)
135  << std::endl;
136 
137  std::cout << "\nHow much remains after splitting a "
138  << totalLen.As (Unit::Foot) << " length into "
139  << pieceLen.As (Unit::Foot) << " sized pieces? "
140  << Mod (totalLen, pieceLen).As (Unit::Foot)
141  << std::endl;
142 }
143 
144 int main (int argc, char** argv)
145 {
146  Constructors ();
147  Conversions ();
150  DivAndMod ();
151 
152  return 0;
153 }
Quantity As(Unit unit) const
Create a Quantity in a specific unit from a Length.
Definition: length.cc:388
void Constructors()
Length Feet(double value)
This function provides a string parsing method that does not rely on istream, which has been found to...
Definition: length.cc:844
void Conversions()
Unit
Units of length in various measurement systems that are supported by the Length class.
Definition: length.h:245
Length Mod(const Length &numerator, const Length &denominator)
This function provides a string parsing method that does not rely on istream, which has been found to...
Definition: length.cc:507
int64_t Div(const Length &numerator, const Length &denominator, Length *remainder)
This function provides a string parsing method that does not rely on istream, which has been found to...
Definition: length.cc:488
void EqualityOperators()
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void DivAndMod()
An immutable class which represents a value in a specific length unit.
Definition: length.h:266
Represents a length in meters
Definition: length.h:238
Length Meters(double value)
This function provides a string parsing method that does not rely on istream, which has been found to...
Definition: length.cc:820
void ArithmeticOperators()