author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Tue, 21 Nov 2006 15:50:09 +0100 | |
changeset 162 | 5b398ac221c7 |
parent 159 | e2c8e211039e |
child 163 | 2a7e05018eeb |
permissions | -rw-r--r-- |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
144
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
25
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
/* |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
* Copyright (c) 2005,2006 INRIA |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
* All rights reserved. |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
* |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
* This program is free software; you can redistribute it and/or modify |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
* it under the terms of the GNU General Public License version 2 as |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
* published by the Free Software Foundation; |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
* |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
* This program is distributed in the hope that it will be useful, |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
* GNU General Public License for more details. |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
* |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
* along with this program; if not, write to the Free Software |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
* |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
*/ |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
#ifndef TIME_H |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
#define TIME_H |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
|
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
#include <stdint.h> |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
25 |
#include <cassert> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
26 |
#include "high-precision.h" |
25
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
|
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
namespace ns3 { |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
30 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
31 |
* \brief keep track of time unit. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
32 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
33 |
* This template class is used to keep track of the value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
34 |
* of a specific time unit: the type TimeUnit<1> is used to |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
35 |
* keep track of seconds, the type TimeUnit<2> is used to keep |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
36 |
* track of seconds squared, the type TimeUnit<-1> is used to |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
37 |
* keep track of 1/seconds, etc. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
38 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
39 |
* This base class defines all the functionality shared by all |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
40 |
* these time unit objects: it defines all the classic arithmetic |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
41 |
* operators +, -, *, /, and all the classic comparison operators: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
42 |
* ==, !=, <, >, <=, >=. It is thus easy to add, substract, or |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
43 |
* multiply multiple TimeUnit objects. The return type of any such |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
44 |
* arithmetic expression is always a TimeUnit object. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
45 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
46 |
* The ns3::Scalar, ns3::Time, ns3::TimeSquare, and ns3::TimeInvert classes |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
47 |
* are aliases for the TimeUnit<0>, TimeUnit<1>, TimeUnit<2> and TimeUnit<-1> |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
48 |
* types respectively. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
49 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
50 |
* For example: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
51 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
52 |
* Time<1> t1 = Seconds (10.0); |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
53 |
* Time<1> t2 = Seconds (10.0); |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
54 |
* Time<2> t3 = t1 * t2; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
55 |
* Time<0> t4 = t1 / t2; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
56 |
* Time<3> t5 = t3 * t1; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
57 |
* Time<-2> t6 = t1 / t5; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
58 |
* TimeSquare t7 = t3; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
59 |
* Scalar s = t4; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
60 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
61 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
62 |
* If you try to assign the result of an expression which does not |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
63 |
* match the type of the variable it is assigned to, you will get a |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
64 |
* compiler error. For example, the following will not compile: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
65 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
66 |
* Time<1> = Seconds (10.0) * Seconds (1.5); |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
67 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
68 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
69 |
* You can also use the following non-member functions to manipulate |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
70 |
* any of these ns3::TimeUnit object: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
71 |
* - \ref ns3-Time-Abs ns3::Abs |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
72 |
* - \ref ns3-Time-Max ns3::Max |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
73 |
* - \ref ns3-Time-Min ns3::Min |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
74 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
75 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
76 |
class TimeUnit |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
77 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
78 |
public: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
79 |
TimeUnit (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
80 |
TimeUnit (TimeUnit const &o); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
81 |
TimeUnit operator = (TimeUnit const &o); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
82 |
TimeUnit (HighPrecision data); |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
83 |
|
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
84 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
85 |
* \return the ns3::HighPrecision object which holds the value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
86 |
* stored in this Time<N> type. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
87 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
88 |
HighPrecision GetHighPrecision (void) const; |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
89 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
90 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
91 |
* \return true if the time is zero, false otherwise. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
92 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
93 |
bool IsZero (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
94 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
95 |
* \return true if the time is negative or zero, false otherwise. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
96 |
*/ |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
144
diff
changeset
|
97 |
bool IsNegative (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
98 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
99 |
* \return true if the time is positive or zero, false otherwise. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
100 |
*/ |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
144
diff
changeset
|
101 |
bool IsPositive (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
102 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
103 |
* \return true if the time is strictly negative, false otherwise. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
104 |
*/ |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
144
diff
changeset
|
105 |
bool IsStrictlyNegative (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
106 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
107 |
* \return true if the time is strictly positive, false otherwise. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
108 |
*/ |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
144
diff
changeset
|
109 |
bool IsStrictlyPositive (void) const; |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
110 |
|
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
111 |
private: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
112 |
HighPrecision m_data; |
25
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
113 |
}; |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
114 |
|
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
115 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
116 |
TimeUnit<N>::TimeUnit () |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
117 |
: m_data () |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
118 |
{} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
119 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
120 |
TimeUnit<N>::TimeUnit (TimeUnit const &o) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
121 |
: m_data (o.m_data) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
122 |
{} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
123 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
124 |
TimeUnit<N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
125 |
TimeUnit<N>::operator = (TimeUnit const &o) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
126 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
127 |
m_data = o.m_data; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
128 |
return *this; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
129 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
130 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
131 |
TimeUnit<N>::TimeUnit (HighPrecision data) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
132 |
: m_data (data) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
133 |
{} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
134 |
|
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
135 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
136 |
HighPrecision |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
137 |
TimeUnit<N>::GetHighPrecision (void) const |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
138 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
139 |
return m_data; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
140 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
141 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
142 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
143 |
TimeUnit<N>::IsZero (void) const |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
144 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
145 |
return m_data.Compare (HighPrecision::Zero ()) == 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
146 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
147 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
148 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
149 |
TimeUnit<N>::IsNegative (void) const |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
150 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
151 |
return m_data.Compare (HighPrecision::Zero ()) <= 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
152 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
153 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
154 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
155 |
TimeUnit<N>::IsPositive (void) const |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
156 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
157 |
return m_data.Compare (HighPrecision::Zero ()) >= 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
158 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
159 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
160 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
161 |
TimeUnit<N>::IsStrictlyNegative (void) const |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
162 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
163 |
return m_data.Compare (HighPrecision::Zero ()) < 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
164 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
165 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
166 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
167 |
TimeUnit<N>::IsStrictlyPositive (void) const |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
168 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
169 |
return m_data.Compare (HighPrecision::Zero ()) > 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
170 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
171 |
|
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
172 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
173 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
174 |
operator == (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
175 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
176 |
return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) == 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
177 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
178 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
179 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
180 |
operator <= (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
181 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
182 |
return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) <= 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
183 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
184 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
185 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
186 |
operator >= (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
187 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
188 |
return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) >= 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
189 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
190 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
191 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
192 |
operator < (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
193 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
194 |
return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) < 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
195 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
196 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
197 |
bool |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
198 |
operator > (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
199 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
200 |
return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) > 0; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
201 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
202 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
203 |
TimeUnit<N> operator + (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
204 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
205 |
HighPrecision retval = lhs.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
206 |
bool overflow = retval.Add (rhs.GetHighPrecision ()); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
207 |
assert (!overflow); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
208 |
return TimeUnit<N> (retval); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
209 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
210 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
211 |
TimeUnit<N> operator - (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
212 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
213 |
HighPrecision retval = lhs.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
214 |
bool overflow = retval.Sub (rhs.GetHighPrecision ()); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
215 |
assert (!overflow); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
216 |
return TimeUnit<N> (retval); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
217 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
218 |
template <int N1, int N2> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
219 |
TimeUnit<N1+N2> operator * (TimeUnit<N1> const &lhs, TimeUnit<N2> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
220 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
221 |
HighPrecision retval = lhs.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
222 |
bool overflow = retval.Mul (rhs.GetHighPrecision ()); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
223 |
assert (!overflow); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
224 |
return TimeUnit<N1+N2> (retval); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
225 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
226 |
template <int N1, int N2> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
227 |
TimeUnit<N1-N2> operator / (TimeUnit<N1> const &lhs, TimeUnit<N2> const &rhs) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
228 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
229 |
HighPrecision retval = lhs.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
230 |
bool underflow = retval.Div (rhs.GetHighPrecision ()); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
231 |
assert (!underflow); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
232 |
return TimeUnit<N1-N2> (retval); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
233 |
} |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
234 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
235 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
236 |
* \anchor ns3-Time-Abs |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
237 |
* \relates ns3::TimeUnit |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
238 |
* \param time the input value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
239 |
* \returns the absolute value of the input value. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
240 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
241 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
242 |
TimeUnit<N> Abs (TimeUnit<N> const &time) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
243 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
244 |
return TimeUnit<N> (Abs (time.GetHighPrecision ())); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
245 |
} |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
246 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
247 |
* \anchor ns3-Time-Max |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
248 |
* \relates ns3::TimeUnit |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
249 |
* \param ta the first value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
250 |
* \param tb the seconds value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
251 |
* \returns the max of the two input values. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
252 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
253 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
254 |
TimeUnit<N> Max (TimeUnit<N> const &ta, TimeUnit<N> const &tb) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
255 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
256 |
HighPrecision a = ta.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
257 |
HighPrecision b = tb.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
258 |
return TimeUnit<N> (Max (a, b)); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
259 |
} |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
260 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
261 |
* \anchor ns3-Time-Min |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
262 |
* \relates ns3::TimeUnit |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
263 |
* \param ta the first value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
264 |
* \param tb the seconds value |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
265 |
* \returns the min of the two input values. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
266 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
267 |
template <int N> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
268 |
TimeUnit<N> Min (TimeUnit<N> const &ta, TimeUnit<N> const &tb) |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
269 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
270 |
HighPrecision a = ta.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
271 |
HighPrecision b = tb.GetHighPrecision (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
272 |
return TimeUnit<N> (Max (a, b)); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
273 |
} |
151
8395af452e55
add Scale/Min/Max/Abs non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
274 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
275 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
276 |
* \brief keep track of seconds. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
277 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
278 |
* This is an instance of type ns3::TimeUnit<1>: it is |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
279 |
* the return value of the ns3::Simulator::Now method |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
280 |
* and is needed for the Simulator::Schedule methods |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
281 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
282 |
* Time instances can be created through any of the following classes: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
283 |
* - ns3::Seconds |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
284 |
* - ns3::MilliSeconds |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
285 |
* - ns3::MicroSeconds |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
286 |
* - ns3::NanoSeconds |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
287 |
* - ns3::Now |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
288 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
289 |
* Time instances can be added, substracted, multipled and divided using |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
290 |
* the standard C++ operators (if you make sure to obey the rules |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
291 |
* of the ns3::TimeUnit class template) |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
292 |
* To scale a Time instance, you can multiply it with an instance of |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
293 |
* the ns3::Scalar class. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
294 |
* Time instances can also be manipulated through the following non-member |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
295 |
* functions: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
296 |
* - \ref ns3-Time-Abs ns3::Abs |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
297 |
* - \ref ns3-Time-Max ns3::Max |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
298 |
* - \ref ns3-Time-Min ns3::Min |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
299 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
300 |
class Time : public TimeUnit<1> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
301 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
302 |
public: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
303 |
Time (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
304 |
Time (TimeUnit<1> time); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
305 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
306 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
307 |
* \returns an approximation in seconds of the time stored in this |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
308 |
* instance. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
309 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
310 |
double ApproximateToSeconds (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
311 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
312 |
* \returns an approximation in milliseconds of the time stored in this |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
313 |
* instance. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
314 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
315 |
int32_t ApproximateToMilliSeconds (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
316 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
317 |
* \returns an approximation in microseconds of the time stored in this |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
318 |
* instance. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
319 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
320 |
int64_t ApproximateToMicroSeconds (void) const; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
321 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
322 |
* \returns an approximation in nanoseconds of the time stored in this |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
323 |
* instance. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
324 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
325 |
int64_t ApproximateToNanoSeconds (void) const; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
326 |
}; |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
327 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
328 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
329 |
* \brief create ns3::Time instances in units of seconds. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
330 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
331 |
* For example: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
332 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
333 |
* Time t = Seconds (2.0); |
162
5b398ac221c7
make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
159
diff
changeset
|
334 |
* Simulator::Schedule (NanoSeconds (5.0), ...); |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
335 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
336 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
337 |
class Seconds : public TimeUnit<1> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
338 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
339 |
public: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
340 |
Seconds (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
341 |
Seconds (double seconds); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
342 |
}; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
343 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
344 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
345 |
* \brief create ns3::Time instances in units of milliseconds. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
346 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
347 |
* For example: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
348 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
349 |
* Time t = MilliSeconds (2); |
162
5b398ac221c7
make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
159
diff
changeset
|
350 |
* Simulator::Schedule (MilliSeconds (5), ...); |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
351 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
352 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
353 |
class MilliSeconds : public TimeUnit<1> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
354 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
355 |
public: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
356 |
MilliSeconds (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
357 |
MilliSeconds (uint32_t ms); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
358 |
}; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
359 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
360 |
* \brief create ns3::Time instances in units of microseconds. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
361 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
362 |
* For example: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
363 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
364 |
* Time t = MicroSeconds (2); |
162
5b398ac221c7
make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
159
diff
changeset
|
365 |
* Simulator::Schedule (MicroSeconds (5), ...); |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
366 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
367 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
368 |
class MicroSeconds : public TimeUnit<1> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
369 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
370 |
public: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
371 |
MicroSeconds (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
372 |
MicroSeconds (uint32_t ms); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
373 |
}; |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
374 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
375 |
* \brief create ns3::Time instances in units of nanoseconds. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
376 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
377 |
* For example: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
378 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
379 |
* Time t = NanoSeconds (2); |
162
5b398ac221c7
make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
159
diff
changeset
|
380 |
* Simulator::Schedule (NanoSeconds (5), ...); |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
381 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
382 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
383 |
class NanoSeconds : public TimeUnit<1> |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
384 |
{ |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
385 |
public: |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
386 |
NanoSeconds (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
387 |
NanoSeconds (uint32_t ms); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
388 |
}; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
389 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
390 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
391 |
* \brief create an ns3::Time instance which contains the |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
392 |
* current simulation time. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
393 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
394 |
* This is really a shortcut for the ns3::Simulator::Now method. |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
395 |
* It is typically used as shown below to schedule an event |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
396 |
* which expires in 2 seconds from now: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
397 |
* \code |
162
5b398ac221c7
make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
159
diff
changeset
|
398 |
* Simulator::Schedule (Seconds (2.0), &my_function); |
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
399 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
400 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
401 |
class Now : public Time |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
402 |
{ |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
403 |
public: |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
144
diff
changeset
|
404 |
Now (); |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
405 |
}; |
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
406 |
|
159
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
407 |
/** |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
408 |
* \brief hold scalar values |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
409 |
* |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
410 |
* This class is used both to construct scalar values to multiply |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
411 |
* ns3::Time instances and to hold the return value of |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
412 |
* an expression which returns a scalar. For example, the |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
413 |
* following code will output on your terminal 1.5: |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
414 |
* \code |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
415 |
* Scalar s0 = Scalar (1.5); |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
416 |
* Time t1 = Seconds (10.0) * s0; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
417 |
* Time t2 = Seconds (10.0) * Scalar (2.5); |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
418 |
* Scalar s1 = Seconds (15.0) / Seconds (10.0); |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
419 |
* std::cout << s1.GetDouble () << std::endl; |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
420 |
* \endcode |
e2c8e211039e
add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
158
diff
changeset
|
421 |
*/ |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
422 |
class Scalar : public TimeUnit<0> |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
423 |
{ |
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
424 |
public: |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
425 |
Scalar (); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
426 |
Scalar (double scalar); |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
427 |
Scalar (TimeUnit<0> scalar); |
158
47af319de4b8
implement Scalar::GetDouble
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
156
diff
changeset
|
428 |
double GetDouble (void) const; |
143
552ff26b4224
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
131
diff
changeset
|
429 |
}; |
156
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
430 |
|
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
431 |
typedef TimeUnit<-1> TimeInvert; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
432 |
typedef TimeUnit<2> TimeSquare; |
3b1563e95ea7
new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
151
diff
changeset
|
433 |
|
25
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
434 |
|
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
435 |
}; // namespace ns3 |
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
436 |
|
9b3bb088c560
first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
437 |
#endif /* TIME_H */ |