src/simulator/timer.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 08 Apr 2010 13:39:07 +0200
changeset 6180 cd0d8ba00e6c
parent 3182 61fe7fe81ebd
permissions -rw-r--r--
coding style
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
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/fatal-error.h"
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"
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
    26
#include "ns3/int-to-type.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
class TimerImpl;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    32
/**
3182
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2049
diff changeset
    33
 * \ingroup simulator
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 2049
diff changeset
    34
 *
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    35
 * \brief a simple Timer class
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    36
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    37
 * 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
    38
 * 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
    39
 * 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
    40
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    41
 * 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
    42
 * 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
    43
 * and cannot be changed after.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    44
 */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    45
class Timer
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
public:
1795
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    48
  /**
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    49
   * The policy to use to manager the internal timer when and
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    50
   * instance of the Timer class is destroyed.
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    51
   */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    52
  enum DestroyPolicy
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    53
  {
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    54
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    55
     * 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
    56
     * 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
    57
     */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    58
    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
    59
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    60
     * 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
    61
     * 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
    62
     */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    63
    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
    64
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    65
     * 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
    66
     * 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
    67
     */
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    68
    CHECK_ON_DESTROY = (1 << 5)
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    69
  };
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    70
  enum State
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    71
  {
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    72
    RUNNING,
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    73
    EXPIRED,
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    74
    SUSPENDED,
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    75
  };
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    76
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    77
   * create a timer with a default event lifetime management policy:
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    78
   *  - 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
    79
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  Timer ();
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    81
  /**
1795
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    82
   * \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
    83
   */
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
    84
  Timer (enum DestroyPolicy destroyPolicy);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
  ~Timer ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    87
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    88
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    89
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    90
   * 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
    91
   */
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
    92
  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
    93
  void SetFunction (FN fn);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    95
  /**
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
    96
   * \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
    97
   * \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
    98
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
    99
   * 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
   100
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   101
  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
   102
  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
   103
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   104
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   105
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   106
   * \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
   107
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   108
   * 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
   109
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
  template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
  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
   112
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   113
   * \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
   114
   * \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
   115
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   116
   * 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
   117
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
  template <typename T1, typename T2>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
  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
   120
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   121
   * \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
   122
   * \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
   123
   * \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
   124
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   125
   * 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
   126
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
  template <typename T1, typename T2, typename T3>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
  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
   129
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   130
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   131
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   132
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   133
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   134
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   135
   * 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
   136
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   137
  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
   138
  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
   139
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   140
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   141
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   142
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   143
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   144
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   145
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   146
   * 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
   147
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   148
  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
   149
  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
   150
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   151
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   152
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   153
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   154
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   155
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   156
   * \param a6 the sixth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   157
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   158
   * 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
   159
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   160
  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
   161
  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
   162
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   163
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   164
   * \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
   165
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   166
   * 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
   167
   */
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   168
  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
   169
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   170
   * \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
   171
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
  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
   173
  /**
1693
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   174
   * \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
   175
   *
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   176
   * 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
   177
   */
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   178
  Time GetDelayLeft (void) const;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   179
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   180
   * 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
   181
   * otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   182
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
  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
   184
  /**
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   185
   * 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
   186
   * 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
   187
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
  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
   189
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   190
   * \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
   191
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
  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
   193
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   194
   * \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
   195
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
  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
   197
  /**
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   198
   * \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
   199
   *          otherwise.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   200
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   201
  bool IsSuspended (void) const;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   202
  /**
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   203
   * \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
   204
   */
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   205
  enum Timer::State GetState (void) const;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   206
  /**
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   207
   * 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
   208
   * and arguments.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   209
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
  void Schedule (void);
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   211
  /**
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   212
   * \param delay the delay to use
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   213
   *
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   214
   * 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
   215
   * Timer::SetDelay), function, and arguments.
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   216
   */
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   217
  void Schedule (Time delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   219
  /**
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   220
   * 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
   221
   * set to expire.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   222
   * 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
   223
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   224
  void Suspend (void);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   225
  /**
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   226
   * 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
   227
   * during Suspend.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   228
   * 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
   229
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   230
  void Resume (void);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   231
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
private:
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   233
  enum
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   234
  {
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   235
    TIMER_SUSPENDED = (1 << 7)
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   236
  };
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   237
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
  int m_flags;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  Time m_delay;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
  EventId m_event;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
  TimerImpl *m_impl;
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   242
  Time m_delayLeft;
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   247
#include "timer-impl.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   251
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   252
template <typename FN>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   253
void
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   254
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
   255
{
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   256
  delete m_impl;
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   257
  m_impl = MakeTimerImpl (fn);
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   258
}
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   259
template <typename MEM_PTR, typename OBJ_PTR>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   260
void
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   261
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
   262
{
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   263
  delete m_impl;
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   264
  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
   265
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   266
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   267
template <typename T1>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   268
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   269
Timer::SetArguments (T1 a1)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   270
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   271
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   272
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   273
      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
   274
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   275
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   276
  m_impl->SetArgs (a1);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   277
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   278
template <typename T1, typename T2>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   279
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   280
Timer::SetArguments (T1 a1, T2 a2)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   281
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   282
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   283
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   284
      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
   285
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   286
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   287
  m_impl->SetArgs (a1, a2);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   288
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   289
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   290
template <typename T1, typename T2, typename T3>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   291
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   292
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
   293
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   294
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   295
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   296
      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
   297
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   298
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   299
  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
   300
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   301
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   302
template <typename T1, typename T2, typename T3, typename T4>
6180
cd0d8ba00e6c coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
   303
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   304
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
   305
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   306
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   307
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   308
      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
   309
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   310
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   311
  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
   312
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   313
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   314
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
   315
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   316
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
   317
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   318
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   319
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   320
      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
   321
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   322
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   323
  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
   324
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   325
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   326
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
   327
void
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   328
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
   329
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   330
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   331
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   332
      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
   333
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   334
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   335
  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
   336
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   337
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
#endif /* TIMER_H */