src/core/model/nstime.h
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Mon, 15 Jul 2013 15:08:10 -0700
changeset 9950 9963d622b120
parent 9906 46fc267f8b23
child 9972 7805771a836a
permissions -rw-r--r--
Change to Time::Min () and Time::Max () This avoids a conflict with a (pending) Time::MIN unit.
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
 *
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * 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
     6
 * 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
     7
 * 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
     8
 *
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * 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
    10
 * 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
    11
 * 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
    12
 * 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
    13
 *
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * 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
    15
 * 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
    16
 * 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
    17
 *
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * 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
    19
 */
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#ifndef TIME_H
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#define TIME_H
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
7383
c5e131450339 remove ns3/ prefix which is un-needed now that all files are in same module.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7256
diff changeset
    23
#include "assert.h"
c5e131450339 remove ns3/ prefix which is un-needed now that all files are in same module.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7256
diff changeset
    24
#include "attribute.h"
c5e131450339 remove ns3/ prefix which is un-needed now that all files are in same module.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7256
diff changeset
    25
#include "attribute-helper.h"
c5e131450339 remove ns3/ prefix which is un-needed now that all files are in same module.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7256
diff changeset
    26
#include "int64x64.h"
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include <stdint.h>
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
    28
#include <limits>
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7600
diff changeset
    29
#include <cmath>
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
    30
#include <ostream>
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
namespace ns3 {
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
    34
/**
7149
87514e0d866b Fix doxygen groups for some new modules
Mitch Watrous <watrous@u.washington.edu>
parents: 7083
diff changeset
    35
 * \ingroup core
3182
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2972
diff changeset
    36
 * \defgroup time Time
3222
f61c17b62fd1 bug 202: classes disappeared from doxygen output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    37
 */
f61c17b62fd1 bug 202: classes disappeared from doxygen output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    38
/**
f61c17b62fd1 bug 202: classes disappeared from doxygen output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    39
 * \ingroup time
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    40
 * \brief keep track of time values and allow control of global simulation resolution
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    41
 *
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    42
 * This class defines all the classic C++ arithmetic
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    43
 * operators +, -, *, /, and all the classic comparison operators:
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    44
 * ==, !=, <, >, <=, >=. It is thus easy to add, substract, or
9890
3c64a1fbfcf9 Repair Time docs mangled by f0be2daaa38f
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9195
diff changeset
    45
 * multiply Time objects.
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    46
 *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    47
 * For example:
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    48
 * \code
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    49
 * Time t1 = Seconds (10.0);
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    50
 * Time t2 = Seconds (10.0);
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    51
 * Time t3 = t1 * t2;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    52
 * Time t4 = t1 / t2;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    53
 * Time t5 = t3 * t1;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    54
 * Time t6 = t1 / t5;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    55
 * Time t7 = t3;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    56
 * \endcode
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    57
 *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    58
 * You can also use the following non-member functions to manipulate
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    59
 * any of these ns3::Time object:
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    60
 *  - \ref ns3-Time-Abs ns3::Abs
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    61
 *  - \ref ns3-Time-Max ns3::Max
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    62
 *  - \ref ns3-Time-Min ns3::Min
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    63
 *
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    64
 * This class also controls
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    65
 * the resolution of the underlying time value . The default resolution
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    66
 * is nanoseconds. That is, TimeStep (1).GetNanoSeconds () will return
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    67
 * 1. It is possible to either increase or decrease the resolution and the
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    68
 * code tries really hard to make this easy.
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    69
 *
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    70
 * If your resolution is X (say, nanoseconds) and if you create Time objects 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    71
 * with a lower resolution (say, picoseconds), don't expect that this 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    72
 * code will return 1: PicoSeconds (1).GetPicoSeconds (). It will most 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    73
 * likely return 0 because the Time object has only 64 bits of fractional 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    74
 * precision which means that PicoSeconds (1) is stored as a 64-bit aproximation
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    75
 * of 1/1000 in the Time object. If you later multiply it again by the exact 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    76
 * value 1000, the result is unlikely to be 1 exactly. It will be close to
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    77
 * 1 but not exactly 1.
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    78
 * 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    79
 * In general, it is thus a really bad idea to try to use time objects of a
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    80
 * resolution higher than the global resolution controlled through 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    81
 * Time::SetResolution. If you do need to use picoseconds, it's thus best
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    82
 * to switch the global resolution to picoseconds to avoid nasty surprises.
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    83
 *
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    84
 * Another important issue to keep in mind is that if you increase the
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    85
 * global resolution, you also implicitely decrease the range of your simulation.
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    86
 * i.e., the global simulation time is stored in a 64 bit integer whose interpretation
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    87
 * will depend on the global resolution so, 2^64 picoseconds which is the maximum
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    88
 * duration of your simulation if the global resolution is picoseconds 
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    89
 * is smaller than 2^64 nanoseconds which is the maximum duration of your simulation
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    90
 * if the global resolution is nanoseconds.
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
    91
 *
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    92
 * Finally, don't even think about ever changing the global resolution after
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    93
 * creating Time objects: all Time objects created before the call to SetResolution
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    94
 * will contain values which are not updated to the new resolution. In practice,
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    95
 * the default value for the attributes of many models is indeed calculated
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    96
 * before the main function of the main program enters. Because of this, if you
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    97
 * use one of these models (and it's likely), it's going to be hard to change
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    98
 * the global simulation resolution in a way which gives reasonable results. This
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
    99
 * issue has been filed as bug 954 in the ns-3 bugzilla installation.
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   100
 */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   101
class Time
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   102
{
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   103
public:
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   104
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   105
   * The unit to use to interpret a number representing time
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   106
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   107
  enum Unit
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   108
  {
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   109
    S  = 0,
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   110
    MS = 1,
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   111
    US = 2,
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   112
    NS = 3,
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   113
    PS = 4,
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   114
    FS = 5,
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   115
    LAST = 6
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   116
  };
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   118
  inline Time &operator = (const Time &o)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   119
  {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   120
    m_data = o.m_data;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   121
    return *this;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   122
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   123
  inline Time ()
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   124
    : m_data ()
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   125
  {}
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   126
  inline Time(const Time &o)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   127
    : m_data (o.m_data)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   128
  {}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   129
  explicit inline Time (double v)
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7169
diff changeset
   130
    : m_data (lround (v))
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   131
  {}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   132
  explicit inline Time (int v)
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   133
    : m_data (v)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   134
  {}
7037
76d6e8e13cb3 add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7036
diff changeset
   135
  explicit inline Time (long int v)
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   136
    : m_data (v)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   137
  {}
7037
76d6e8e13cb3 add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7036
diff changeset
   138
  explicit inline Time (long long int v)
76d6e8e13cb3 add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7036
diff changeset
   139
    : m_data (v)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   140
  {}
7037
76d6e8e13cb3 add missing constructors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7036
diff changeset
   141
  explicit inline Time (unsigned int v)
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   142
    : m_data (v)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   143
  {}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   144
  explicit inline Time (unsigned long int v)
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   145
    : m_data (v)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   146
  {}
7033
7adf8cfb1a20 add missing constructor
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7032
diff changeset
   147
  explicit inline Time (unsigned long long int v)
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   148
    : m_data (v)
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   149
  {}
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   150
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   151
  /**
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   152
   * \brief String constructor
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   153
   * Construct Time object from common time expressions like "
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   154
   * 1ms" or "10s".  Supported units include:
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   155
   * - s  (seconds)
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   156
   * - ms (milliseconds)
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   157
   * - us (microseconds)
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   158
   * - ns (nanoseconds)
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   159
   * - ps (picoseconds)
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   160
   * - fs (femtoseconds)
372
c242f488ef0b Added back corrected version of TimeUnit(string)
Raj@rajib-bhattacharjeas-computer.local
parents: 367
diff changeset
   161
   *
c242f488ef0b Added back corrected version of TimeUnit(string)
Raj@rajib-bhattacharjeas-computer.local
parents: 367
diff changeset
   162
   * There can be no white space between the numerical portion
c242f488ef0b Added back corrected version of TimeUnit(string)
Raj@rajib-bhattacharjeas-computer.local
parents: 367
diff changeset
   163
   * and the units.  Any otherwise malformed string causes a fatal error to
c242f488ef0b Added back corrected version of TimeUnit(string)
Raj@rajib-bhattacharjeas-computer.local
parents: 367
diff changeset
   164
   * occur.
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   165
   * \param s The string to parse into a Time
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   166
   */
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   167
  explicit Time (const std::string & s);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   168
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   169
  /**
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   170
   * \brief Minimum representable Time
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   171
   */
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
   172
  static Time Min ()
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   173
  {
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
   174
    return Time (std::numeric_limits<int64_t>::min ());
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   175
  }
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   176
  /**
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   177
   * \brief Maximum representable Time
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   178
   */
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
   179
  static Time Max ()
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   180
  {
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
   181
    return Time (std::numeric_limits<int64_t>::max ());
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   182
  }
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   183
  
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   184
  /**
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   185
   * \return true if the time is zero, false otherwise.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   186
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   187
  inline bool IsZero (void) const
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   188
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   189
    return m_data == 0;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   190
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   191
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   192
   * \return true if the time is negative or zero, false otherwise.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   193
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   194
  inline bool IsNegative (void) const
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   195
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   196
    return m_data <= 0;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   197
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   198
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   199
   * \return true if the time is positive or zero, false otherwise.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   200
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   201
  inline bool IsPositive (void) const
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   202
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   203
    return m_data >= 0;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   204
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   205
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   206
   * \return true if the time is strictly negative, false otherwise.
372
c242f488ef0b Added back corrected version of TimeUnit(string)
Raj@rajib-bhattacharjeas-computer.local
parents: 367
diff changeset
   207
   */
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   208
  inline bool IsStrictlyNegative (void) const
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   209
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   210
    return m_data < 0;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   211
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   212
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   213
   * \return true if the time is strictly positive, false otherwise.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   214
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   215
  inline bool IsStrictlyPositive (void) const
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   216
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   217
    return m_data > 0;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   218
  }
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   219
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   220
  inline int Compare (const Time &o) const
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   221
  {
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   222
    return (m_data < o.m_data) ? -1 : (m_data == o.m_data) ? 0 : 1;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   223
  }
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   224
372
c242f488ef0b Added back corrected version of TimeUnit(string)
Raj@rajib-bhattacharjeas-computer.local
parents: 367
diff changeset
   225
  /**
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   226
   * \returns an approximation in seconds of the time stored in this
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   227
   *          instance.
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   228
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   229
  inline double GetSeconds (void) const
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   230
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   231
    return ToDouble (Time::S);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   232
  }
676
0cf407300fa6 Fixed the problems that were found by Mathieu Lacage in the first
Emmanuelle Laprise
parents: 675
diff changeset
   233
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   234
  /**
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   235
   * \returns an approximation in milliseconds of the time stored in this
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   236
   *          instance.
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5836
diff changeset
   237
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   238
  inline int64_t GetMilliSeconds (void) const
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   239
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   240
    return ToInteger (Time::MS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   241
  }
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   242
  /**
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   243
   * \returns an approximation in microseconds of the time stored in this
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   244
   *          instance.
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   245
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   246
  inline int64_t GetMicroSeconds (void) const
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   247
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   248
    return ToInteger (Time::US);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   249
  }
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   250
  /**
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   251
   * \returns an approximation in nanoseconds of the time stored in this
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   252
   *          instance.
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   253
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   254
  inline int64_t GetNanoSeconds (void) const
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   255
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   256
    return ToInteger (Time::NS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   257
  }
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   258
  /**
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   259
   * \returns an approximation in picoseconds of the time stored in this
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   260
   *          instance.
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   261
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   262
  inline int64_t GetPicoSeconds (void) const
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   263
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   264
    return ToInteger (Time::PS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   265
  }
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   266
  /**
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   267
   * \returns an approximation in femtoseconds of the time stored in this
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   268
   *          instance.
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   269
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   270
  inline int64_t GetFemtoSeconds (void) const
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   271
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   272
    return ToInteger (Time::FS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   273
  }
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   274
  /**
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   275
   * \returns an approximation of the time stored in this
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   276
   *          instance in the units specified in m_tsPrecision.
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   277
   */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   278
  inline int64_t GetTimeStep (void) const
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5836
diff changeset
   279
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   280
    return m_data;
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   281
  }
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   282
  inline double GetDouble (void) const
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   283
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   284
    return m_data;
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   285
  }
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   286
  inline int64_t GetInteger (void) const
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   287
  {
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   288
    return GetTimeStep ();
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   289
  }
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   290
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   291
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   292
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   293
   * \param resolution the new resolution to use
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   294
   *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   295
   * Change the global resolution used to convert all 
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   296
   * user-provided time values in Time objects and Time objects
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   297
   * in user-expected time units.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   298
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   299
  static void SetResolution (enum Unit resolution);
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   300
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   301
   * \returns the current global resolution.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   302
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   303
  static enum Unit GetResolution (void);
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   304
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   305
   * \param value to convert into a Time object
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   306
   * \param timeUnit the unit of the value to convert
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   307
   * \return a new Time object
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   308
   *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   309
   * This method interprets the input value according to the input
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   310
   * unit and constructs a matching Time object.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   311
   *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   312
   * \sa FromDouble, ToDouble, ToInteger
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   313
   */
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   314
  inline static Time FromInteger (uint64_t value, enum Unit timeUnit)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   315
  {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   316
    struct Information *info = PeekInformation (timeUnit);
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   317
    if (info->fromMul)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   318
      {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   319
        value *= info->factor;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   320
      }
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   321
    else
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   322
      {
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   323
        value /= info->factor;
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   324
      }
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   325
    return Time (value);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   326
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   327
  /**
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   328
   * \param timeUnit the unit of the value to return
7600
57ba46094a0d fix various doxygen errors
Vedran Miletić <rivanvx@gmail.com>
parents: 7445
diff changeset
   329
   * \return int64_t time value
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   330
   *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   331
   * Convert the input time into an integer value according to the requested
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   332
   * time unit.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   333
   */
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   334
  inline int64_t ToInteger (enum Unit timeUnit) const
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   335
  {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   336
    struct Information *info = PeekInformation (timeUnit);
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   337
    int64_t v = m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   338
    if (info->toMul)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   339
      {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   340
        v *= info->factor;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   341
      }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   342
    else
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   343
      {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   344
        v /= info->factor; 
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   345
      }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   346
    return v;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   347
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   348
  /**
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   349
   * \param value to convert into a Time object
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   350
   * \param timeUnit the unit of the value to convert
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   351
   * \return a new Time object
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   352
   *
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   353
   * \sa FromInteger, ToInteger, ToDouble
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   354
   */
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   355
  inline static Time FromDouble (double value, enum Unit timeUnit)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   356
  {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   357
    return From (int64x64_t (value), timeUnit);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   358
  }
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   359
  /**
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   360
   * \param timeUnit the unit of the value to return
7600
57ba46094a0d fix various doxygen errors
Vedran Miletić <rivanvx@gmail.com>
parents: 7445
diff changeset
   361
   * \return double time value
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   362
   *
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   363
   * Convert the input time into a floating point value according to the requested
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   364
   * time unit.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   365
   */
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   366
  inline double ToDouble (enum Unit timeUnit) const
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   367
  {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   368
    return To (timeUnit).GetDouble ();
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   369
  }
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   370
  static inline Time From (const int64x64_t &from, enum Unit timeUnit)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   371
  {
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   372
    struct Information *info = PeekInformation (timeUnit);
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   373
    // DO NOT REMOVE this temporary variable. It's here
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   374
    // to work around a compiler bug in gcc 3.4
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   375
    int64x64_t retval = from; 
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   376
    if (info->fromMul)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   377
      {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   378
        retval *= info->timeFrom;
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   379
      }
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   380
    else
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   381
      {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   382
        retval.MulByInvert (info->timeFrom);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   383
      }
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   384
    return Time (retval);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   385
  }
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   386
  inline int64x64_t To (enum Unit timeUnit) const
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   387
  {
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   388
    struct Information *info = PeekInformation (timeUnit);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   389
    int64x64_t retval = int64x64_t (m_data);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   390
    if (info->toMul)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   391
      {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   392
        retval *= info->timeTo;
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   393
      }
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   394
    else
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   395
      {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   396
        retval.MulByInvert (info->timeTo);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   397
      }
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   398
    return retval;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   399
  }
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7041
diff changeset
   400
  inline operator int64x64_t () const
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7041
diff changeset
   401
  {
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7041
diff changeset
   402
    return int64x64_t (m_data);
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7041
diff changeset
   403
  }
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7041
diff changeset
   404
  explicit inline Time (const int64x64_t &value)
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   405
    : m_data (value.GetHigh ())
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   406
  {}
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   407
  inline static Time From (const int64x64_t &value)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   408
  {
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   409
    return Time (value);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   410
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   411
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   412
private:
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   413
  struct Information
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   414
  {
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   415
    bool toMul;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   416
    bool fromMul;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   417
    uint64_t factor;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   418
    int64x64_t timeTo;
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   419
    int64x64_t timeFrom;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   420
  };
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   421
  struct Resolution
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   422
  {
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   423
    struct Information info[LAST];
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   424
    enum Time::Unit unit;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   425
  };
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   426
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   427
  static inline struct Resolution *PeekResolution (void)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   428
  {
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   429
    static struct Time::Resolution resolution = GetNsResolution ();
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   430
    return &resolution;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   431
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   432
  static inline struct Information *PeekInformation (enum Unit timeUnit)
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   433
  {
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   434
    return &(PeekResolution ()->info[timeUnit]);
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   435
  }
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   436
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   437
  static struct Resolution GetNsResolution (void);
9186
8934b7c0c1cb bug 954: avoid segfault upon startup due to recursion in TimeSet code to Simulator::Schedule
Mathieu Lacage <mathieu.lacage@cutebugs.net>
parents: 9183
diff changeset
   438
  static void SetResolution (enum Unit unit, struct Resolution *resolution);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   439
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   440
  friend bool operator == (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   441
  friend bool operator != (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   442
  friend bool operator <= (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   443
  friend bool operator >= (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   444
  friend bool operator < (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   445
  friend bool operator > (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   446
  friend Time operator + (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   447
  friend Time operator - (const Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   448
  friend Time &operator += (Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   449
  friend Time &operator -= (Time &lhs, const Time &rhs);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   450
  friend Time Abs (const Time &time);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   451
  friend Time Max (const Time &ta, const Time &tb);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   452
  friend Time Min (const Time &ta, const Time &tb);
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   453
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   454
  int64_t m_data;
339
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   455
};
0ce0402e419f make TimeUnit<1>.GetSeconds() work, and similar for scalars. Patch by Gustavo Carneiro.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   456
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   457
inline bool
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   458
operator == (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   459
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   460
  return lhs.m_data == rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   461
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   462
inline bool
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   463
operator != (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   464
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   465
  return lhs.m_data != rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   466
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   467
inline bool
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   468
operator <= (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   469
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   470
  return lhs.m_data <= rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   471
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   472
inline bool
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   473
operator >= (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   474
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   475
  return lhs.m_data >= rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   476
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   477
inline bool
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   478
operator < (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   479
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   480
  return lhs.m_data < rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   481
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   482
inline bool
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   483
operator > (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   484
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   485
  return lhs.m_data > rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   486
}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   487
inline Time operator + (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   488
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   489
  return Time (lhs.m_data + rhs.m_data);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   490
}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   491
inline Time operator - (const Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   492
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   493
  return Time (lhs.m_data - rhs.m_data);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   494
}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   495
inline Time &operator += (Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   496
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   497
  lhs.m_data += rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   498
  return lhs;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   499
}
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   500
inline Time &operator -= (Time &lhs, const Time &rhs)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   501
{
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   502
  lhs.m_data -= rhs.m_data;
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   503
  return lhs;
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   504
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   505
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   506
/**
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   507
 * \anchor ns3-Time-Abs
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   508
 * \relates ns3::TimeUnit
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   509
 * \param time the input value
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   510
 * \returns the absolute value of the input value.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   511
 */
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   512
inline Time Abs (const Time &time)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   513
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   514
  return Time ((time.m_data < 0) ? -time.m_data : time.m_data);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   515
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   516
/**
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   517
 * \anchor ns3-Time-Max
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   518
 * \relates ns3::TimeUnit
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   519
 * \param ta the first value
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   520
 * \param tb the seconds value
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   521
 * \returns the max of the two input values.
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   522
 */
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   523
inline Time Max (const Time &ta, const Time &tb)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   524
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   525
  return Time ((ta.m_data < tb.m_data) ? tb : ta);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   526
}
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   527
/**
9195
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   528
 * \anchor ns3-Time-Min
f0be2daaa38f bug 954: back out changesets 1a2abe07b53d, 8934b7c0c1cb, and 8ef8d8bae350
Tom Henderson <tomh@tomh.org>
parents: 9187
diff changeset
   529
 * \relates ns3::TimeUnit
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   530
 * \param ta the first value
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   531
 * \param tb the seconds value
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   532
 * \returns the min of the two input values.
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   533
 */
7032
17d4c8f349d6 split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6567
diff changeset
   534
inline Time Min (const Time &ta, const Time &tb)
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   535
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7149
diff changeset
   536
  return Time ((ta.m_data > tb.m_data) ? tb : ta);
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   537
}
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
   538
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
   539
2409
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   540
std::ostream& operator<< (std::ostream& os, const Time & time);
8744ec60e8e6 convert RandomVariable, Rectangle, Vector, and Time to the new Class Helper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2408
diff changeset
   541
std::istream& operator>> (std::istream& is, Time & 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
   542
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   543
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   544
 * \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
   545
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   546
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   547
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   548
 * Time t = Seconds (2.0);
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   549
 * Simulator::Schedule (Seconds (5.0), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   550
 * \endcode
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3222
diff changeset
   551
 * \param seconds seconds value
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   552
 */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   553
inline Time Seconds (double seconds)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   554
{
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   555
  return Time::FromDouble (seconds, Time::S);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   556
}
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   557
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   558
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   559
 * \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
   560
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   561
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   562
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   563
 * Time t = MilliSeconds (2);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   564
 * Simulator::Schedule (MilliSeconds (5), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   565
 * \endcode
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3222
diff changeset
   566
 * \param ms milliseconds value
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   567
 */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   568
inline Time MilliSeconds (uint64_t ms)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   569
{
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   570
  return Time::FromInteger (ms, Time::MS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   571
}
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   572
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   573
 * \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
   574
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   575
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   576
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   577
 * Time t = MicroSeconds (2);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   578
 * Simulator::Schedule (MicroSeconds (5), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   579
 * \endcode
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3222
diff changeset
   580
 * \param us microseconds value
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   581
 */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   582
inline Time MicroSeconds (uint64_t us)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   583
{
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   584
  return Time::FromInteger (us, Time::US);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   585
}
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   586
/**
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   587
 * \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
   588
 *
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   589
 * For example:
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   590
 * \code
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   591
 * Time t = NanoSeconds (2);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 159
diff changeset
   592
 * Simulator::Schedule (NanoSeconds (5), ...);
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   593
 * \endcode
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3222
diff changeset
   594
 * \param ns nanoseconds value
159
e2c8e211039e add doxygen dox for Time classes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 158
diff changeset
   595
 */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   596
inline Time NanoSeconds (uint64_t ns)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   597
{
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   598
  return Time::FromInteger (ns, Time::NS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   599
}
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   600
/**
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   601
 * \brief create ns3::Time instances in units of picoseconds.
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   602
 *
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   603
 * For example:
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   604
 * \code
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   605
 * Time t = PicoSeconds (2);
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   606
 * Simulator::Schedule (PicoSeconds (5), ...);
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   607
 * \endcode
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3222
diff changeset
   608
 * \param ps picoseconds value
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   609
 */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   610
inline Time PicoSeconds (uint64_t ps)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   611
{
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   612
  return Time::FromInteger (ps, Time::PS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   613
}
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   614
/**
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   615
 * \brief create ns3::Time instances in units of femtoseconds.
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   616
 *
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   617
 * For example:
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   618
 * \code
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   619
 * Time t = FemtoSeconds (2);
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   620
 * Simulator::Schedule (FemtoSeconds (5), ...);
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   621
 * \endcode
5227
ecb08c1fc273 Fix some doxygen warnings revealed by WARN_NO_PARAMDOC=YES in doc/doxygen.conf.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3222
diff changeset
   622
 * \param fs femtoseconds value
675
a5878de7d71c The header file ns3/cairo-wideint-private.h was added since the type int32_t was used.
Emmanuelle Laprise
parents: 372
diff changeset
   623
 */
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   624
inline Time FemtoSeconds (uint64_t fs)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   625
{
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   626
  return Time::FromInteger (fs, Time::FS);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   627
}
681
e1696c31b6eb improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 679
diff changeset
   628
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   629
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   630
inline Time Seconds (int64x64_t seconds)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   631
{
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   632
  return Time::From (seconds, Time::S);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   633
}
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   634
inline Time MilliSeconds (int64x64_t ms)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   635
{
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   636
  return Time::From (ms, Time::MS);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   637
}
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   638
inline Time MicroSeconds (int64x64_t us)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   639
{
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   640
  return Time::From (us, Time::US);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   641
}
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   642
inline Time NanoSeconds (int64x64_t ns)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   643
{
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   644
  return Time::From (ns, Time::NS);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   645
}
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   646
inline Time PicoSeconds (int64x64_t ps)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   647
{
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   648
  return Time::From (ps, Time::PS);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   649
}
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   650
inline Time FemtoSeconds (int64x64_t fs)
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   651
{
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   652
  return Time::From (fs, Time::FS);
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   653
}
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7037
diff changeset
   654
681
e1696c31b6eb improve dox
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 679
diff changeset
   655
// internal function not publicly documented
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   656
inline Time TimeStep (uint64_t ts)
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   657
{
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7033
diff changeset
   658
  return Time (ts);
6496
ed210e7279a7 rewrite time integer support for 32bit systems.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6411
diff changeset
   659
}
156
3b1563e95ea7 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 151
diff changeset
   660
2969
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   661
/**
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   662
 * \class ns3::TimeValue
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   663
 * \brief hold objects of type ns3::Time
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   664
 */
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   665
9d05d2a95dfa improve the auto-generated doxygen output.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   666
6514
92a84235d8f2 get rid of TimeUnit<N>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6496
diff changeset
   667
ATTRIBUTE_VALUE_DEFINE (Time);
2447
eee344085a96 convert to new helpers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2438
diff changeset
   668
ATTRIBUTE_ACCESSOR_DEFINE (Time);
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   669
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   670
/**
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   671
 * \brief Helper to make a Time checker with bounded range.
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   672
 * Both limits are inclusive
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   673
 *
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   674
 * \return the AttributeChecker 
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   675
 */
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   676
Ptr<const AttributeChecker> MakeTimeChecker (const Time min, const Time max);
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   677
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   678
/**
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   679
 * \brief Helper to make an unbounded Time checker.
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   680
 *
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   681
 * \return the AttributeChecker
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   682
 */
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   683
inline
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   684
Ptr<const AttributeChecker> MakeTimeChecker (void)
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   685
{
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
   686
  return MakeTimeChecker (Time::Min (), Time::Max ());
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   687
}
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   688
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   689
/**
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   690
 * \brief Helper to make a Time checker with an upper bound
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   691
 *
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   692
 * \return the AttributeChecker
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   693
 */
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   694
inline
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   695
Ptr<const AttributeChecker> MakeTimeChecker (const Time min)
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   696
{
9950
9963d622b120 Change to Time::Min () and Time::Max ()
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9906
diff changeset
   697
  return MakeTimeChecker (min, Time::Max ());
9891
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   698
}
e12094c8b31b Time attributes with enforced bounds.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9890
diff changeset
   699
2427
9245ec163111 split checker from ParamSpec.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2424
diff changeset
   700
2390
7e6dfae536cd add Value support to Time
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2170
diff changeset
   701
} // namespace ns3
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   702
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   703
#endif /* TIME_H */