src/core/model/timer.h
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Thu, 18 Dec 2014 15:12:35 -0800
changeset 11131 6a448ac28669
parent 11098 bd1adad111fa
child 11538 397bd6465dd9
permissions -rw-r--r--
[Doxygen] Various in src/core
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
#ifndef TIMER_H
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#define TIMER_H
9886637756a1 Implement a Timer 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: 7149
diff changeset
    23
#include "fatal-error.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "nstime.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "event-id.h"
7383
c5e131450339 remove ns3/ prefix which is un-needed now that all files are in same module.
Mathieu Lacage <mathieu.lacage@gmail.com>
parents: 7149
diff changeset
    26
#include "int-to-type.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    28
/**
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    29
 * \file
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    30
 * \ingroup timer
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    31
 * ns3::Timer class declaration.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    32
 */
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    33
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    36
/**
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    37
 * \ingroup core
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    38
 * \defgroup timer Virtual Time Timer and Watchdog
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    39
 *
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    40
 * The Timer and Watchdog objects both facilitate scheduling functions
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    41
 * to execute a specified virtual time in the future.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    42
 *
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    43
 * A Watchdog timer cannot be paused or cancelled once it has been started,
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    44
 * however it can be lengthened (delayed).  A Watchdog takes no action
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    45
 * when it is destroyed.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    46
 *
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    47
 * A Timer can be suspended, resumed, cancelled and queried for time left,
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    48
 * but it can't be extended (except by suspending and resuming).
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    49
 * In addition, it can be configured to take different actions when the
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    50
 * Timer is destroyed.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    51
 */
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    52
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
class TimerImpl;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    55
/**
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    56
 * \ingroup timer
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    57
 * \brief A simple Timer class
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    58
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    59
 * A timer is used to hold together a delay, a function to invoke
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    60
 * when the delay expires, and a set of arguments to pass to the function
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    61
 * when the delay expires.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    62
 *
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    63
 * A Timer can be suspended, resumed, cancelled and queried for the
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    64
 * time left, but it can't be extended (except by suspending and
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    65
 * resuming.)
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    66
 *
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    67
 * A timer can also be used to enforce a set of predefined event lifetime
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    68
 * management policies. These policies are specified at construction time
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    69
 * and cannot be changed after.
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    70
 *
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    71
 * \see Watchdog for a simpler interface for a watchdog timer.
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    72
 */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    73
class Timer
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
public:
1795
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    76
  /**
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    77
   * The policy to use to manager the internal timer when an
1795
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    78
   * instance of the Timer class is destroyed.
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    79
   */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    80
  enum DestroyPolicy
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    81
  {
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    82
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    83
     * This policy cancels the event from the destructor of the Timer
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    84
     * to verify that the event has already expired.
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    85
     */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    86
    CANCEL_ON_DESTROY = (1 << 3),
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    87
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    88
     * This policy removes the event from the simulation event list
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    89
     * when the destructor of the Timer is invoked.
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    90
     */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    91
    REMOVE_ON_DESTROY = (1 << 4),
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    92
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    93
     * This policy enforces a check from the destructor of the Timer
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    94
     * to verify that the timer has already expired.
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    95
     */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    96
    CHECK_ON_DESTROY = (1 << 5)
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    97
  };
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
    98
  /** The possible states of the Timer. */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    99
  enum State
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   100
  {
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   101
    RUNNING,    /** Timer is currently running. */
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   102
    EXPIRED,    /** Timer has already expired. */
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   103
    SUSPENDED,  /** Timer is suspended. */
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   104
  };
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   105
  /**
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   106
   * Create a timer with a default event lifetime management policy:
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   107
   *  - CHECK_ON_DESTROY
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   108
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
  Timer ();
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   110
  /**
1795
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
   111
   * \param destroyPolicy the event lifetime management policies to use for destroy events
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   112
   */
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
   113
  Timer (enum DestroyPolicy destroyPolicy);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
  ~Timer ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   116
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   117
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   118
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   119
   * Store this function in this Timer for later use by Timer::Schedule.
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   120
   */
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   121
  template <typename FN>
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   122
  void SetFunction (FN fn);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   124
  /**
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   125
   * \param memPtr the member function pointer
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   126
   * \param objPtr the pointer to object
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   127
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   128
   * Store this function and object in this Timer for later use by Timer::Schedule.
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   129
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   130
  template <typename MEM_PTR, typename OBJ_PTR>
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   131
  void SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   132
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   133
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   134
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   135
   * \param a1 the first argument
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   136
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   137
   * Store this argument in this Timer for later use by Timer::Schedule.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   138
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
  template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
  void SetArguments (T1 a1);
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   141
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   142
   * \param a1 the first argument
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   143
   * \param a2 the second argument
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   144
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   145
   * Store these arguments in this Timer for later use by Timer::Schedule.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   146
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
  template <typename T1, typename T2>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
  void SetArguments (T1 a1, T2 a2);
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   149
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   150
   * \param a1 the first argument
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   151
   * \param a2 the second argument
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   152
   * \param a3 the third argument
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   153
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   154
   * Store these arguments in this Timer for later use by Timer::Schedule.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   155
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
  template <typename T1, typename T2, typename T3>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
  void SetArguments (T1 a1, T2 a2, T3 a3);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   158
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   159
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   160
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   161
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   162
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   163
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   164
   * Store these arguments in this Timer for later use by Timer::Schedule.
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   165
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   166
  template <typename T1, typename T2, typename T3, typename T4>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   167
  void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   168
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   169
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   170
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   171
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   172
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   173
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   174
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   175
   * Store these arguments in this Timer for later use by Timer::Schedule.
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   176
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   177
  template <typename T1, typename T2, typename T3, typename T4, typename T5>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   178
  void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   179
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   180
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   181
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   182
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   183
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   184
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   185
   * \param a6 the sixth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   186
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   187
   * Store these arguments in this Timer for later use by Timer::Schedule.
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   188
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   189
  template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   190
  void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   192
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   193
   * \param delay the delay
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   194
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   195
   * The next call to Schedule will schedule the timer with this delay.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   196
   */
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   197
  void SetDelay (const Time &delay);
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   198
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   199
   * \returns the currently-configured delay for the next Schedule.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   200
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
  Time GetDelay (void) const;
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   202
  /**
1693
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   203
   * \returns the amount of time left until this timer expires.
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   204
   *
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   205
   * This method returns zero if the timer is in EXPIRED state.
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   206
   */
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   207
  Time GetDelayLeft (void) const;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   208
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   209
   * Cancel the currently-running event if there is one. Do nothing
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   210
   * otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   211
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
  void Cancel (void);
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   213
  /**
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   214
   * Remove from the simulation event-list the currently-running event
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   215
   * if there is one. Do nothing otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   216
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
  void Remove (void);
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   218
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   219
   * \return true if there is no currently-running event, false otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   220
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
  bool IsExpired (void) const;
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   222
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   223
   * \return true if there is a currently-running event, false otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   224
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
  bool IsRunning (void) const;
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   226
  /**
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   227
   * \returns true if this timer was suspended and not yet resumed, false
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   228
   *          otherwise.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   229
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   230
  bool IsSuspended (void) const;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   231
  /**
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   232
   * \returns the current state of the timer.
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   233
   */
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   234
  enum Timer::State GetState (void) const;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   235
  /**
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   236
   * Schedule a new event using the currently-configured delay, function,
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   237
   * and arguments.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   238
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  void Schedule (void);
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   240
  /**
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   241
   * \param delay the delay to use
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   242
   *
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   243
   * Schedule a new event using the specified delay (ignore the delay set by
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   244
   * Timer::SetDelay), function, and arguments.
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   245
   */
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   246
  void Schedule (Time delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   248
  /**
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   249
   * Cancel the timer and save the amount of time left until it was
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   250
   * set to expire.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   251
   * Calling Suspend on a non-running timer is an error.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   252
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   253
  void Suspend (void);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   254
  /**
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   255
   * Restart the timer to expire within the amount of time left saved
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   256
   * during Suspend.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   257
   * Calling Resume without a prior call to Suspend is an error.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   258
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   259
  void Resume (void);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   260
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
private:
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   262
  /** Internal bit marking the suspended state. */
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   263
  enum InternalSuspended
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   264
  {
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   265
    TIMER_SUSPENDED = (1 << 7)  /** Timer suspended. */
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   266
  };
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   267
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   268
  /**
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   269
   * Bitfield for Timer State, DestroyPolicy and InternalSuspended.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   270
   *
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   271
   * \internal 
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   272
   * The DestroyPolicy, State and InternalSuspended state are stored
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   273
   * in this single bitfield.  The State uses the low-order bits,
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   274
   * so the other users of the bitfield have to be careful in defining
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   275
   * their bits to avoid the State.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   276
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
  int m_flags;
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   278
  /** The delay configured for this Timer. */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
  Time m_delay;
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   280
  /** The future event scheduled to expire the timer. */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
  EventId m_event;
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   282
  /**
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   283
   * The timer implementation, which contains the bound callback
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   284
   * function and arguments.
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   285
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
  TimerImpl *m_impl;
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   287
  /** The amount of time left on the Timer while it is suspended. */
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   288
  Time m_delayLeft;
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   293
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   294
/********************************************************************
11131
6a448ac28669 [Doxygen] Various in src/core
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11098
diff changeset
   295
 *  Implementation of the templates declared above.
11098
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   296
 ********************************************************************/
bd1adad111fa [Doxygen] Timer, TimerImpl and Watchdog.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7383
diff changeset
   297
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   298
#include "timer-impl.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   302
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   303
template <typename FN>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   304
void
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   305
Timer::SetFunction (FN fn)
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   306
{
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   307
  delete m_impl;
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   308
  m_impl = MakeTimerImpl (fn);
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   309
}
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   310
template <typename MEM_PTR, typename OBJ_PTR>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   311
void
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   312
Timer::SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr)
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   313
{
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   314
  delete m_impl;
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   315
  m_impl = MakeTimerImpl (memPtr, objPtr);
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   316
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   317
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   318
template <typename T1>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   319
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   320
Timer::SetArguments (T1 a1)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   321
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   322
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   323
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   324
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   325
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   326
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   327
  m_impl->SetArgs (a1);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   328
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   329
template <typename T1, typename T2>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   330
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   331
Timer::SetArguments (T1 a1, T2 a2)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   332
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   333
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   334
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   335
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   336
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   337
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   338
  m_impl->SetArgs (a1, a2);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   339
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   340
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   341
template <typename T1, typename T2, typename T3>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   342
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   343
Timer::SetArguments (T1 a1, T2 a2, T3 a3)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   344
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   345
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   346
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   347
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   348
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   349
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   350
  m_impl->SetArgs (a1, a2, a3);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   351
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   352
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   353
template <typename T1, typename T2, typename T3, typename T4>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   354
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   355
Timer::SetArguments (T1 a1, T2 a2, T3 a3, T4 a4)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   356
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   357
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   358
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   359
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   360
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   361
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   362
  m_impl->SetArgs (a1, a2, a3, a4);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   363
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   364
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   365
template <typename T1, typename T2, typename T3, typename T4, typename T5>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   366
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   367
Timer::SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   368
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   369
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   370
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   371
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   372
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   373
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   374
  m_impl->SetArgs (a1, a2, a3, a4, a5);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   375
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   376
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   377
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   378
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   379
Timer::SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   380
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   381
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   382
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   383
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   384
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   385
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   386
  m_impl->SetArgs (a1, a2, a3, a4, a5, a6);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   387
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   388
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   391
#endif /* TIMER_H */