src/simulator/timer.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 02 Oct 2007 11:32:16 +0200
changeset 1689 c52eb7e20762
parent 1688 96172e357b93
child 1691 d717c61ae738
permissions -rw-r--r--
remove uneeded forward declaration
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#ifndef TIMER_H
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#define TIMER_H
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include "ns3/fatal-error.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
#include "nstime.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
#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
     7
#include "ns3/int-to-type.h"
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
class TimerImpl;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    13
/**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    14
 * \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
    15
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    16
 * 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
    17
 * 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
    18
 * 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
    19
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    20
 * 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
    21
 * 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
    22
 * 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
    23
 */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
class Timer 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
public:
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    27
  enum SchedulePolicy {
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    28
    /**
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    29
     * This policy cancels the event before scheduling a new event 
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    30
     * for each call to Timer::Schedule.
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    31
     */
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    32
    CANCEL_ON_SCHEDULE = (1<<0),
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    33
    /**
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    34
     * 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
    35
     * before scheduling a new event for each call to Timer::Schedule. 
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    36
     */
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    37
    REMOVE_ON_SCHEDULE = (1<<1),
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    38
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    39
     * This policy enforces a check before each call to Timer::Schedule
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    40
     * 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
    41
     */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    42
    CHECK_ON_SCHEDULE = (1<<2),
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    43
  };
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    44
  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
    45
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    46
     * 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
    47
     * 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
    48
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
    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
    50
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    51
     * 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
    52
     * 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
    53
     */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    54
    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
    55
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    56
     * 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
    57
     * 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
    58
     */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    59
    CHECK_ON_DESTROY = (1<<5)
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    60
  };
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    61
  enum GarbageCollectPolicy {
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    62
    /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    63
     * Every event scheduled with this policy is kept track of by an
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    64
     * event garbage collector which makes sure that all events
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    65
     * of timers with a GARBAGE_COLLECT policy are cancelled at the
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    66
     * end of the simulation.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    67
     */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    68
    GARBAGE_COLLECT = (1<<6)
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
  };
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    70
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    71
   * 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
    72
   *  - CHECK_ON_SCHEDULE
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    73
   *  - 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
    74
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
  Timer ();
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    76
  /**
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    77
   * \param scheduleFlags the event lifetime management policies to use for schedule events
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    78
   * \param destroyFlags 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
    79
   */
1682
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    80
  Timer (enum SchedulePolicy schedulePolicy, 
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    81
	 enum DestroyPolicy destroyPolicy);
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    82
  /**
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    83
   * \param policy the garbage collect policy. Only one
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    84
   *        value is possible.
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    85
   */
e99303d99e30 simplicy policy handling
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1681
diff changeset
    86
  Timer (enum GarbageCollectPolicy policy);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
  ~Timer ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
1675
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
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    91
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    92
   * 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
    93
   */
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
    94
  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
    95
  void SetFunction (FN fn);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    97
  /**
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
    98
   * \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
    99
   * \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
   100
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   101
   * 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
   102
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   103
  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
   104
  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
   105
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   106
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   107
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   108
   * \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
   109
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   110
   * 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
   111
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
  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
   114
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   115
   * \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
   116
   * \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
   117
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   118
   * 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
   119
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
  template <typename T1, typename T2>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
  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
   122
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   123
   * \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
   124
   * \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
   125
   * \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
   126
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   127
   * 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
   128
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  template <typename T1, typename T2, typename T3>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  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
   131
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   132
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   133
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   134
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   135
   * \param a4 the fourth argument
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
   * 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
   138
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   139
  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
   140
  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
   141
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   142
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   143
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   144
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   145
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   146
   * \param a5 the fifth argument
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
   * 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
   149
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   150
  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
   151
  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
   152
  /**
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   153
   * \param a1 the first argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   154
   * \param a2 the second argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   155
   * \param a3 the third argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   156
   * \param a4 the fourth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   157
   * \param a5 the fifth argument
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   158
   * \param a6 the sixth argument
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
   * 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
   161
   */
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   162
  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
   163
  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
   164
1674
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
   * \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
   167
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   168
   * 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
   169
   */
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   170
  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
   171
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   172
   * \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
   173
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
  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
   175
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   176
   * 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
   177
   * otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   178
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
  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
   180
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   181
   * 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
   182
   * 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
   183
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
  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
   185
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   186
   * \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
   187
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
  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
   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 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
   191
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
  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
   193
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   194
   * 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
   195
   * and arguments.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   196
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
  void Schedule (void);
1688
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   198
  /**
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   199
   * \param delay the delay to use
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   200
   *
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   201
   * 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
   202
   * Timer::SetDelay), function, and arguments.
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   203
   */
96172e357b93 add a Timer::Schedule (delay) method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1686
diff changeset
   204
  void Schedule (Time delay);
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
private:
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   207
  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
   208
  void DoSetFunction (IntToType<0>, FN fn);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   209
  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
   210
  void DoSetFunction (IntToType<1>, FN fn);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   211
  template <typename FN>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   212
  void DoSetFunction (IntToType<2>, FN fn);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   213
  template <typename FN>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   214
  void DoSetFunction (IntToType<3>, FN fn);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   215
  template <typename FN>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   216
  void DoSetFunction (IntToType<4>, FN fn);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   217
  template <typename FN>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   218
  void DoSetFunction (IntToType<5>, FN fn);
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   219
  template <typename FN>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   220
  void DoSetFunction (IntToType<6>, FN fn);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   221
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   222
  template <typename MEM_PTR, typename OBJ_PTR>
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   223
  void DoSetFunction (IntToType<0>, MEM_PTR memPtr, OBJ_PTR objPtr);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   224
  template <typename MEM_PTR, typename OBJ_PTR>
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   225
  void DoSetFunction (IntToType<1>, MEM_PTR memPtr, OBJ_PTR objPtr);
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   226
  template <typename MEM_PTR, typename OBJ_PTR>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   227
  void DoSetFunction (IntToType<2>, MEM_PTR memPtr, OBJ_PTR objPtr);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   228
  template <typename MEM_PTR, typename OBJ_PTR>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   229
  void DoSetFunction (IntToType<3>, MEM_PTR memPtr, OBJ_PTR objPtr);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   230
  template <typename MEM_PTR, typename OBJ_PTR>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   231
  void DoSetFunction (IntToType<4>, MEM_PTR memPtr, OBJ_PTR objPtr);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   232
  template <typename MEM_PTR, typename OBJ_PTR>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   233
  void DoSetFunction (IntToType<5>, MEM_PTR memPtr, OBJ_PTR objPtr);
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   234
  template <typename MEM_PTR, typename OBJ_PTR>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   235
  void DoSetFunction (IntToType<6>, MEM_PTR memPtr, OBJ_PTR objPtr);
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   236
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
  int m_flags;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
  Time m_delay;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  EventId m_event;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
  TimerImpl *m_impl;
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
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
// The actual implementation.
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
#include "simulator.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
#include "ns3/type-traits.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   252
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
template <typename T>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
struct TimerTraits
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
  typedef typename TypeTraits<typename TypeTraits<T>::ReferencedType>::NonConstType StoredType;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
  typedef const StoredType &ParameterType;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
class TimerImpl
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
public:
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  virtual ~TimerImpl () {}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
  virtual EventId Schedule (const Time &delay) = 0;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
struct TimerImplOne : public TimerImpl
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
  virtual void SetArguments (T1 a1) = 0;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
};
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   273
template <typename T1, typename T2>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   274
struct TimerImplTwo : public TimerImpl
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
  virtual void SetArguments (T1 a1,T2 a2) = 0;
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, typename T3>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   279
struct TimerImplThree : public TimerImpl
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   280
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   281
  virtual void SetArguments (T1 a1,T2 a2,T3 a3) = 0;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   282
};
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   283
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
   284
struct TimerImplFour : public TimerImpl
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   285
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   286
  virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4) = 0;
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, typename T4, typename T5>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   289
struct TimerImplFive : public TimerImpl
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   290
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   291
  virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5) = 0;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   292
};
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   293
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
   294
struct TimerImplSix : public TimerImpl
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
  virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5, T6 a6) = 0;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   297
};
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   300
template <typename FN>
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
void 
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   302
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
   303
{
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   304
  NS_ASSERT (TypeTraits<FN>::IsFunctionPointer);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   305
  DoSetFunction (IntToType<TypeTraits<FN>::FunctionPointerTraits::nArgs> (), fn);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   306
}
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   307
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   308
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
   309
void 
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   310
Timer::DoSetFunction (IntToType<0>, FN fn)
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
{
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   312
  struct FnTimerImplZero : public TimerImpl
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
  {
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   314
    FnTimerImplZero (FN fn) 
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   315
      : m_fn (fn) {}
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   316
    virtual EventId Schedule (const Time &delay) {
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   317
      return Simulator::Schedule (delay, m_fn);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   318
    }
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   319
    FN m_fn;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   320
  } *function = new FnTimerImplZero (fn);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   321
  delete m_impl;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   322
  m_impl = function;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   323
}
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   324
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   325
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
   326
void 
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   327
Timer::DoSetFunction (IntToType<1>, FN fn)
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   328
{
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   329
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg1Type T1;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   330
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   331
  typedef typename TimerTraits<T1>::StoredType T1Stored;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   332
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   333
  struct FnTimerImplOne : public TimerImplOne<T1Parameter>
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   334
  {
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
    FnTimerImplOne (FN fn) 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
      : m_fn (fn) {}
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   337
    virtual void SetArguments (T1Parameter a1) {
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
      m_a1 = a1;
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
    virtual EventId Schedule (const Time &delay) {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
      return Simulator::Schedule (delay, m_fn, m_a1);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
    FN m_fn;
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   344
    T1Stored m_a1;
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
  } *function = new FnTimerImplOne (fn);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
  delete m_impl;
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   347
  m_impl = function;  
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   350
template <typename FN>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   351
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   352
Timer::DoSetFunction (IntToType<2>, FN fn)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   353
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   354
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   355
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   356
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   357
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   358
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   359
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   360
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   361
  struct FnTimerImplTwo : public TimerImplTwo<T1Parameter,T2Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   362
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   363
    FnTimerImplTwo (FN fn) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   364
      : m_fn (fn) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   365
    virtual void SetArguments (T1Parameter a1, T2Parameter a2) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   366
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   367
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   368
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   369
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   370
      return Simulator::Schedule (delay, m_fn, m_a1, m_a2);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   371
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   372
    FN m_fn;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   373
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   374
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   375
  } *function = new FnTimerImplTwo (fn);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   376
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   377
  m_impl = function;  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   378
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   379
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   380
template <typename FN>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   381
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   382
Timer::DoSetFunction (IntToType<3>, FN fn)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   383
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   384
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   385
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   386
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   387
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   388
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   389
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   390
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   391
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   392
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   393
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   394
  struct FnTimerImplThree : public TimerImplThree<T1Parameter,T2Parameter,T3Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   395
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   396
    FnTimerImplThree (FN fn) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   397
      : m_fn (fn) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   398
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   399
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   400
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   401
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   402
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   403
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   404
      return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   405
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   406
    FN m_fn;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   407
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   408
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   409
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   410
  } *function = new FnTimerImplThree (fn);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   411
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   412
  m_impl = function;  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   413
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   414
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   415
template <typename FN>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   416
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   417
Timer::DoSetFunction (IntToType<4>, FN fn)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   418
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   419
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   420
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   421
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   422
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   423
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   424
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   425
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   426
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   427
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   428
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg4Type T4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   429
  typedef typename TimerTraits<T4>::ParameterType T4Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   430
  typedef typename TimerTraits<T4>::StoredType T4Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   431
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   432
  struct FnTimerImplFour : public TimerImplFour<T1Parameter,T2Parameter,T3Parameter,T4Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   433
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   434
    FnTimerImplFour (FN fn) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   435
      : m_fn (fn) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   436
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   437
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   438
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   439
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   440
      m_a4 = a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   441
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   442
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   443
      return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3, m_a4);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   444
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   445
    FN m_fn;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   446
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   447
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   448
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   449
    T4Stored m_a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   450
  } *function = new FnTimerImplFour (fn);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   451
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   452
  m_impl = function;  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   453
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   454
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   455
template <typename FN>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   456
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   457
Timer::DoSetFunction (IntToType<5>, FN fn)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   458
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   459
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   460
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   461
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   462
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   463
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   464
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   465
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   466
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   467
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   468
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg4Type T4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   469
  typedef typename TimerTraits<T4>::ParameterType T4Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   470
  typedef typename TimerTraits<T4>::StoredType T4Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   471
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg5Type T5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   472
  typedef typename TimerTraits<T5>::ParameterType T5Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   473
  typedef typename TimerTraits<T5>::StoredType T5Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   474
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   475
  struct FnTimerImplFive : public TimerImplFive<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   476
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   477
    FnTimerImplFive (FN fn) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   478
      : m_fn (fn) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   479
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4, T5Parameter a5) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   480
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   481
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   482
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   483
      m_a4 = a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   484
      m_a5 = a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   485
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   486
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   487
      return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3, m_a4, m_a5);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   488
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   489
    FN m_fn;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   490
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   491
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   492
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   493
    T4Stored m_a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   494
    T5Stored m_a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   495
  } *function = new FnTimerImplFive (fn);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   496
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   497
  m_impl = function;  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   498
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   499
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   500
template <typename FN>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   501
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   502
Timer::DoSetFunction (IntToType<6>, FN fn)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   503
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   504
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   505
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   506
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   507
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   508
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   509
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   510
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   511
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   512
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   513
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg4Type T4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   514
  typedef typename TimerTraits<T4>::ParameterType T4Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   515
  typedef typename TimerTraits<T4>::StoredType T4Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   516
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg5Type T5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   517
  typedef typename TimerTraits<T5>::ParameterType T5Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   518
  typedef typename TimerTraits<T5>::StoredType T5Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   519
  typedef typename TypeTraits<FN>::FunctionPointerTraits::Arg6Type T6;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   520
  typedef typename TimerTraits<T6>::ParameterType T6Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   521
  typedef typename TimerTraits<T6>::StoredType T6Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   522
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   523
  struct FnTimerImplSix : public TimerImplSix<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter,T6Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   524
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   525
    FnTimerImplSix (FN fn) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   526
      : m_fn (fn) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   527
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4, T5Parameter a5, T6Parameter a6) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   528
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   529
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   530
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   531
      m_a4 = a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   532
      m_a5 = a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   533
      m_a6 = a6;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   534
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   535
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   536
      return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   537
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   538
    FN m_fn;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   539
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   540
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   541
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   542
    T4Stored m_a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   543
    T5Stored m_a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   544
    T6Stored m_a6;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   545
  } *function = new FnTimerImplSix (fn);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   546
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   547
  m_impl = function;  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   548
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   549
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   550
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
   551
void 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   552
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
   553
{
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   554
  NS_ASSERT (TypeTraits<MEM_PTR>::IsPointerToMember);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   555
  DoSetFunction (IntToType<TypeTraits<MEM_PTR>::PointerToMemberTraits::nArgs> () , memPtr, objPtr);
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   556
}
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   557
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   558
template <typename MEM_PTR, typename OBJ_PTR>
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   559
void 
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   560
Timer::DoSetFunction (IntToType<0>, MEM_PTR memPtr, OBJ_PTR objPtr)
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   561
{
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   562
  struct MemFnTimerImplZero : public TimerImpl
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   563
  {
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   564
    MemFnTimerImplZero (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
   565
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   566
    virtual EventId Schedule (const Time &delay) {
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   567
      return Simulator::Schedule (delay, m_memPtr, m_objPtr);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   568
    }
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   569
    MEM_PTR m_memPtr;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   570
    OBJ_PTR m_objPtr;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   571
  } *function = new MemFnTimerImplZero (memPtr, objPtr);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   572
  delete m_impl;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   573
  m_impl = function;    
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   574
}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   575
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   576
template <typename MEM_PTR, typename OBJ_PTR>
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   577
void 
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   578
Timer::DoSetFunction (IntToType<1>, MEM_PTR memPtr, OBJ_PTR objPtr)
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   579
{
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   580
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg1Type T1;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   581
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   582
  typedef typename TimerTraits<T1>::StoredType T1Stored;
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   583
  
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   584
  struct MemFnTimerImplOne : public TimerImplOne<T1Parameter>
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   585
  {
1677
aa92bb3efe11 add testcase, make it work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1676
diff changeset
   586
    MemFnTimerImplOne (MEM_PTR memPtr, OBJ_PTR objPtr) 
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   587
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   588
    virtual void SetArguments (T1Parameter a1) {
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   589
      m_a1 = a1;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   590
    }
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   591
    virtual EventId Schedule (const Time &delay) {
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   592
      return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   593
    }
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   594
    MEM_PTR m_memPtr;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   595
    OBJ_PTR m_objPtr;
1681
534caea78169 re-implement the Timer class with the new type traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1677
diff changeset
   596
    T1Stored m_a1;
1677
aa92bb3efe11 add testcase, make it work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1676
diff changeset
   597
  } *function = new MemFnTimerImplOne (memPtr, objPtr);
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   598
  delete m_impl;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   599
  m_impl = function;    
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   600
}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   601
1686
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   602
template <typename MEM_PTR, typename OBJ_PTR>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   603
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   604
Timer::DoSetFunction (IntToType<2>, MEM_PTR memPtr, OBJ_PTR objPtr)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   605
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   606
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   607
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   608
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   609
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   610
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   611
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   612
  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   613
  struct MemFnTimerImplTwo : public TimerImplTwo<T1Parameter,T2Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   614
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   615
    MemFnTimerImplTwo (MEM_PTR memPtr, OBJ_PTR objPtr) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   616
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   617
    virtual void SetArguments (T1Parameter a1, T2Parameter a2) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   618
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   619
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   620
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   621
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   622
      return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   623
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   624
    MEM_PTR m_memPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   625
    OBJ_PTR m_objPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   626
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   627
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   628
  } *function = new MemFnTimerImplTwo (memPtr, objPtr);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   629
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   630
  m_impl = function;    
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   631
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   632
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   633
template <typename MEM_PTR, typename OBJ_PTR>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   634
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   635
Timer::DoSetFunction (IntToType<3>, MEM_PTR memPtr, OBJ_PTR objPtr)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   636
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   637
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   638
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   639
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   640
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   641
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   642
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   643
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   644
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   645
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   646
  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   647
  struct MemFnTimerImplThree : public TimerImplThree<T1Parameter,T2Parameter,T3Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   648
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   649
    MemFnTimerImplThree (MEM_PTR memPtr, OBJ_PTR objPtr) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   650
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   651
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   652
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   653
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   654
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   655
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   656
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   657
      return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   658
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   659
    MEM_PTR m_memPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   660
    OBJ_PTR m_objPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   661
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   662
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   663
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   664
  } *function = new MemFnTimerImplThree (memPtr, objPtr);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   665
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   666
  m_impl = function;    
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   667
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   668
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   669
template <typename MEM_PTR, typename OBJ_PTR>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   670
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   671
Timer::DoSetFunction (IntToType<4>, MEM_PTR memPtr, OBJ_PTR objPtr)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   672
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   673
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   674
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   675
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   676
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   677
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   678
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   679
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   680
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   681
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   682
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg4Type T4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   683
  typedef typename TimerTraits<T4>::ParameterType T4Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   684
  typedef typename TimerTraits<T4>::StoredType T4Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   685
  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   686
  struct MemFnTimerImplFour : public TimerImplFour<T1Parameter,T2Parameter,T3Parameter,T4Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   687
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   688
    MemFnTimerImplFour (MEM_PTR memPtr, OBJ_PTR objPtr) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   689
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   690
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   691
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   692
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   693
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   694
      m_a4 = a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   695
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   696
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   697
      return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   698
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   699
    MEM_PTR m_memPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   700
    OBJ_PTR m_objPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   701
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   702
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   703
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   704
    T4Stored m_a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   705
  } *function = new MemFnTimerImplFour (memPtr, objPtr);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   706
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   707
  m_impl = function;    
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   708
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   709
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   710
template <typename MEM_PTR, typename OBJ_PTR>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   711
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   712
Timer::DoSetFunction (IntToType<5>, MEM_PTR memPtr, OBJ_PTR objPtr)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   713
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   714
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   715
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   716
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   717
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   718
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   719
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   720
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   721
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   722
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   723
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg4Type T4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   724
  typedef typename TimerTraits<T4>::ParameterType T4Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   725
  typedef typename TimerTraits<T4>::StoredType T4Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   726
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg5Type T5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   727
  typedef typename TimerTraits<T5>::ParameterType T5Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   728
  typedef typename TimerTraits<T5>::StoredType T5Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   729
  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   730
  struct MemFnTimerImplFive : public TimerImplFive<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   731
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   732
    MemFnTimerImplFive (MEM_PTR memPtr, OBJ_PTR objPtr) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   733
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   734
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4,T5Parameter a5) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   735
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   736
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   737
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   738
      m_a4 = a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   739
      m_a5 = a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   740
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   741
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   742
      return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4, m_a5);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   743
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   744
    MEM_PTR m_memPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   745
    OBJ_PTR m_objPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   746
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   747
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   748
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   749
    T4Stored m_a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   750
    T5Stored m_a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   751
  } *function = new MemFnTimerImplFive (memPtr, objPtr);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   752
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   753
  m_impl = function;    
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   754
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   755
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   756
template <typename MEM_PTR, typename OBJ_PTR>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   757
void 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   758
Timer::DoSetFunction (IntToType<6>, MEM_PTR memPtr, OBJ_PTR objPtr)
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   759
{
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   760
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg1Type T1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   761
  typedef typename TimerTraits<T1>::ParameterType T1Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   762
  typedef typename TimerTraits<T1>::StoredType T1Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   763
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg2Type T2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   764
  typedef typename TimerTraits<T2>::ParameterType T2Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   765
  typedef typename TimerTraits<T2>::StoredType T2Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   766
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg3Type T3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   767
  typedef typename TimerTraits<T3>::ParameterType T3Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   768
  typedef typename TimerTraits<T3>::StoredType T3Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   769
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg4Type T4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   770
  typedef typename TimerTraits<T4>::ParameterType T4Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   771
  typedef typename TimerTraits<T4>::StoredType T4Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   772
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg5Type T5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   773
  typedef typename TimerTraits<T5>::ParameterType T5Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   774
  typedef typename TimerTraits<T5>::StoredType T5Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   775
  typedef typename TypeTraits<MEM_PTR>::PointerToMemberTraits::Arg6Type T6;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   776
  typedef typename TimerTraits<T6>::ParameterType T6Parameter;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   777
  typedef typename TimerTraits<T6>::StoredType T6Stored;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   778
  
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   779
  struct MemFnTimerImplSix : public TimerImplSix<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter,T6Parameter>
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   780
  {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   781
    MemFnTimerImplSix (MEM_PTR memPtr, OBJ_PTR objPtr) 
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   782
      : m_memPtr (memPtr), m_objPtr (objPtr) {}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   783
    virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4,T5Parameter a5,T6Parameter a6) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   784
      m_a1 = a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   785
      m_a2 = a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   786
      m_a3 = a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   787
      m_a4 = a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   788
      m_a5 = a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   789
      m_a6 = a6;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   790
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   791
    virtual EventId Schedule (const Time &delay) {
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   792
      return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   793
    }
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   794
    MEM_PTR m_memPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   795
    OBJ_PTR m_objPtr;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   796
    T1Stored m_a1;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   797
    T2Stored m_a2;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   798
    T3Stored m_a3;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   799
    T4Stored m_a4;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   800
    T5Stored m_a5;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   801
    T6Stored m_a6;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   802
  } *function = new MemFnTimerImplSix (memPtr, objPtr);
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   803
  delete m_impl;
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   804
  m_impl = function;    
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   805
}
bcb26f45868f add support for 6-arg Timer::SetFunction
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1685
diff changeset
   806
1685
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   807
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   808
template <typename T1>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   809
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   810
Timer::SetArguments (T1 a1)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   811
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   812
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   813
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   814
      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
   815
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   816
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   817
  typedef struct TimerImplOne<
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   818
    typename TimerTraits<T1>::ParameterType
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   819
    > TimerImplBase;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   820
  TimerImplBase *impl = dynamic_cast<TimerImplBase *> (m_impl);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   821
  if (impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   822
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   823
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   824
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   825
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   826
  impl->SetArguments (a1);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   827
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   828
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   829
template <typename T1, typename T2>
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   830
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   831
Timer::SetArguments (T1 a1, T2 a2)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   832
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   833
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   834
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   835
      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
   836
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   837
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   838
  typedef struct TimerImplTwo<
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   839
    typename TimerTraits<T1>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   840
    typename TimerTraits<T2>::ParameterType
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   841
    > TimerImplBase;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   842
  TimerImplBase *impl = dynamic_cast<TimerImplBase *> (m_impl);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   843
  if (impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   844
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   845
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   846
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   847
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   848
  impl->SetArguments (a1, a2);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   849
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   850
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   851
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
   852
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   853
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
   854
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   855
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   856
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   857
      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
   858
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   859
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   860
  typedef struct TimerImplThree<
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   861
    typename TimerTraits<T1>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   862
    typename TimerTraits<T2>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   863
    typename TimerTraits<T3>::ParameterType
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   864
    > TimerImplBase;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   865
  TimerImplBase *impl = dynamic_cast<TimerImplBase *> (m_impl);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   866
  if (impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   867
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   868
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   869
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   870
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   871
  impl->SetArguments (a1, a2, a3);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   872
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   873
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   874
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
   875
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   876
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
   877
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   878
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   879
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   880
      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
   881
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   882
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   883
  typedef struct TimerImplFour<
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   884
    typename TimerTraits<T1>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   885
    typename TimerTraits<T2>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   886
    typename TimerTraits<T3>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   887
    typename TimerTraits<T4>::ParameterType
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   888
    > TimerImplBase;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   889
  TimerImplBase *impl = dynamic_cast<TimerImplBase *> (m_impl);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   890
  if (impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   891
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   892
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   893
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   894
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   895
  impl->SetArguments (a1, a2, a3, a4);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   896
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   897
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   898
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
   899
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   900
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
   901
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   902
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   903
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   904
      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
   905
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   906
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   907
  typedef struct TimerImplFive<
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   908
    typename TimerTraits<T1>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   909
    typename TimerTraits<T2>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   910
    typename TimerTraits<T3>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   911
    typename TimerTraits<T4>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   912
    typename TimerTraits<T5>::ParameterType
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   913
    > TimerImplBase;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   914
  TimerImplBase *impl = dynamic_cast<TimerImplBase *> (m_impl);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   915
  if (impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   916
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   917
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   918
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   919
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   920
  impl->SetArguments (a1, a2, a3, a4, a5);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   921
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   922
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   923
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
   924
void 
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   925
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
   926
{
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   927
  if (m_impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   928
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   929
      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
   930
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   931
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   932
  typedef struct TimerImplSix<
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   933
    typename TimerTraits<T1>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   934
    typename TimerTraits<T2>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   935
    typename TimerTraits<T3>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   936
    typename TimerTraits<T4>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   937
    typename TimerTraits<T5>::ParameterType,
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   938
    typename TimerTraits<T6>::ParameterType
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   939
    > TimerImplBase;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   940
  TimerImplBase *impl = dynamic_cast<TimerImplBase *> (m_impl);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   941
  if (impl == 0)
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   942
    {
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   943
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   944
      return;
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   945
    }
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   946
  impl->SetArguments (a1, a2, a3, a4, a5, a6);
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   947
}
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   948
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   949
c5d6ada65f62 add support for 6-arg SetArguments
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1682
diff changeset
   950
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   951
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   952
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   953
#endif /* TIMER_H */