src/simulator/timer.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sat, 04 Jul 2009 08:15:48 +0200
changeset 4654 2eaebe77d66b
parent 4456 1db0749fa7c6
permissions -rw-r--r--
Added tag ns-3.5 for changeset c975274c9707
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"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
Timer::Timer ()
4451
b1e16a025279 bug 568: Timer's default destroy policy not set.
Fabian Mauchle <f1mauchl@hsr.ch>
parents: 1972
diff changeset
    27
  : m_flags (CHECK_ON_DESTROY),
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
    m_delay (FemtoSeconds (0)),
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
    m_event (),
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
    m_impl (0)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
{}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
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
    33
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
    34
  : m_flags (destroyPolicy),
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    35
    m_delay (FemtoSeconds (0)),
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    36
    m_event (),
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    37
    m_impl (0)
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    38
{}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
Timer::~Timer ()
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  if (m_flags & CHECK_ON_DESTROY)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
      if (m_event.IsRunning ())
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
	{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
	  NS_FATAL_ERROR ("Event is still running while destroying.");
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
	}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
  else if (m_flags & CANCEL_ON_DESTROY)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
      m_event.Cancel ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  else if (m_flags & REMOVE_ON_DESTROY)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
      Simulator::Remove (m_event);
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
  delete m_impl;
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
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
void 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
Timer::SetDelay (const Time &time)
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
  m_delay = time;
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
Time 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
Timer::GetDelay (void) const
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
  return m_delay;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
}
1693
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    70
Time
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    71
Timer::GetDelayLeft (void) const
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    72
{
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    73
  switch (GetState ()) {
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    74
  case Timer::RUNNING:
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    75
    return Simulator::GetDelayLeft (m_event);
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    76
    break;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    77
  case Timer::EXPIRED:
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    78
    return TimeStep (0);
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    79
    break;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    80
  case Timer::SUSPENDED:
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    81
    return m_delayLeft;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    82
    break;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    83
  default:
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    84
    NS_ASSERT (false);
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    85
    return TimeStep (0);
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    86
    break;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    87
  }
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
    88
}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
void 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
Timer::Cancel (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
  Simulator::Cancel (m_event);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
void 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
Timer::Remove (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
  Simulator::Remove (m_event);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
bool 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
Timer::IsExpired (void) const
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
{
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   103
  return !IsSuspended () && m_event.IsExpired ();
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
bool 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
Timer::IsRunning (void) const
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
{
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   108
  return !IsSuspended () && m_event.IsRunning ();
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
}
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   110
bool
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   111
Timer::IsSuspended (void) const
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   112
{
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   113
  return (m_flags & TIMER_SUSPENDED) == TIMER_SUSPENDED;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   114
}
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   115
enum Timer::State 
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   116
Timer::GetState (void) const
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   117
{
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   118
  if (IsRunning ())
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   119
    {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   120
      return Timer::RUNNING;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   121
    }
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   122
  else if (IsExpired ())
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   123
    {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   124
      return Timer::EXPIRED;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   125
    }
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   126
  else 
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   127
    {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   128
      NS_ASSERT (IsSuspended ());
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   129
      return Timer::SUSPENDED;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   130
    }
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   131
}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
void 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
Timer::Schedule (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
{
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   136
  Schedule (m_delay);
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   137
}
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   138
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   139
void 
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   140
Timer::Schedule (Time delay)
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   141
{
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
  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
   143
  if (m_event.IsRunning ())
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
    {
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
   145
      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
   146
    }
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1687
diff changeset
   147
  m_event = m_impl->Schedule (delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   150
void
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   151
Timer::Suspend (void)
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   152
{
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   153
  NS_ASSERT (IsRunning ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   154
  m_delayLeft = Simulator::GetDelayLeft (m_event);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   155
  Simulator::Remove (m_event);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   156
  m_flags |= TIMER_SUSPENDED;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   157
}
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   158
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   159
void
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   160
Timer::Resume (void)
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   161
{
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   162
  NS_ASSERT (m_flags & TIMER_SUSPENDED);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   163
  m_event = m_impl->Schedule (m_delayLeft);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   164
  m_flags &= ~TIMER_SUSPENDED;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   165
}
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   166
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
#ifdef RUN_SELF_TESTS
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
#include "ns3/test.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
namespace {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
void bari (int)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
{}
1687
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   177
void bar2i (int, int)
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   178
{}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   179
void bar3i (int, int, int)
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   180
{}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   181
void bar4i (int, int, int, int)
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   182
{}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   183
void bar5i (int, int, int, int, int)
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   184
{}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   185
void bar6i (int, int, int, int, int, int)
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   186
{}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
void barcir (const int &)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
{}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
void barir (int &)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
{}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
void barip (int *)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
{}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
void barcip (const int *)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
{}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
class TimerTests : public Test
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
public:
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
  TimerTests ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
  virtual bool RunTests (void);
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   204
  void bazi (int) {}
1687
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   205
  void baz2i (int, int) {}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   206
  void baz3i (int, int, int) {}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   207
  void baz4i (int, int, int, int) {}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   208
  void baz5i (int, int, int, int, int) {}
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   209
  void baz6i (int, int, int, int, int, int) {}
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   210
  void bazcir (const int&) {}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   211
  void bazir (int&) {}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   212
  void bazip (int *) {}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   213
  void bazcip (const int *) {}
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
TimerTests::TimerTests ()
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
  : Test ("Timer")
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
{}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
bool
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
TimerTests::RunTests (void)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
{
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   223
  bool result = true;
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
4456
1db0749fa7c6 initialize timer in Timer unit tests
Tom Henderson <tomh@tomh.org>
parents: 4451
diff changeset
   225
  Timer timer = Timer (Timer::CANCEL_ON_DESTROY);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   226
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   227
  timer.SetFunction (&bari);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   228
  timer.SetArguments (1);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   229
  timer.SetDelay (Seconds (10.0));
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   230
  NS_TEST_ASSERT (!timer.IsRunning ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   231
  NS_TEST_ASSERT (timer.IsExpired ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   232
  NS_TEST_ASSERT (!timer.IsSuspended ());
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   233
  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::EXPIRED);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   234
  timer.Schedule ();
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   235
  NS_TEST_ASSERT (timer.IsRunning ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   236
  NS_TEST_ASSERT (!timer.IsExpired ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   237
  NS_TEST_ASSERT (!timer.IsSuspended ());
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   238
  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::RUNNING);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   239
  timer.Suspend ();
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   240
  NS_TEST_ASSERT (!timer.IsRunning ());
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   241
  NS_TEST_ASSERT (!timer.IsExpired ());
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   242
  NS_TEST_ASSERT (timer.IsSuspended ());
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   243
  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::SUSPENDED);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   244
  timer.Resume ();
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   245
  NS_TEST_ASSERT (timer.IsRunning ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   246
  NS_TEST_ASSERT (!timer.IsExpired ());
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   247
  NS_TEST_ASSERT (!timer.IsSuspended ());
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   248
  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::RUNNING);
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   249
  timer.Cancel ();
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   250
  NS_TEST_ASSERT (!timer.IsRunning ());
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   251
  NS_TEST_ASSERT (timer.IsExpired ());
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   252
  NS_TEST_ASSERT (!timer.IsSuspended ());
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   253
  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::EXPIRED);
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   254
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
  int a = 0;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
  int &b = a;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
  const int &c = a;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   259
  timer.SetFunction (&bari);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
  timer.SetArguments (2);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
  timer.SetArguments (a);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
  timer.SetArguments (b);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  timer.SetArguments (c);
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   264
  timer.SetFunction (&barir);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
  timer.SetArguments (2);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
  timer.SetArguments (a);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
  timer.SetArguments (b);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
  timer.SetArguments (c);
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   269
  timer.SetFunction (&barcir);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
  timer.SetArguments (2);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
  timer.SetArguments (a);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
  timer.SetArguments (b);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
  timer.SetArguments (c);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
  // the following call cannot possibly work and is flagged by
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  // a runtime error.
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
  //timer.SetArguments (0.0);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
  timer.SetDelay (Seconds (1.0));
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
  timer.Schedule ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   280
  timer.SetFunction (&TimerTests::bazi, this);
1677
aa92bb3efe11 add testcase, make it work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1676
diff changeset
   281
  timer.SetArguments (3);
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   282
  timer.SetFunction (&TimerTests::bazir, this);
1677
aa92bb3efe11 add testcase, make it work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1676
diff changeset
   283
  timer.SetArguments (3);
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   284
  timer.SetFunction (&TimerTests::bazcir, this);
1677
aa92bb3efe11 add testcase, make it work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1676
diff changeset
   285
  timer.SetArguments (3);
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   286
1687
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   287
  timer.SetFunction (&bar2i);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   288
  timer.SetArguments (1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   289
  timer.SetFunction (&bar3i);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   290
  timer.SetArguments (1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   291
  timer.SetFunction (&bar4i);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   292
  timer.SetArguments (1, 1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   293
  timer.SetFunction (&bar5i);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   294
  timer.SetArguments (1, 1, 1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   295
  //timer.SetFunction (&bar6i);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   296
  //timer.SetArguments (1, 1, 1, 1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   297
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   298
  timer.SetFunction (&TimerTests::baz2i, this);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   299
  timer.SetArguments (1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   300
  timer.SetFunction (&TimerTests::baz3i, this);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   301
  timer.SetArguments (1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   302
  timer.SetFunction (&TimerTests::baz4i, this);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   303
  timer.SetArguments (1, 1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   304
  timer.SetFunction (&TimerTests::baz5i, this);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   305
  timer.SetArguments (1, 1, 1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   306
  //timer.SetFunction (&TimerTests::baz6i, this);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   307
  //timer.SetArguments (1, 1, 1, 1, 1, 1);
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   308
b10b13bad5e9 add tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   309
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
  Simulator::Run ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
  Simulator::Destroy ();
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1688
diff changeset
   312
		  
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   313
  return result;
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
TimerTests g_tests;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
#endif /* RUN_SELF_TESTS */