src/simulator/simulator.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 04 May 2007 14:03:12 +0200
changeset 523 eb380b33ae24
parent 472 41aa5fca4f49
parent 439 fed13fb45eef
child 675 a5878de7d71c
permissions -rw-r--r--
merge with HEAD
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "simulator.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "scheduler.h"
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
    24
#include "event-impl.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
    26
#include "ns3/assert.h"
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
    27
#include "ns3/default-value.h"
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
    28
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
    29
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
#include <math.h>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include <fstream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
#include <list>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#include <vector>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
#define noTRACE_SIMU 1
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
#ifdef TRACE_SIMU
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
# define TRACE(x) \
213
1e6d6776b284 fix trace output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 209
diff changeset
    41
std::cout << "SIMU TRACE " << Simulator::Now () << " " << x << std::endl;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
# define TRACE_S(x) \
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
std::cout << "SIMU TRACE " << x << std::endl;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
#else /* TRACE_SIMU */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
# define TRACE(format,...)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
# define TRACE_S(format,...)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
#endif /* TRACE_SIMU */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    50
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
class SimulatorPrivate {
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
public:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    55
  SimulatorPrivate (Scheduler *events);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    56
  ~SimulatorPrivate ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    58
  void EnableLogTo (char const *filename);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    60
  bool IsFinished (void) const;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    61
  Time Next (void) const;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    62
  void Stop (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    63
  void StopAt (Time const &time);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    64
  EventId Schedule (Time const &time, EventImpl *event);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    65
  void ScheduleNow (EventImpl *event);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    66
  void ScheduleDestroy (EventImpl *event);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    67
  void Remove (EventId ev);
472
41aa5fca4f49 make sure that Simulator::Cancel deals correctly with events which were already scheduled
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 336
diff changeset
    68
  void Cancel (EventId &ev);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    69
  bool IsExpired (EventId ev);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    70
  void Run (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    71
  Time Now (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
private:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    74
  void ProcessOneEvent (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    75
  uint64_t NextNs (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    77
  typedef std::list<std::pair<EventImpl *,uint32_t> > Events;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    78
  Events m_destroy;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    79
  uint64_t m_stopAt;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    80
  bool m_stop;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    81
  Scheduler *m_events;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    82
  uint32_t m_uid;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    83
  uint32_t m_currentUid;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    84
  uint64_t m_currentNs;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    85
  std::ofstream m_log;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    86
  std::ifstream m_inputLog;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    87
  bool m_logEnable;
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
    88
  // number of events that have been inserted but not yet scheduled,
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
    89
  // not counting the "destroy" events; this is used for validation
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
    90
  int m_unscheduledEvents;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
SimulatorPrivate::SimulatorPrivate (Scheduler *events)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    98
  m_stop = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
    99
  m_stopAt = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   100
  m_events = events;
200
46031a283b0d We need to make sure that the uid of the first event generated is different from the uid of the simulator when no events have yet been run.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 198
diff changeset
   101
  // uids are allocated from 1.
46031a283b0d We need to make sure that the uid of the first event generated is different from the uid of the simulator when no events have yet been run.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 198
diff changeset
   102
  m_uid = 1; 
46031a283b0d We need to make sure that the uid of the first event generated is different from the uid of the simulator when no events have yet been run.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 198
diff changeset
   103
  // before ::Run is entered, the m_currentUid will be zero
46031a283b0d We need to make sure that the uid of the first event generated is different from the uid of the simulator when no events have yet been run.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 198
diff changeset
   104
  m_currentUid = 0;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   105
  m_logEnable = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   106
  m_currentNs = 0;
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   107
  m_unscheduledEvents = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
SimulatorPrivate::~SimulatorPrivate ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   112
  while (!m_destroy.empty ()) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   113
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   114
      EventImpl *ev = m_destroy.front ().first;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   115
      m_destroy.pop_front ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   116
      TRACE ("handle destroy " << ev);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   117
      ev->Invoke ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   118
      delete ev;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   119
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   120
  delete m_events;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   121
  m_events = (Scheduler *)0xdeadbeaf;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   126
SimulatorPrivate::EnableLogTo (char const *filename)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   128
  m_log.open (filename);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   129
  m_logEnable = true;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   133
SimulatorPrivate::ProcessOneEvent (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   135
  EventImpl *nextEv = m_events->PeekNext ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   136
  Scheduler::EventKey nextKey = m_events->PeekNextKey ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   137
  m_events->RemoveNext ();
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   138
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   139
  NS_ASSERT (nextKey.m_ns >= m_currentNs);
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   140
  --m_unscheduledEvents;
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   141
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   142
  TRACE ("handle " << nextEv);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   143
  m_currentNs = nextKey.m_ns;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   144
  m_currentUid = nextKey.m_uid;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   145
  if (m_logEnable) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   146
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   147
      m_log << "e "<<nextKey.m_uid << " " << nextKey.m_ns << std::endl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   148
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   149
  nextEv->Invoke ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   150
  delete nextEv;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
bool 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   154
SimulatorPrivate::IsFinished (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   156
  return m_events->IsEmpty ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
}
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   158
uint64_t
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   159
SimulatorPrivate::NextNs (void) const
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   160
{
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 213
diff changeset
   161
  NS_ASSERT (!m_events->IsEmpty ());
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   162
  Scheduler::EventKey nextKey = m_events->PeekNextKey ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   163
  return nextKey.m_ns;
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   164
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   165
Time
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   166
SimulatorPrivate::Next (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   168
  return NanoSeconds (NextNs ());
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   173
SimulatorPrivate::Run (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
{
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   175
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   176
  while (!m_events->IsEmpty () && !m_stop && 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   177
         (m_stopAt == 0 || m_stopAt > NextNs ())) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   178
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   179
      ProcessOneEvent ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   180
    }
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   181
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   182
  // If the simulator stopped naturally by lack of events, make a
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   183
  // consistency test to check that we didn't lose any events along the way.
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   184
  NS_ASSERT(!m_events->IsEmpty () || m_unscheduledEvents == 0);
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   185
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   186
  m_log.close ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   191
SimulatorPrivate::Stop (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   193
  m_stop = true;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   196
SimulatorPrivate::StopAt (Time const &at)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
{
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 213
diff changeset
   198
  NS_ASSERT (at.IsPositive ());
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   199
  m_stopAt = at.GetNanoSeconds ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   201
EventId
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   202
SimulatorPrivate::Schedule (Time const &time, EventImpl *event)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
{
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 213
diff changeset
   204
  NS_ASSERT (time.IsPositive ());
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 213
diff changeset
   205
  NS_ASSERT (time >= NanoSeconds (m_currentNs));
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   206
  uint64_t ns = (uint64_t) time.GetNanoSeconds ();
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   207
  Scheduler::EventKey key = {ns, m_uid};
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   208
  if (m_logEnable) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   209
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   210
      m_log << "i "<<m_currentUid<<" "<<m_currentNs<<" "
198
91baf9670758 Log format is defined in units of nano seconds rather than seconds.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 187
diff changeset
   211
            <<m_uid<<" "<<time.GetNanoSeconds () << std::endl;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   212
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   213
  m_uid++;
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   214
  ++m_unscheduledEvents;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   215
  return m_events->Insert (event, key);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
}
145
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   217
void 
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   218
SimulatorPrivate::ScheduleNow (EventImpl *event)
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   219
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   220
  uint64_t ns = m_currentNs;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   221
  Scheduler::EventKey key = {ns, m_uid};
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   222
  if (m_logEnable) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   223
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   224
      m_log << "i "<<m_currentUid<<" "<<m_currentNs<<" "
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   225
            <<m_uid<<" "<<ns << std::endl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   226
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   227
  m_uid++;
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   228
  ++m_unscheduledEvents;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   229
  m_events->Insert (event, key);
145
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   230
}
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   231
void 
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   232
SimulatorPrivate::ScheduleDestroy (EventImpl *event)
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   233
{
147
705658c244c3 implement ScheduleNow and ScheduleDestroy methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 146
diff changeset
   234
  m_destroy.push_back (std::make_pair (event, m_uid));  
705658c244c3 implement ScheduleNow and ScheduleDestroy methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 146
diff changeset
   235
  if (m_logEnable) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   236
  {
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   237
    m_log << "id " << m_currentUid << " " << Now ().GetNanoSeconds () << " "
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   238
          << m_uid << std::endl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   239
  }
147
705658c244c3 implement ScheduleNow and ScheduleDestroy methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 146
diff changeset
   240
  m_uid++;
145
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   241
}
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   242
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   243
Time
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   244
SimulatorPrivate::Now (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   246
  return NanoSeconds (m_currentNs);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   248
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   250
SimulatorPrivate::Remove (EventId ev)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   252
  Scheduler::EventKey key;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   253
  EventImpl *impl = m_events->Remove (ev, &key);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   254
  delete impl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   255
  if (m_logEnable) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   256
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   257
      m_log << "r " << m_currentUid << " " << m_currentNs << " "
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   258
            << key.m_uid << " " << key.m_ns << std::endl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   259
    }
336
9dd9a53188bc add consistency checks. Based on patch by Gustavo Carneiro
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
   260
  --m_unscheduledEvents;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   263
void
472
41aa5fca4f49 make sure that Simulator::Cancel deals correctly with events which were already scheduled
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 336
diff changeset
   264
SimulatorPrivate::Cancel (EventId &id)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
{
472
41aa5fca4f49 make sure that Simulator::Cancel deals correctly with events which were already scheduled
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 336
diff changeset
   266
  id.Cancel ();
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   267
}
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   268
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   269
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   270
SimulatorPrivate::IsExpired (EventId ev)
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   271
{
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   272
  if (ev.GetEventImpl () == 0 ||
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   273
      ev.GetNs () < m_currentNs ||
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   274
      (ev.GetNs () == m_currentNs &&
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   275
       ev.GetUid () <= m_currentUid) ||
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   276
      ev.GetEventImpl ()->IsCancelled ()) 
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   277
    {
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   278
      return true;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   279
    }
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   280
  else
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   281
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   282
      return false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   283
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   287
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
#include "scheduler-list.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
#include "scheduler-heap.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
#include "scheduler-map.h"
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   293
#include "scheduler-factory.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   296
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
SimulatorPrivate *Simulator::m_priv = 0;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   300
void Simulator::SetLinkedList (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
{
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
   302
  Bind ("scheduler", "list");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
}
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   304
void Simulator::SetBinaryHeap (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
{
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
   306
  Bind ("scheduler", "BinaryHeap");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
}
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   308
void Simulator::SetStdMap (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
{
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
   310
  Bind ("scheduler", "map");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
}
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   312
void 
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
   313
Simulator::SetExternal (const std::string &external)
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   314
{
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
   315
  Bind ("scheduler", external);
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   316
}
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   317
void Simulator::EnableLogTo (char const *filename)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   319
  GetPriv ()->EnableLogTo (filename);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
SimulatorPrivate *
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   324
Simulator::GetPriv (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   326
  if (m_priv == 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   327
    {
439
fed13fb45eef Incorporated defaults and command-line arguments
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 336
diff changeset
   328
      Scheduler *events = SchedulerFactory::CreateDefault ();
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   329
      m_priv = new SimulatorPrivate (events);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   330
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   331
  TRACE_S ("priv " << m_priv);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   332
  return m_priv;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   336
Simulator::Destroy (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   338
  delete m_priv;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   339
  m_priv = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
bool 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   344
Simulator::IsFinished (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   346
  return GetPriv ()->IsFinished ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   348
Time
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   349
Simulator::Next (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   351
  return GetPriv ()->Next ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   356
Simulator::Run (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   358
  GetPriv ()->Run ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   361
Simulator::Stop (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   363
  TRACE ("stop");
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   364
  GetPriv ()->Stop ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   365
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
void 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   367
Simulator::StopAt (Time const &at)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   369
  GetPriv ()->StopAt (at);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   371
Time
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   372
Simulator::Now (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   374
  return GetPriv ()->Now ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   376
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   377
EventImpl *
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   378
Simulator::MakeEvent (void (*f) (void))
145
947b77174b72 start of work to re-implement Schedule* methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 144
diff changeset
   379
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   380
    // zero arg version
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   381
  class EventFunctionImpl0 : public EventImpl {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   382
  public:
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   383
  	typedef void (*F)(void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   384
      
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   385
  	EventFunctionImpl0 (F function) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   386
  		: m_function (function)
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   387
  	{}
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   388
  	virtual ~EventFunctionImpl0 () {}
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   389
  protected:
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   390
  	virtual void Notify (void) { 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   391
  		(*m_function) (); 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   392
      }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   393
  private:
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   394
  	F m_function;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   395
  } *ev = new EventFunctionImpl0 (f);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   396
  return ev;
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   397
}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   398
EventId
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   399
Simulator::Schedule (Time const &time, EventImpl *ev)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   400
{
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   401
  return GetPriv ()->Schedule (Now () + time, ev);
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   402
}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   403
void
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   404
Simulator::ScheduleNow (EventImpl *ev)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   405
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   406
  GetPriv ()->ScheduleNow (ev);
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   407
}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   408
void
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   409
Simulator::ScheduleDestroy (EventImpl *ev)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   410
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   411
  GetPriv ()->ScheduleDestroy (ev);
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   412
}  
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   413
EventId
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   414
Simulator::Schedule (Time const &time, void (*f) (void))
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   415
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   416
  return Schedule (time, MakeEvent (f));
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   417
}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   418
void
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   419
Simulator::ScheduleNow (void (*f) (void))
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   420
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   421
  return ScheduleNow (MakeEvent (f));
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   422
}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   423
void
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   424
Simulator::ScheduleDestroy (void (*f) (void))
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   425
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   426
  return ScheduleDestroy (MakeEvent (f));
75
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   427
}
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   428
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   429
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   430
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   431
Simulator::Remove (EventId ev)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   432
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   433
  return GetPriv ()->Remove (ev);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   434
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   436
void
472
41aa5fca4f49 make sure that Simulator::Cancel deals correctly with events which were already scheduled
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 336
diff changeset
   437
Simulator::Cancel (EventId &ev)
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   438
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   439
  return GetPriv ()->Cancel (ev);
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   440
}
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   441
bool 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   442
Simulator::IsExpired (EventId id)
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   443
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   444
  return GetPriv ()->IsExpired (id);
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   445
}
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   446
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   447
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   448
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   449
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   450
#ifdef RUN_SELF_TESTS
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   451
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   452
#include "ns3/test.h"
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   453
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   454
namespace ns3 {
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   455
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   456
static void foo0 (void)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   457
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   458
static void foo1 (int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   459
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   460
static void foo2 (int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   461
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   462
static void foo3 (int, int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   463
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   464
static void foo4 (int, int, int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   465
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   466
static void foo5 (int, int, int, int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   467
{}  
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   468
  
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   469
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   470
class SimulatorTests : public Test {
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   471
public:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   472
  SimulatorTests ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   473
  virtual ~SimulatorTests ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   474
  virtual bool RunTests (void);
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   475
private:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   476
  uint64_t NowUs ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   477
  bool RunOneTest (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   478
  void A (int a);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   479
  void B (int b);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   480
  void C (int c);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   481
  void D (int d);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   482
  void bar0 (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   483
  void bar1 (int);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   484
  void bar2 (int, int);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   485
  void bar3 (int, int, int);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   486
  void bar4 (int, int, int, int);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   487
  void bar5 (int, int, int, int, int);
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   488
  
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   489
  bool m_b;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   490
  bool m_a;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   491
  bool m_c;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   492
  bool m_d;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   493
  EventId m_idC;
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   494
};
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   495
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   496
SimulatorTests::SimulatorTests ()
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   497
  : Test ("Simulator")
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   498
{}
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   499
SimulatorTests::~SimulatorTests ()
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   500
{}
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   501
uint64_t
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   502
SimulatorTests::NowUs (void)
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   503
{
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 162
diff changeset
   504
  uint64_t ns = Now ().GetNanoSeconds ();
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   505
  return ns / 1000;
143
552ff26b4224 new Time implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 129
diff changeset
   506
}  
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   507
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   508
SimulatorTests::A (int a)
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   509
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   510
  m_a = false;
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   511
}
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   512
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   513
SimulatorTests::B (int b)
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   514
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   515
  if (b != 2 || NowUs () != 11) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   516
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   517
      m_b = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   518
    } 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   519
  else 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   520
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   521
      m_b = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   522
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   523
  Simulator::Remove (m_idC);
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   524
  Simulator::Schedule (MicroSeconds (10), &SimulatorTests::D, this, 4);
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   525
}
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   526
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   527
SimulatorTests::C (int c)
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   528
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   529
  m_c = false;
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   530
}
32
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   531
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   532
SimulatorTests::D (int d)
32
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   533
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   534
  if (d != 4 || NowUs () != (11+10)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   535
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   536
      m_d = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   537
    } 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   538
  else 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   539
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   540
      m_d = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   541
    }
32
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   542
}
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   543
void 
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   544
SimulatorTests::bar0 (void)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   545
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   546
void 
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   547
SimulatorTests::bar1 (int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   548
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   549
void 
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   550
SimulatorTests::bar2 (int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   551
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   552
void 
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   553
SimulatorTests::bar3 (int, int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   554
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   555
void 
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   556
SimulatorTests::bar4 (int, int, int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   557
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   558
void 
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   559
SimulatorTests::bar5 (int, int, int, int, int)
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   560
{}
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   561
114
fe0504af6d16 test each default event scheduler
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   562
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   563
SimulatorTests::RunOneTest (void)
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   564
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   565
  bool ok = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   566
  m_a = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   567
  m_b = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   568
  m_c = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   569
  m_d = false;
114
fe0504af6d16 test each default event scheduler
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   570
162
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   571
  EventId a = Simulator::Schedule (MicroSeconds (10), &SimulatorTests::A, this, 1);
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   572
  Simulator::Schedule (MicroSeconds (11), &SimulatorTests::B, this, 2);
5b398ac221c7 make Time relative instead of Absolute
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   573
  m_idC = Simulator::Schedule (MicroSeconds (12), &SimulatorTests::C, this, 3);
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   574
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   575
  if (m_idC.IsExpired ()) 
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   576
    {
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   577
      ok = false;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   578
    }
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   579
  if (a.IsExpired ())
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   580
    {
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   581
      ok = false;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   582
    }
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   583
  Simulator::Cancel (a);
209
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   584
  if (!a.IsExpired ())
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   585
    {
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   586
      ok = false;
8b343b9727d7 fix EventId::IsExpired and Simulator::IsExpired, add EventId::IsRunning, add relevant tests, replace Seconds, MilliSeconds, MicroSeconds, and, NanoSeconds classes by functions named similarly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 200
diff changeset
   587
    }
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   588
  Simulator::Run ();
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   589
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   590
  if (!m_a || !m_b || !m_c || !m_d) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   591
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   592
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   593
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   594
  return ok;
114
fe0504af6d16 test each default event scheduler
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   595
}
fe0504af6d16 test each default event scheduler
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   596
bool 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 121
diff changeset
   597
SimulatorTests::RunTests (void)
114
fe0504af6d16 test each default event scheduler
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   598
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   599
  bool ok = true;
114
fe0504af6d16 test each default event scheduler
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   600
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   601
  Simulator::SetLinkedList ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   602
  if (!RunOneTest ()) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   603
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   604
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   605
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   606
  Simulator::Destroy ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   607
  Simulator::SetBinaryHeap ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   608
  if (!RunOneTest ()) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   609
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   610
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   611
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   612
  Simulator::Destroy ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   613
  Simulator::SetStdMap ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   614
  if (!RunOneTest ()) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   615
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   616
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   617
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   618
  Simulator::Destroy ();
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   619
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   620
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   621
  Simulator::Schedule (Seconds (0.0), &foo0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   622
  Simulator::Schedule (Seconds (0.0), &foo1, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   623
  Simulator::Schedule (Seconds (0.0), &foo2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   624
  Simulator::Schedule (Seconds (0.0), &foo3, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   625
  Simulator::Schedule (Seconds (0.0), &foo4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   626
  Simulator::Schedule (Seconds (0.0), &foo5, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   627
  Simulator::Schedule (Seconds (0.0), &SimulatorTests::bar0, this);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   628
  Simulator::Schedule (Seconds (0.0), &SimulatorTests::bar1, this, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   629
  Simulator::Schedule (Seconds (0.0), &SimulatorTests::bar2, this, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   630
  Simulator::Schedule (Seconds (0.0), &SimulatorTests::bar3, this, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   631
  Simulator::Schedule (Seconds (0.0), &SimulatorTests::bar4, this, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   632
  Simulator::Schedule (Seconds (0.0), &SimulatorTests::bar5, this, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   633
  Simulator::ScheduleNow (&foo0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   634
  Simulator::ScheduleNow (&foo1, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   635
  Simulator::ScheduleNow (&foo2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   636
  Simulator::ScheduleNow (&foo3, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   637
  Simulator::ScheduleNow (&foo4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   638
  Simulator::ScheduleNow (&foo5, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   639
  Simulator::ScheduleNow (&SimulatorTests::bar0, this);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   640
  Simulator::ScheduleNow (&SimulatorTests::bar1, this, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   641
  Simulator::ScheduleNow (&SimulatorTests::bar2, this, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   642
  Simulator::ScheduleNow (&SimulatorTests::bar3, this, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   643
  Simulator::ScheduleNow (&SimulatorTests::bar4, this, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   644
  Simulator::ScheduleNow (&SimulatorTests::bar5, this, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   645
  Simulator::ScheduleDestroy (&foo0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   646
  Simulator::ScheduleDestroy (&foo1, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   647
  Simulator::ScheduleDestroy (&foo2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   648
  Simulator::ScheduleDestroy (&foo3, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   649
  Simulator::ScheduleDestroy (&foo4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   650
  Simulator::ScheduleDestroy (&foo5, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   651
  Simulator::ScheduleDestroy (&SimulatorTests::bar0, this);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   652
  Simulator::ScheduleDestroy (&SimulatorTests::bar1, this, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   653
  Simulator::ScheduleDestroy (&SimulatorTests::bar2, this, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   654
  Simulator::ScheduleDestroy (&SimulatorTests::bar3, this, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   655
  Simulator::ScheduleDestroy (&SimulatorTests::bar4, this, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   656
  Simulator::ScheduleDestroy (&SimulatorTests::bar5, this, 0, 0, 0, 0, 0);
181
006158ef00f1 fix memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   657
006158ef00f1 fix memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   658
  Simulator::Run ();
006158ef00f1 fix memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   659
  Simulator::Destroy ();
146
2c9ef359e320 implement overloads for ScheduleNow and ScheduleDestroy
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 145
diff changeset
   660
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 148
diff changeset
   661
  return ok;
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   662
}
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   663
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   664
SimulatorTests gSimulatorTests;
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   665
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   666
}; // namespace ns3
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   667
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   668
#endif /* RUN_SELF_TESTS */
24
706b1d903da9 doc typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 22
diff changeset
   669
706b1d903da9 doc typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 22
diff changeset
   670
37
af78cb75be51 improve tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 36
diff changeset
   671