src/simulator/timer.h
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Fri, 11 Jul 2008 18:39:19 +0100
changeset 3416 926ccb845111
parent 3182 61fe7fe81ebd
permissions -rw-r--r--
Rescan APIs
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
 */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
class Timer 
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
   */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    52
  enum DestroyPolicy {
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    53
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    54
     * 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
    55
     * 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
    56
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
    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
    58
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    59
     * 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
    60
     * 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
    61
     */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    62
    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
    63
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    64
     * 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
    65
     * 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
    66
     */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    67
    CHECK_ON_DESTROY = (1<<5)
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    68
  };
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    69
  enum State {
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    70
    RUNNING,
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    71
    EXPIRED,
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    72
    SUSPENDED,
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
    73
  };
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    74
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    75
   * 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
    76
   *  - 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
    77
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
  Timer ();
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    79
  /**
1795
820cc1254290 get rid of doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1708
diff changeset
    80
   * \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
    81
   */
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
    82
  Timer (enum DestroyPolicy destroyPolicy);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  ~Timer ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    85
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    86
   * \param fn the function
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
   * 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
    89
   */
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
    90
  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
    91
  void SetFunction (FN fn);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    93
  /**
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
    94
   * \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
    95
   * \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
    96
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
    97
   * 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
    98
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
    99
  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
   100
  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
   101
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   102
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   103
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   104
   * \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
   105
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   106
   * 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
   107
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
  template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
  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
   110
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   111
   * \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
   112
   * \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
   113
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   114
   * 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
   115
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
  template <typename T1, typename T2>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
  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
   118
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   119
   * \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
   120
   * \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
   121
   * \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
   122
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   123
   * 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
   124
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
  template <typename T1, typename T2, typename T3>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
  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
   127
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   128
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   129
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   130
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   131
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   132
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   133
   * 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
   134
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   135
  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
   136
  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
   137
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   138
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   139
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   140
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   141
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   142
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   143
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   144
   * 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
   145
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   146
  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
   147
  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
   148
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   149
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   150
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   151
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   152
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   153
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   154
   * \param a6 the sixth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   155
   *
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   156
   * 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
   157
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   158
  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
   159
  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
   160
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   161
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   162
   * \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
   163
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   164
   * 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
   165
   */
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   166
  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
   167
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   168
   * \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
   169
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
  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
   171
  /**
1693
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   172
   * \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
   173
   *
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   174
   * 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
   175
   */
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   176
  Time GetDelayLeft (void) const;
bf884d490040 add Timer::GetDelayLeft
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1692
diff changeset
   177
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   178
   * 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
   179
   * otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   180
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
  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
   182
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   183
   * Remove from the simulation event-list the currently-running event 
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   184
   * 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
   185
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
  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
   187
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   188
   * \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
   189
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
  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
   191
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   192
   * \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
   193
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
  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
   195
  /**
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   196
   * \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
   197
   *          otherwise.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   198
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   199
  bool IsSuspended (void) const;
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   200
  /**
1692
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   201
   * \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
   202
   */
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   203
  enum Timer::State GetState (void) const;
b35ba80cafef make the timer a tristate object
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1691
diff changeset
   204
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   205
   * Schedule a new event using the currently-configured delay, function, 
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   206
   * and arguments.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   207
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
  void Schedule (void);
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   209
  /**
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   210
   * \param delay the delay to use
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
   * Schedule a new event using the specified delay (ignore the delay set by 
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   213
   * Timer::SetDelay), function, and arguments.
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   214
   */
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   215
  void Schedule (Time delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   217
  /**
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   218
   * 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
   219
   * set to expire.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   220
   * 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
   221
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   222
  void Suspend (void);
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
   * 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
   225
   * during Suspend.
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   226
   * 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
   227
   */
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   228
  void Resume (void);
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   229
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
private:
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   231
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   232
  enum {
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   233
    TIMER_SUSPENDED = (1<<7)
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   234
  };
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   235
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
  int m_flags;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
  Time m_delay;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
  EventId m_event;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  TimerImpl *m_impl;
1691
d717c61ae738 add Timer::Suspend/Resume/IsSuspended
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1689
diff changeset
   240
  Time m_delayLeft;
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   245
#include "timer-impl.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   249
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   250
template <typename FN>
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
void 
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   252
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
   253
{
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   254
  delete m_impl;
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   255
  m_impl = MakeTimerImpl (fn);
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   256
}
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   257
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
   258
void 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   259
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
   260
{
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   261
  delete m_impl;
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   262
  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
   263
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   264
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   265
template <typename T1>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   266
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   267
Timer::SetArguments (T1 a1)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   268
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   269
  if (m_impl == 0)
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
      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
   272
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   273
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   274
  m_impl->SetArgs (a1);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   275
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   276
template <typename T1, typename T2>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   277
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   278
Timer::SetArguments (T1 a1, T2 a2)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   279
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   280
  if (m_impl == 0)
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
      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
   283
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   284
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   285
  m_impl->SetArgs (a1, a2);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   286
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   287
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   288
template <typename T1, typename T2, typename T3>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   289
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   290
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
   291
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   292
  if (m_impl == 0)
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
      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
   295
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   296
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   297
  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
   298
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   299
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   300
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
   301
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   302
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
   303
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   304
  if (m_impl == 0)
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
      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
   307
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   308
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   309
  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
   310
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   311
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   312
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
   313
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   314
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
   315
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   316
  if (m_impl == 0)
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
      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
   319
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   320
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   321
  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
   322
}
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
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
   325
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   326
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
   327
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   328
  if (m_impl == 0)
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
      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
   331
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   332
    }
1941
c4eb28d51689 split timer implementation outside of Timer class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1695
diff changeset
   333
  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
   334
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   335
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
#endif /* TIMER_H */