src/core/model/timer.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Fri, 26 Sep 2014 15:51:00 -0700
changeset 10968 2d29fee2b7b8
parent 9134 7a750f032acd
child 11098 bd1adad111fa
permissions -rw-r--r--
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1695
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     2
/*
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
     3
 * Copyright (c) 2007 INRIA
1695
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     4
 *
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     7
 * published by the Free Software Foundation;
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     8
 *
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    12
 * GNU General Public License for more details.
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    13
 *
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    14
 * You should have received a copy of the GNU General Public License
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    15
 * along with this program; if not, write to the Free Software
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    17
 *
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
fa84cc049e9c add missing copyright
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1693
diff changeset
    19
 */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "timer.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "simulator.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "simulation-singleton.h"
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    23
#include "log.h"
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    24
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9134
diff changeset
    25
namespace ns3 {
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9134
diff changeset
    27
NS_LOG_COMPONENT_DEFINE ("Timer");
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
Timer::Timer ()
4451
b1e16a025279 bug 568: Timer's default destroy policy not set.
Fabian Mauchle <f1mauchl@hsr.ch>
parents: 1972
diff changeset
    30
  : m_flags (CHECK_ON_DESTROY),
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
    m_delay (FemtoSeconds (0)),
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
    m_event (),
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
    m_impl (0)
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    34
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    35
  NS_LOG_FUNCTION (this);
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    36
}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
1708
b1ea1131c106 bug 87: do not export the garbage collection facility from the Timer class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
    38
Timer::Timer (enum DestroyPolicy destroyPolicy)
b1ea1131c106 bug 87: do not export the garbage collection facility from the Timer class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
    39
  : m_flags (destroyPolicy),
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    40
    m_delay (FemtoSeconds (0)),
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    41
    m_event (),
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    42
    m_impl (0)
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    43
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    44
  NS_LOG_FUNCTION (this << destroyPolicy);
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    45
}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
Timer::~Timer ()
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    49
  NS_LOG_FUNCTION (this);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
  if (m_flags & CHECK_ON_DESTROY)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
      if (m_event.IsRunning ())
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    53
        {
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    54
          NS_FATAL_ERROR ("Event is still running while destroying.");
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    55
        }
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  else if (m_flags & CANCEL_ON_DESTROY)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
      m_event.Cancel ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
  else if (m_flags & REMOVE_ON_DESTROY)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
      Simulator::Remove (m_event);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
  delete m_impl;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    68
void
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
Timer::SetDelay (const Time &time)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    71
  NS_LOG_FUNCTION (this << time);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
  m_delay = time;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
}
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    74
Time
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
Timer::GetDelay (void) const
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    77
  NS_LOG_FUNCTION (this);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  return m_delay;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
}
1693
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    80
Time
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    81
Timer::GetDelayLeft (void) const
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    82
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
    83
  NS_LOG_FUNCTION (this);
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    84
  switch (GetState ())
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    85
    {
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    86
    case Timer::RUNNING:
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    87
      return Simulator::GetDelayLeft (m_event);
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    88
      break;
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    89
    case Timer::EXPIRED:
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    90
      return TimeStep (0);
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    91
      break;
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    92
    case Timer::SUSPENDED:
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    93
      return m_delayLeft;
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    94
      break;
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    95
    default:
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    96
      NS_ASSERT (false);
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    97
      return TimeStep (0);
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    98
      break;
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
    99
    }
1693
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   100
}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   102
void
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
Timer::Cancel (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   105
  NS_LOG_FUNCTION (this);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
  Simulator::Cancel (m_event);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
}
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   108
void
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
Timer::Remove (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   111
  NS_LOG_FUNCTION (this);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  Simulator::Remove (m_event);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
}
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   114
bool
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
Timer::IsExpired (void) const
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   117
  NS_LOG_FUNCTION (this);
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   118
  return !IsSuspended () && m_event.IsExpired ();
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
}
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   120
bool
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
Timer::IsRunning (void) const
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   123
  NS_LOG_FUNCTION (this);
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   124
  return !IsSuspended () && m_event.IsRunning ();
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
}
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   126
bool
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   127
Timer::IsSuspended (void) const
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   128
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   129
  NS_LOG_FUNCTION (this);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   130
  return (m_flags & TIMER_SUSPENDED) == TIMER_SUSPENDED;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   131
}
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   132
enum Timer::State
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   133
Timer::GetState (void) const
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   134
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   135
  NS_LOG_FUNCTION (this);
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   136
  if (IsRunning ())
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   137
    {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   138
      return Timer::RUNNING;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   139
    }
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   140
  else if (IsExpired ())
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   141
    {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   142
      return Timer::EXPIRED;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   143
    }
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   144
  else
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   145
    {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   146
      NS_ASSERT (IsSuspended ());
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   147
      return Timer::SUSPENDED;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   148
    }
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   149
}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   151
void
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
Timer::Schedule (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   154
  NS_LOG_FUNCTION (this);
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   155
  Schedule (m_delay);
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   156
}
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   157
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5290
diff changeset
   158
void
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   159
Timer::Schedule (Time delay)
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   160
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   161
  NS_LOG_FUNCTION (this << delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
  NS_ASSERT (m_impl != 0);
1708
b1ea1131c106 bug 87: do not export the garbage collection facility from the Timer class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   163
  if (m_event.IsRunning ())
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
    {
1708
b1ea1131c106 bug 87: do not export the garbage collection facility from the Timer class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   165
      NS_FATAL_ERROR ("Event is still running while re-scheduling.");
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
    }
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   167
  m_event = m_impl->Schedule (delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   170
void
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   171
Timer::Suspend (void)
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   172
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   173
  NS_LOG_FUNCTION (this);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   174
  NS_ASSERT (IsRunning ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   175
  m_delayLeft = Simulator::GetDelayLeft (m_event);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   176
  Simulator::Remove (m_event);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   177
  m_flags |= TIMER_SUSPENDED;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   178
}
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   179
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   180
void
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   181
Timer::Resume (void)
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   182
{
9134
7a750f032acd Clean up function logging of core module.
Maja Grubišić <maja.grubisic@live.com>
parents: 6952
diff changeset
   183
  NS_LOG_FUNCTION (this);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   184
  NS_ASSERT (m_flags & TIMER_SUSPENDED);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   185
  m_event = m_impl->Schedule (m_delayLeft);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   186
  m_flags &= ~TIMER_SUSPENDED;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   187
}
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   188
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191