src/simulator/timer.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 27 Sep 2007 13:45:55 +0200
changeset 1676 50cd3fce4f3c
parent 1675 cbc6a9dd3046
child 1677 aa92bb3efe11
permissions -rw-r--r--
implement the member function version of Timer::SetFunction (a1)
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"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
namespace ns3 {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
class TimerImpl;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    12
/**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    13
 * \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
    14
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    15
 * 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
    16
 * 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
    17
 * 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
    18
 *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    19
 * 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
    20
 * 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
    21
 * 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
    22
 */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
class Timer 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
public:
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
  enum {
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    27
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    28
     * This policy enforces a check before each call to Timer::Schedule
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    29
     * to verify that the timer has already expired. This policy
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    30
     * is incompatible with CANCEL_ON_SCHEDULE REMOVE_ON_SCHEDULE, and,
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    31
     * GARBAGE_COLLECT.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    32
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
    CHECK_ON_SCHEDULE = (1<<0),
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    34
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    35
     * This policy enforces a check from the destructor of the Timer
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    36
     * to verify that the timer has already expired. This policy is
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    37
     * incompatible with CANCEL_ON_DESTROY, REMOVE_ON_DESTROY, and
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    38
     * GARBAGE_COLLECT.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    39
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
    CHECK_ON_DESTROY = (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
    41
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    42
     * This policy cancels the event before scheduling a new event 
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    43
     * for each call to Timer::Schedule. This policy
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    44
     * is incompatible with CHECK_ON_SCHEDULE, REMOVE_ON_SCHEDULE, and,
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    45
     * GARBAGE_COLLECT.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    46
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
    CANCEL_ON_SCHEDULE = (1<<2),
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    48
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    49
     * This policy cancels the event from the destructor of the Timer
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    50
     * to verify that the event has already expired. This policy is
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    51
     * incompatible with CHECK_ON_DESTROY, REMOVE_ON_DESTROY, and
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    52
     * GARBAGE_COLLECT.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    53
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    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
    55
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    56
     * This policy removes the event from the simulation event list 
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    57
     * before scheduling a new event for each call to Timer::Schedule. 
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    58
     * This policy is incompatible with 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
    59
     * CANCEL_ON_SCHEDULE, and, GARBAGE_COLLECT.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    60
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
    REMOVE_ON_SCHEDULE = (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
    62
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    63
     * This policy removes the event from the simulation event list
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    64
     * when the destructor of the Timer is invoked. This policy is
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    65
     * incompatible with CHECK_ON_DESTROY, CANCEL_ON_DESTROY, and
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    66
     * GARBAGE_COLLECT.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    67
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
    REMOVE_ON_DESTROY = (1<<5),
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    69
    /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    70
     * This policy is incompatible with all other policies. Event
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    71
     * event scheduled with this policy is kept track of by an
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    72
     * 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
    73
     * 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
    74
     * 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
    75
     */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
    GARBAGE_COLLECT = (1<<6),
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  };
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    78
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    79
   * 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
    80
   *  - 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
    81
   *  - 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
    82
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  Timer ();
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    84
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    85
   * \param flags the event lifetime management policies to use
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    86
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    87
   * The set of flag combinations allowed is:
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    88
   *  - none
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    89
   *  - GARBAGE_COLLECT
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    90
   *  - one of CANCEL_ON_DESTROY, REMOVE_ON_DESTROY, or, 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
    91
   *  - one of CANCEL_ON_SCHEDULE, REMOVE_ON_SCHEDULE, or, 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
    92
   *  - one of CANCEL_ON_DESTROY, REMOVE_ON_DESTROY, or, CHECK_ON_DESTROY ored
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
    93
   *    with one of CANCEL_ON_SCHEDULE, REMOVE_ON_SCHEDULE, or, 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
    94
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
  Timer (int flags);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
  ~Timer ();
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    98
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
    99
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   100
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   101
   * 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
   102
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
  void SetFunction (void (*fn) (void));
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   104
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   105
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   106
   * \param a1 the first argument
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   107
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   108
   * Store this function and this argument in this Timer for later use by 
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   109
   * Timer::Schedule.
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   110
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
  template <typename U1, typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  void SetFunction (void (*fn) (U1), T1 a1);
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   113
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   114
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   115
   * \param a1 the first argument
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   116
   * \param a2 the second argument
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   117
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   118
   * Store this function and these arguments in this Timer for later use by 
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   119
   * Timer::Schedule.
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   120
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
  template <typename U1, typename U2,
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
            typename T1, typename T2>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
  void SetFunction (void (*fn) (U1, U2), T1 a1, T2 a2);
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   124
  /**
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   125
   * \param fn the function
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   126
   * \param a1 the first argument
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   127
   * \param a2 the second argument
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   128
   * \param a3 the third argument
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   129
   *
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   130
   * Store this function and these arguments in this Timer for later use by 
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   131
   * Timer::Schedule.
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   132
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
  template <typename U1, typename U2, typename U3,
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
            typename T1, typename T2, typename T3>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
  void SetFunction (void (*fn) (U1, U2, U3), T1 a1, T2 a2, T3 a3);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   137
  /**
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   138
   * \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
   139
   * \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
   140
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   141
   * 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
   142
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   143
  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
   144
  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
   145
  /**
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   146
   * \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
   147
   * \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
   148
   * \param a1 the first argument
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   149
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   150
   * Store this function and this argument in this Timer for later use by 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   151
   * Timer::Schedule.
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   152
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   153
  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
   154
            typename T1>
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   155
  void SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr, T1 a1);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   156
  /**
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   157
   * \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
   158
   * \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
   159
   * \param a1 the first argument
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   160
   * \param a2 the second argument
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   161
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   162
   * Store this function and these arguments in this Timer for later use by 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   163
   * Timer::Schedule.
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   164
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   165
  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
   166
            typename T1, typename T2>
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   167
  void SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr, T1 a1, T2 a2);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   168
  /**
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   169
   * \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
   170
   * \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
   171
   * \param a1 the first argument
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   172
   * \param a2 the second argument
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   173
   * \param a3 the third argument
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   174
   *
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   175
   * Store this function and these arguments in this Timer for later use by 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   176
   * Timer::Schedule.
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   177
   */
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   178
  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
   179
            typename T1, typename T2, typename T3>
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   180
  void SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr, T1 a1, T2 a2, T3 a3);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   181
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   182
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   183
  /**
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   184
   * \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
   185
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   186
   * 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
   187
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
  template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
  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
   190
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   191
   * \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
   192
   * \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
   193
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   194
   * 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
   195
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
  template <typename T1, typename T2>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
  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
   198
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   199
   * \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
   200
   * \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
   201
   * \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
   202
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   203
   * 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
   204
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
  template <typename T1, typename T2, typename T3>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
  void SetArguments (T1 a1, T2 a2, T3 a3);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   208
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   209
   * \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
   210
   *
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   211
   * 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
   212
   */
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   213
  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
   214
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   215
   * \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
   216
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
  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
   218
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   219
   * 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
   220
   * otherwise.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   221
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
  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
   223
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   224
   * 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
   225
   * 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
   226
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
  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
   228
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   229
   * \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
   230
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
  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
   232
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   233
   * \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
   234
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
  bool IsRunning (void) const;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
1674
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   237
  /**
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   238
   * 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
   239
   * and arguments.
bcd53041f2b2 add doxygen for Timer class and implement the policy flags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1673
diff changeset
   240
   */
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
  void Schedule (void);
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
private:
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
  int m_flags;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
  Time m_delay;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
  EventId m_event;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
  TimerImpl *m_impl;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
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
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
// The actual implementation.
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
#include "simulator.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
#include "ns3/type-traits.h"
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
namespace ns3 {
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
template <typename T>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
struct TimerTraits;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
template <typename T>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
struct TimerTraits
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
  typedef typename TypeTraits<typename TypeTraits<T>::ReferencedType>::NonConstType StoredType;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
  typedef const StoredType &ParameterType;
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
class TimerImpl
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
public:
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
  virtual ~TimerImpl () {}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
  virtual EventId Schedule (const Time &delay) = 0;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
struct TimerImplOne : public TimerImpl
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
  virtual void SetArguments (T1 a1) = 0;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
};
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
template <typename U1, typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
void 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
Timer::SetFunction (void (*fn) (U1), T1 a1)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
  struct FnTimerImplOne : public TimerImplOne<typename TimerTraits<U1>::ParameterType>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
  {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
    typedef void (*FN) (U1);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
    FnTimerImplOne (FN fn) 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
      : m_fn (fn) {}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
    virtual void SetArguments (typename TimerTraits<U1>::ParameterType a1) {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
      m_a1 = a1;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
    virtual EventId Schedule (const Time &delay) {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
      return Simulator::Schedule (delay, m_fn, m_a1);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
    FN m_fn;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
    typename TimerTraits<T1>::StoredType m_a1;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
  } *function = new FnTimerImplOne (fn);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  function->SetArguments (a1);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
  delete m_impl;
1675
cbc6a9dd3046 add some doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1674
diff changeset
   303
  m_impl = function;  
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
template <typename T1>
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
void 
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
Timer::SetArguments (T1 a1)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
{
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
  if (m_impl == 0)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
      NS_FATAL_ERROR ("You cannot set the arguments of a Timer before setting its function.");
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
      return;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
  struct TimerImplOne<typename TimerTraits<T1>::ParameterType> *impl =
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
    dynamic_cast<struct TimerImplOne<typename TimerTraits<T1>::ParameterType> *> (m_impl);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
  if (impl == 0)
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
    {
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
      NS_FATAL_ERROR ("You tried to set Timer arguments incompatible with its function.");
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
      return;
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
    }
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
  impl->SetArguments (a1);
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
}
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
1676
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   325
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
   326
void 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   327
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
   328
{
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   329
  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
   330
  {
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   331
    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
   332
      : 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
   333
    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
   334
      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
   335
    }
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   336
    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
   337
    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
   338
  } *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
   339
  delete m_impl;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   340
  m_impl = function;    
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   341
}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   342
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   343
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   344
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   345
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
   346
         typename T1>
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   347
void 
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   348
Timer::SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr, T1 a1)
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   349
{
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   350
  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
   351
  {
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   352
    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
   353
      : 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
   354
    virtual void SetArguments (typename TimerTraits<T1>::ParameterType a1) {
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   355
      m_a1 = a1;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   356
    }
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   357
    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
   358
      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
   359
    }
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   360
    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
   361
    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
   362
    typename TimerTraits<T1>::StoredType m_a1;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   363
  } *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
   364
  function->SetArguments (a1);
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   365
  delete m_impl;
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   366
  m_impl = function;    
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   367
}
50cd3fce4f3c implement the member function version of Timer::SetFunction (a1)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1675
diff changeset
   368
1673
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   369
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
} // namespace ns3
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
9886637756a1 Implement a Timer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
#endif /* TIMER_H */