src/simulator/simulator.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 02 Oct 2006 14:34:53 +0200
changeset 110 9ac6d63bfe33
parent 100 05fa5c7ddf2a
child 111 ad64f88919b5
permissions -rw-r--r--
fix emacs tab mode (reported by george)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
110
9ac6d63bfe33 fix emacs tab mode (reported by george)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 100
diff changeset
     1
/* -*-    Mode:C++; c-basic-offset:4; tab-width:4; 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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <math.h>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include <cassert>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include <fstream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
#include <list>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
#include <vector>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#define noTRACE_SIMU 1
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
#ifdef TRACE_SIMU
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
# define TRACE(x) \
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
    38
std::cout << "SIMU TRACE " << Simulator::nowS () << " " << x << std::endl;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
# define TRACE_S(x) \
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
std::cout << "SIMU TRACE " << x << std::endl;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
#else /* TRACE_SIMU */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
# define TRACE(format,...)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
# define TRACE_S(format,...)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
#endif /* TRACE_SIMU */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    47
namespace ns3 {
9
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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
class SimulatorPrivate {
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
public:
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    52
    SimulatorPrivate (Scheduler *events);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    53
    ~SimulatorPrivate ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    55
    void enableLogTo (char const *filename);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    57
    bool isFinished (void) const;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    58
    Time next (void) const;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    59
    void stop (void);
100
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
    60
    void stopAt (Time const &time);
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
    61
    EventId schedule (Time const &time, EventImpl *event);
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    62
    void remove (EventId ev);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    63
    void cancel (EventId ev);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    64
    bool isExpired (EventId ev);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    65
    void run (void);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    66
    Time now (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
private:
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    69
    void processOneEvent (void);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    71
    typedef std::list<std::pair<EventImpl *,uint32_t> > Events;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    72
    Events m_destroy;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    73
    uint64_t m_stopAt;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    74
    bool m_stop;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    75
    Scheduler *m_events;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    76
    uint32_t m_uid;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    77
    uint32_t m_currentUid;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    78
    uint64_t m_currentNs;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    79
    std::ofstream m_log;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    80
    std::ifstream m_inputLog;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    81
    bool m_logEnable;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
SimulatorPrivate::SimulatorPrivate (Scheduler *events)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    89
    m_stop = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    90
    m_stopAt = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    91
    m_events = events;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    92
    m_uid = 0;    
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    93
    m_logEnable = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    94
    m_currentNs = 0;
9
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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
SimulatorPrivate::~SimulatorPrivate ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    99
    while (!m_destroy.empty ()) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   100
        EventImpl *ev = m_destroy.front ().first;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   101
        m_destroy.pop_front ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   102
        TRACE ("handle destroy " << ev);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   103
        ev->invoke ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   104
        delete ev;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   105
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   106
    delete m_events;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   107
    m_events = (Scheduler *)0xdeadbeaf;
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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
void
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   112
SimulatorPrivate::enableLogTo (char const *filename)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   114
    m_log.open (filename);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   115
    m_logEnable = true;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
void
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   119
SimulatorPrivate::processOneEvent (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   121
    EventImpl *nextEv = m_events->peekNext ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   122
    Scheduler::EventKey nextKey = m_events->peekNextKey ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   123
    m_events->removeNext ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   124
    TRACE ("handle " << nextEv);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   125
    m_currentNs = nextKey.m_ns;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   126
    m_currentUid = nextKey.m_uid;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   127
    if (m_logEnable) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   128
        m_log << "e "<<nextKey.m_uid << " " << nextKey.m_ns << std::endl;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   129
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   130
    nextEv->invoke ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   131
    delete nextEv;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
bool 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   135
SimulatorPrivate::isFinished (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   137
    return m_events->isEmpty ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   139
Time
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   140
SimulatorPrivate::next (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   142
    assert (!m_events->isEmpty ());
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   143
    Scheduler::EventKey nextKey = m_events->peekNextKey ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   144
    return Time::absNs (nextKey.m_ns);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
void
21
a8f0cda66189 rename run_serial to run
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 20
diff changeset
   149
SimulatorPrivate::run (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   151
    while (!m_events->isEmpty () && !m_stop && 
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   152
           (m_stopAt == 0 || m_stopAt > next ().ns ())) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   153
        processOneEvent ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   154
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   155
    m_log.close ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
void 
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
SimulatorPrivate::stop (void)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   162
    m_stop = true;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
void 
100
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
   165
SimulatorPrivate::stopAt (Time const &at)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   167
    m_stopAt = at.ns ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   169
EventId
100
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
   170
SimulatorPrivate::schedule (Time const &time, EventImpl *event)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   172
    if (time.isDestroy ()) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   173
        m_destroy.push_back (std::make_pair (event, m_uid));
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   174
        if (m_logEnable) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   175
            m_log << "id " << m_currentUid << " " << now ().ns () << " "
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   176
                  << m_uid << std::endl;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   177
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   178
        m_uid++;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   179
        //XXX
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   180
        return EventId ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   181
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   182
    assert (time.ns () >= now ().ns ());
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   183
    Scheduler::EventKey key = {time.ns (), m_uid};
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   184
    if (m_logEnable) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   185
        m_log << "i "<<m_currentUid<<" "<<now ().ns ()<<" "
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   186
              <<m_uid<<" "<<time.ns () << std::endl;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   187
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   188
    m_uid++;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   189
    return m_events->insert (event, key);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   191
Time
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   192
SimulatorPrivate::now (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   194
    return Time::absNs (m_currentNs);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   196
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
void
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   198
SimulatorPrivate::remove (EventId ev)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   200
    Scheduler::EventKey key;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   201
    EventImpl *impl = m_events->remove (ev, &key);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   202
    delete impl;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   203
    if (m_logEnable) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   204
        m_log << "r " << m_currentUid << " " << now ().ns () << " "
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   205
              << key.m_uid << " " << key.m_ns << std::endl;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   206
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   209
void
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   210
SimulatorPrivate::cancel (EventId id)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   212
    assert (m_events->isValid (id));
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   213
    EventImpl *ev = id.getEventImpl ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   214
    ev->cancel ();
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   215
}
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   216
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   217
bool
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   218
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
   219
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   220
    if (ev.getEventImpl () != 0 &&
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   221
        ev.getNs () <= now ().ns () &&
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   222
        ev.getUid () < m_currentUid) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   223
        return false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   224
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   225
    return true;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   229
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
#include "scheduler-list.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
#include "scheduler-heap.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
#include "scheduler-map.h"
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   235
#include "scheduler-factory.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   238
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
SimulatorPrivate *Simulator::m_priv = 0;
52
72a52d59ee9f member variables coding style change
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 45
diff changeset
   241
Simulator::ListType Simulator::m_listType = LINKED_LIST;
72a52d59ee9f member variables coding style change
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 45
diff changeset
   242
SchedulerFactory const*Simulator::m_schedFactory = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   244
void Simulator::setLinkedList (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   246
    m_listType = LINKED_LIST;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
}
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   248
void Simulator::setBinaryHeap (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   250
    m_listType = BINARY_HEAP;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
}
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   252
void Simulator::setStdMap (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   254
    m_listType = STD_MAP;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
}
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   256
void 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   257
Simulator::setExternal (SchedulerFactory const*factory)
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   258
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   259
    assert (factory != 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   260
    m_schedFactory = factory;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   261
    m_listType = EXTERNAL;
45
f963078c6e95 enable user-provided schedulers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 38
diff changeset
   262
}
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   263
void Simulator::enableLogTo (char const *filename)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   265
    getPriv ()->enableLogTo (filename);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
SimulatorPrivate *
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   270
Simulator::getPriv (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   272
    if (m_priv == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   273
        Scheduler *events;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   274
        switch (m_listType) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   275
        case LINKED_LIST:
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   276
            events = new SchedulerList ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   277
            break;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   278
        case BINARY_HEAP:
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   279
            events = new SchedulerHeap ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   280
            break;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   281
        case STD_MAP:
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   282
            events = new SchedulerMap ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   283
            break;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   284
        case EXTERNAL:
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   285
            events = m_schedFactory->create ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   286
        default: // not reached
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   287
            events = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   288
            assert (false); 
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   289
            break;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   290
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   291
        m_priv = new SimulatorPrivate (events);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   292
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   293
    TRACE_S ("priv " << m_priv);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   294
    return m_priv;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
void
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
Simulator::destroy (void)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   300
    delete m_priv;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   301
    m_priv = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
bool 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   306
Simulator::isFinished (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   308
    return getPriv ()->isFinished ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   310
Time
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   311
Simulator::next (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   313
    return getPriv ()->next ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
void 
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
Simulator::run (void)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   320
    getPriv ()->run ();
9
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
void 
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
Simulator::stop (void)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   325
    TRACE ("stop");
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   326
    getPriv ()->stop ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
void 
100
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
   329
Simulator::stopAt (Time const &at)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   331
    getPriv ()->stopAt (at);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   333
Time
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   334
Simulator::now (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   336
    return getPriv ()->now ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
}
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   338
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   339
EventId
100
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
   340
Simulator::schedule (Time const &time, EventImpl *ev)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   342
    return getPriv ()->schedule (time, ev);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
}
75
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   344
EventId
100
05fa5c7ddf2a change Time into Time const &
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 75
diff changeset
   345
Simulator::schedule (Time const &time, void (*f) (void))
75
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   346
{
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   347
	// zero arg version
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   348
	class EventFunctionImpl0 : public EventImpl {
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   349
	public:
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   350
		typedef void (*F)(void);
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   351
        
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   352
		EventFunctionImpl0 (F function) 
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   353
			: m_function (function)
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   354
		{}
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   355
	protected:
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   356
		virtual void notify (void) { 
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   357
			(*m_function) (); 
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   358
            }
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   359
	private:
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   360
		virtual ~EventFunctionImpl0 () {}
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   361
		F m_function;
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   362
	} *ev = new EventFunctionImpl0 (f);
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   363
	return schedule (time, ev);
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   364
}
0f3f4b0a158b reorganize the implementation of template member methods in Simulator class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   365
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   367
void
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   368
Simulator::remove (EventId ev)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   369
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   370
    return getPriv ()->remove (ev);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
25
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   373
void
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   374
Simulator::cancel (EventId ev)
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   375
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   376
    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
   377
}
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   378
bool 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   379
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
   380
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   381
    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
   382
}
9b3bb088c560 first cut at george's ideas on api
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 24
diff changeset
   383
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   384
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   385
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   386
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   387
#ifdef RUN_SELF_TESTS
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   388
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   389
#include "ns3/test.h"
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   390
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   391
namespace ns3 {
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   392
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   393
class SimulatorTests : public Test {
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   394
public:
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   395
    SimulatorTests ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   396
    virtual ~SimulatorTests ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   397
    virtual bool runTests (void);
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   398
private:
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   399
    void a (int a);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   400
    void b (int b);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   401
    void c (int c);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   402
    void d (int d);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   403
    bool m_b;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   404
    bool m_a;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   405
    bool m_c;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   406
    bool m_d;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   407
    EventId m_idC;
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   408
};
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   409
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   410
SimulatorTests::SimulatorTests ()
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   411
    : Test ("Simulator")
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   412
{}
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   413
SimulatorTests::~SimulatorTests ()
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   414
{}
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   415
void
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   416
SimulatorTests::a (int a)
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   417
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   418
    m_a = false;
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   419
}
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   420
void
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   421
SimulatorTests::b (int b)
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   422
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   423
    if (b != 2 || Simulator::now ().us () != 11) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   424
        m_b = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   425
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   426
        m_b = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   427
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   428
    Simulator::remove (m_idC);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   429
    Simulator::schedule (Time::relUs (10), &SimulatorTests::d, this, 4);
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   430
}
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   431
void
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   432
SimulatorTests::c (int c)
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   433
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   434
    m_c = false;
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   435
}
32
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   436
void
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   437
SimulatorTests::d (int d)
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   438
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   439
    if (d != 4 || Simulator::now ().us () != (11+10)) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   440
        m_d = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   441
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   442
        m_d = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   443
    }
32
789f69e312bf more tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 31
diff changeset
   444
}
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   445
bool 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   446
SimulatorTests::runTests (void)
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   447
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   448
    bool ok = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   449
    m_a = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   450
    m_b = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   451
    m_c = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   452
    m_d = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   453
    EventId a = Simulator::schedule (Time::absUs (10), &SimulatorTests::a, this, 1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   454
    EventId b = Simulator::schedule (Time::absUs (11), &SimulatorTests::b, this, 2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   455
    m_idC = Simulator::schedule (Time::absUs (12), &SimulatorTests::c, this, 3);
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   456
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   457
    Simulator::cancel (a);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   458
    Simulator::run ();
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   459
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   460
    if (!m_a || !m_b || !m_c || !m_d) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   461
        ok = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   462
    }
31
2def0da92178 add simulator tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 30
diff changeset
   463
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   464
    return ok;
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   465
}
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   466
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   467
SimulatorTests gSimulatorTests;
30
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   468
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   469
}; // namespace ns3
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   470
eb38b7903dfb add empty simulator test
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 29
diff changeset
   471
#endif /* RUN_SELF_TESTS */
24
706b1d903da9 doc typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 22
diff changeset
   472
706b1d903da9 doc typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 22
diff changeset
   473
37
af78cb75be51 improve tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 36
diff changeset
   474