src/simulator/nstime.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 02 Feb 2007 19:14:16 +0100
changeset 212 e6c88c1bcc85
parent 209 8b343b9727d7
child 215 462cdd13a69e
permissions -rw-r--r--
added useless Time::Seconds method when doing testing for the removal of the Seconds class. Remove it.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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>
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
    26
#include <ostream>
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    27
#include "high-precision.h"
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
namespace ns3 {
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    31
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    32
 * \brief keep track of time unit.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    33
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    34
 * 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
    35
 * 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
    36
 * 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
    37
 * 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
    38
 * keep track of 1/seconds, etc.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    39
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    40
 * 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
    41
 * 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
    42
 * 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
    43
 * ==, !=, <, >, <=, >=. 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
    44
 * 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
    45
 * 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
    46
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    47
 * 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
    48
 * 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
    49
 * types respectively.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    50
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    51
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    52
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    53
 * Time<1> t1 = Seconds (10.0);
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    54
 * Time<1> t2 = Seconds (10.0);
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    55
 * Time<2> t3 = t1 * t2;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    56
 * Time<0> t4 = t1 / t2;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    57
 * Time<3> t5 = t3 * t1;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    58
 * Time<-2> t6 = t1 / t5;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    59
 * TimeSquare t7 = t3;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    60
 * Scalar s = t4;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    61
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    62
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    63
 * 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
    64
 * 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
    65
 * 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
    66
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    67
 * 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
    68
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    69
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    70
 * 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
    71
 * any of these ns3::TimeUnit object:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    72
 *  - \ref ns3-Time-Abs ns3::Abs
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    73
 *  - \ref ns3-Time-Max ns3::Max
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    74
 *  - \ref ns3-Time-Min ns3::Min
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    75
 */
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    76
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    77
class TimeUnit
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    78
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    79
public:
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    80
  TimeUnit ();
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    81
  TimeUnit (TimeUnit const &o);
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    82
  TimeUnit operator = (TimeUnit const &o);
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    83
  TimeUnit (HighPrecision data);
159
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
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    86
   * \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
    87
   */
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
    88
  bool IsZero (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    89
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    90
   * \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
    91
   */
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
    92
  bool IsNegative (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    93
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    94
   * \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
    95
   */
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
    96
  bool IsPositive (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    97
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    98
   * \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
    99
   */
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   100
  bool IsStrictlyNegative (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   101
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   102
   * \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
   103
   */
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   104
  bool IsStrictlyPositive (void) const;
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   105
170
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   106
  /**
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   107
   * This is really an internal method exported for the needs of
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   108
   * the implementation. Please, Do not try to use this method, ever.
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   109
   *
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   110
   * \return the ns3::HighPrecision object which holds the value 
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   111
   *         stored in this Time<N> type.
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   112
   */
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   113
  HighPrecision GetHighPrecision (void) const;
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   114
  HighPrecision *PeekHighPrecision (void);
170
9f68cb694f40 implement 128 bit arithmetic with cairo's internal types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   115
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   116
private:
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   117
  HighPrecision m_data;
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
};
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   120
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   121
TimeUnit<N>::TimeUnit ()
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   122
  : m_data ()
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   123
{}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   124
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   125
TimeUnit<N>::TimeUnit (TimeUnit const &o)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   126
  : m_data (o.m_data)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   127
{}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   128
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   129
TimeUnit<N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   130
TimeUnit<N>::operator = (TimeUnit const &o)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   131
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   132
  m_data = o.m_data;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   133
  return *this;
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
TimeUnit<N>::TimeUnit (HighPrecision data)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   137
  : m_data (data)
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
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   140
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   141
HighPrecision
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   142
TimeUnit<N>::GetHighPrecision (void) const
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   143
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   144
  return m_data;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   145
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   146
template <int N>
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   147
HighPrecision *
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   148
TimeUnit<N>::PeekHighPrecision (void)
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   149
{
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   150
  return &m_data;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   151
}
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   152
template <int N>
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   153
bool
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   154
TimeUnit<N>::IsZero (void) const
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   155
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   156
  return m_data.Compare (HighPrecision::Zero ()) == 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   157
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   158
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   159
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   160
TimeUnit<N>::IsNegative (void) const
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   161
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   162
  return m_data.Compare (HighPrecision::Zero ()) <= 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   163
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   164
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   165
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   166
TimeUnit<N>::IsPositive (void) const
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   167
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   168
  return m_data.Compare (HighPrecision::Zero ()) >= 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   169
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   170
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   171
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   172
TimeUnit<N>::IsStrictlyNegative (void) const
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   173
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   174
  return m_data.Compare (HighPrecision::Zero ()) < 0;
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
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   177
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   178
TimeUnit<N>::IsStrictlyPositive (void) const
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   179
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   180
  return m_data.Compare (HighPrecision::Zero ()) > 0;
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
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   183
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   184
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   185
operator == (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   186
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   187
  return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) == 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   188
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   189
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   190
bool 
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   191
operator != (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs)
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   192
{
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   193
  return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) != 0;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   194
}
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   195
template <int N>
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   196
bool 
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   197
operator <= (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   198
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   199
  return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) <= 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   200
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   201
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   202
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   203
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
  return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) >= 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   206
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   207
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   208
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   209
operator < (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   210
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   211
  return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) < 0;
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
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   214
bool 
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   215
operator > (TimeUnit<N> const &lhs, TimeUnit<N> const &rhs)
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   216
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   217
  return lhs.GetHighPrecision ().Compare (rhs.GetHighPrecision ()) > 0;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   218
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   219
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   220
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
   221
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   222
  HighPrecision retval = lhs.GetHighPrecision ();
192
cdb44e98954c fix warnings for optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 170
diff changeset
   223
  retval.Add (rhs.GetHighPrecision ());
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   224
  return TimeUnit<N> (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 N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   227
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
   228
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   229
  HighPrecision retval = lhs.GetHighPrecision ();
192
cdb44e98954c fix warnings for optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 170
diff changeset
   230
  retval.Sub (rhs.GetHighPrecision ());
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   231
  return TimeUnit<N> (retval);
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   232
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   233
template <int N1, int N2>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   234
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
   235
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   236
  HighPrecision retval = lhs.GetHighPrecision ();
192
cdb44e98954c fix warnings for optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 170
diff changeset
   237
  retval.Mul (rhs.GetHighPrecision ());
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   238
  return TimeUnit<N1+N2> (retval);
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   239
}
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   240
template <int N1, int N2>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   241
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
   242
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   243
  HighPrecision retval = lhs.GetHighPrecision ();
192
cdb44e98954c fix warnings for optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 170
diff changeset
   244
  retval.Div (rhs.GetHighPrecision ());
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   245
  return TimeUnit<N1-N2> (retval);
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   246
}
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   247
template <int N>
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   248
TimeUnit<N> &operator += (TimeUnit<N> &lhs, TimeUnit<N> const &rhs) {
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   249
  HighPrecision *lhsv = lhs.PeekHighPrecision ();
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   250
  lhsv->Add (rhs.GetHighPrecision ());
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   251
  return lhs;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   252
}
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   253
template <int N>
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   254
TimeUnit<N> &operator -= (TimeUnit<N> &lhs, TimeUnit<N> const &rhs) {
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   255
  HighPrecision *lhsv = lhs.PeekHighPrecision ();
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   256
  lhsv->Sub (rhs.GetHighPrecision ());
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   257
  return lhs;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   258
}
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   259
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   260
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   261
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   262
 * \anchor ns3-Time-Abs
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   263
 * \relates ns3::TimeUnit
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   264
 * \param time the input value
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   265
 * \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
   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> Abs (TimeUnit<N> const &time)
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
  return TimeUnit<N> (Abs (time.GetHighPrecision ()));
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   271
}
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   272
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   273
 * \anchor ns3-Time-Max
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   274
 * \relates ns3::TimeUnit
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   275
 * \param ta the first value
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   276
 * \param tb the seconds value
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   277
 * \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
   278
 */
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   279
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   280
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
   281
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   282
  HighPrecision a = ta.GetHighPrecision ();
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   283
  HighPrecision b = tb.GetHighPrecision ();  
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   284
  return TimeUnit<N> (Max (a, b));
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   285
}
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   286
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   287
 * \anchor ns3-Time-Min
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   288
 * \relates ns3::TimeUnit
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   289
 * \param ta the first value
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   290
 * \param tb the seconds value
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   291
 * \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
   292
 */
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   293
template <int N>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   294
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
   295
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   296
  HighPrecision a = ta.GetHighPrecision ();
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   297
  HighPrecision b = tb.GetHighPrecision ();  
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   298
  return TimeUnit<N> (Max (a, b));
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   299
}
151
8395af452e55 add Scale/Min/Max/Abs non-member functions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   300
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   301
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   302
 * \brief keep track of seconds.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   303
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   304
 * 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
   305
 * 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
   306
 * 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
   307
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   308
 * 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
   309
 *  - ns3::Seconds
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   310
 *  - ns3::MilliSeconds
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   311
 *  - ns3::MicroSeconds
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   312
 *  - ns3::NanoSeconds
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   313
 *  - ns3::Now
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   314
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   315
 * 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
   316
 * 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
   317
 * of the ns3::TimeUnit class template)
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   318
 * 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
   319
 * the ns3::Scalar class.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   320
 * 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
   321
 * functions:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   322
 *  - \ref ns3-Time-Abs ns3::Abs
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   323
 *  - \ref ns3-Time-Max ns3::Max
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   324
 *  - \ref ns3-Time-Min ns3::Min
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   325
 */
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   326
class Time : public TimeUnit<1>
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   327
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   328
public:
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   329
  Time ();
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   330
  Time (TimeUnit<1> time);
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   331
  Time (HighPrecision const& value);
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   332
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   333
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   334
   * \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
   335
   *          instance.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   336
   */
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   337
  double GetSeconds (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   338
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   339
   * \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
   340
   *          instance.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   341
   */
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   342
  int32_t GetMilliSeconds (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   343
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   344
   * \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
   345
   *          instance.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   346
   */
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   347
  int64_t GetMicroSeconds (void) const;
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   348
  /**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   349
   * \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
   350
   *          instance.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   351
   */
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   352
  int64_t GetNanoSeconds (void) const;
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   353
};
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   354
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   355
std::ostream& operator<< (std::ostream& os, Time const& time);
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   356
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   357
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   358
 * \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
   359
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   360
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   361
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   362
 * Time t = Seconds (2.0);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   363
 * Simulator::Schedule (NanoSeconds (5.0), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   364
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   365
 */
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   366
Time Seconds (double seconds);
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   367
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   368
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   369
 * \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
   370
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   371
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   372
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   373
 * Time t = MilliSeconds (2);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   374
 * Simulator::Schedule (MilliSeconds (5), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   375
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   376
 */
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   377
Time MilliSeconds (uint32_t ms);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   378
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   379
 * \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
   380
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   381
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   382
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   383
 * Time t = MicroSeconds (2);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   384
 * Simulator::Schedule (MicroSeconds (5), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   385
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   386
 */
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   387
Time MicroSeconds (uint64_t us);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   388
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   389
 * \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
   390
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   391
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   392
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   393
 * Time t = NanoSeconds (2);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   394
 * Simulator::Schedule (NanoSeconds (5), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   395
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   396
 */
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   397
Time NanoSeconds (uint64_t ns);
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   398
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   399
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   400
 * \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
   401
 *        current simulation time.
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   402
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   403
 * 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
   404
 * It is typically used as shown below to schedule an event
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   405
 * which expires at the absolute time "2 seconds":
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   406
 * \code
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   407
 * Simulator::Schedule (Seconds (2.0) - Now (), &my_function);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   408
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   409
 */
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 199
diff changeset
   410
Time Now (void);
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   411
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   412
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   413
 * \brief hold scalar values
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   414
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   415
 * 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
   416
 * 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
   417
 * 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
   418
 * 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
   419
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   420
 * Scalar s0 = Scalar (1.5);
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   421
 * Time t1 = Seconds (10.0) * s0;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   422
 * 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
   423
 * 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
   424
 * std::cout << s1.GetDouble () << std::endl;
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   425
 * \endcode
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   426
 */
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   427
class Scalar : public TimeUnit<0>
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   428
{
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   429
public:
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   430
  Scalar ();
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   431
  Scalar (double scalar);
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   432
  Scalar (TimeUnit<0> scalar);
158
47af319de4b8 implement Scalar::GetDouble
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 156
diff changeset
   433
  double GetDouble (void) const;
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   434
};
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   435
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   436
typedef TimeUnit<-1> TimeInvert;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   437
typedef TimeUnit<2> TimeSquare;
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   438
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
}; // namespace ns3
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   441
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
#endif /* TIME_H */