Revision fbe00e73

View differences:

.gitignore
35 35
/ide/org.omnetpp.sequencechart/.project
36 36
/ide/org.omnetpp.sequencechart/.settings/
37 37
/ide/org.omnetpp.sequencechart/src/sequencechart/
38
*.swp
39

  
PORTING
1 1
 Porting an OMNeT++ model to Horizon
2
 =================================== 
2
 ===================================
3 3

  
4 4
 Porting a given model to run on top of Horizon is relatively straightforward.
5 5

  
6
  * New base class for modules
7
    In order to enable parallel execution in Horizon, modules need to inherit 
8
    from cAsyncModule instead of cSimpleModule. Simply replace the base class
9
    in all modules of the model. Additionally, remove the Module_Class_Members()
10
    macro if it is used in the module. This macro is not compatible with Horizon
11
    and also not needed. 
12
    
6
  * New base class for modules (OBSOLETE!!!)
7
	We used to have a separate base class for asynchronous modules. If you are
8
	still using this class (cAsyncModule), please go back to cSimpleModule.
9
	cAsyncModule is no longer required nor included.
10

  
11
  * No Module_Class_Members() macro
12
    Remove the Module_Class_Members() macro if it is used in your modules.
13
	This macro is not compatible with Horizon and also not needed.
14

  
13 15
  * No findObject
14 16
    In Horizon, the ownership handling of OMNeT++ is partly disabled to allow for
15 17
    an efficient parallel execution: Child modules still know their parent, but the
......
20 22
     - findObjectByName(const char* name)
21 23
     - removeByName(const char* name)
22 24
     - containsByName(const char* name)
23
     
24
  * Random number generation
25
    Since the global random number generator of OMNeT++ is not thread-safe,
26
    every cAsyncModule contains a local random number generator. To use this,
27
    simply prefix every call to a random number generation method with the local
28
    object numGen:
29
     - uniform(a,b)  ==>  numGen->uniform(a,b)
30
    Seeding of these local random number generators is done by means of a global
31
    seed generator RNG. During the sequential initialization phase of the model,
32
    every model requests a seed for its local RNGs from the central seed generator. 
33 25

  
26
  * Random number generation (OBSOLETE!!!)
27
    We used to require the use of numGen->uniform(a,b) instead of uniform(a,b)
28
	for using local RNGs instead of a global, not-thread-safe RNG. We changed
29
	the default behavior. The numGen object no longer exists, you automatically
30
	use local RNGs when you run uniform(a,b).
31
	If you are still using numGen->uniform(a,b), please go back to uniform(a,b).
32
    Seeding of the local random number generators is done by means of a global
33
    seed generator RNG. During the sequential initialization phase of the model,
34
    every model requests a seed for its local RNGs from the central seed generator.
34 35

  
35 36
 Performance optimization
36 37
 ========================
include/casyncmodule.h
1
//==========================================================================
2
//   CASYNCMODULE.H  -  header for
3
//                     Horizon/OMNeT++/OMNEST
4
//            Discrete System Simulation in C++
5
//
6
//
7
//  Declaration of the following classes:
8
//    cAsyncModule  : base for asynchronous event handing in simple module objects
9
//
10
//==========================================================================
11

  
12
/*--------------------------------------------------------------*
13
  Copyright (C) 2009 Georg Kunz
14

  
15
  This file is distributed WITHOUT ANY WARRANTY. See the file
16
  `license' for details on this and other legal matters.
17
*--------------------------------------------------------------*/
18

  
19
#ifndef __CASYNCMODULE_H
20
#define __CASYNCMODULE_H
21

  
22
#include <pthread.h>
23
#include <semaphore.h>
24

  
25
#include "csimplemodule.h"
26
#include "cmessage.h"
27

  
28
#ifdef ATOMIC_OPS_DEBUG
29
	#include "catomicopsdebug.h"
30
#else
31
	#include <atomic_ops.h>
32
#endif
33

  
34
/**
35
 * New base class for all modules that handle expanded events for asynchronous
36
 * (parallel) execution. It provides new methods for parallel event handling
37
 * and wrappers of the default API.
38
 *
39
 * @see cSimpleModule
40
 *
41
 * @ingroup Horizon
42
 */
43
class cAsyncMessage;
44

  
45
class SIM_API cAsyncModule : public cSimpleModule
46
{
47
  private:
48

  
49
    // the two different execution states: either handleMessage is called
50
    // synchronously by the scheduler or asynchronously (to the scheduler)
51
    // by a worker thread
52
    enum ExecutionStates
53
    {
54
        synchronous,
55
        asynchronous
56
    };
57

  
58
    // current state of execution
59
    ExecutionStates executionState;
60

  
61
    // new messages may only be scheduled with timestamps >= this value
62
    simtime_t t_end;
63

  
64
    // priority of the current event
65
    short currentEventPriority;
66

  
67
    // shall zero duration events be executed in parallel
68
    bool parZeroDur;
69

  
70
    // no worker is active inside this module
71
    static const AO_t NOT_BUSY = 0;
72

  
73
    // a worker is active inside this module
74
    static const AO_t BUSY     = 1;
75

  
76
    // flag indicating that a thread is processing an event within this module
77
    AO_t busy;
78

  
79
    // how many messages did a given event send?
80
    unsigned int scheduledMessageCount;
81

  
82
    //
83
    unsigned int executionOrderId;
84

  
85
    // current simulation time within this module
86
    simtime_t now;
87

  
88
    /**
89
     * update meta data needed for event execution
90
     */
91
    void prepareHandleMessage(cMessage* msg);
92

  
93
    /**
94
     * set extended meta data of a message upon sending.
95
     */
96
    void setMessageMetaData(cMessage* msg);
97

  
98
  protected:
99

  
100
  public:
101
    /** @name Constructors and Destructors */
102
    //@{
103
    /**
104
     * Constructor
105
     */
106
    cAsyncModule(const char *name=NULL, cModule *parent=NULL, unsigned stacksize=0);
107

  
108
    /**
109
     * Destructor
110
     */
111
    virtual ~cAsyncModule();
112
    //}@
113

  
114

  
115
    /** @name User-implemented methods for asynchronous event handling. */
116
    //@{
117
    /**
118
     * Returns the duration of the given expanded event. Called by the event
119
     * scheduler to determine the overlapping of expanded events. The user may
120
     * perform any computation on the expanded event (except for deleting it)
121
     * to calculate the event duration.
122
     */
123
    virtual simtime_t getProcessingDelay(cMessage* msg)
124
    {
125
        return 0.0;
126
    }
127

  
128
    /*
129
     * By default non-expanded events are not executed in parallel. The
130
     * option "parallelize-zero-duration-events" globally enables or disables
131
     * parallel execution. This method allows users to overwrite either behavior
132
     * on a per module (and per event) basis. Should return true if parallel
133
     * execution is allowed, false otherwise.
134
     */
135
    virtual bool mayParallelize(cMessage* msg, simtime_t duration) const
136
    {
137
        return duration == SimTime::simTimeZero ? parZeroDur : true;
138
    }
139
    /*
140
     * Initializes the local RNGs according to config options read from ini
141
     */
142
    void initLocalRNGs();
143
    //}@
144

  
145

  
146
    /** @name Support methods for asynchronous event handling. */
147
    //@{
148
    /**
149
     * Returns the duration of the currently processed event.
150
     */
151
    simtime_t getCurrentProcessingDelay() const {
152
        return t_end - simTime();
153
    }
154

  
155
    /*
156
     * Returns true if the module supports parallel event execution.
157
     */
158
    virtual bool isAsyncModule() const {
159
    	return true;
160
    }
161
    //}@
162

  
163

  
164
    /** @name Wrapper functions for state keeping inside a module. */
165
    //@{
166
    /**
167
     * INTERNAL: Wrapper for asynchronous message handling.
168
     */
169
    void callHandleAsyncMessage(cMessage* msg);
170

  
171
    /**
172
     * INTERNAL: Wrapper for synchronous message handling.
173
     */
174
    void callHandleMessage(cMessage* msg);
175

  
176
    /*
177
     * INTERNAL: Check if a worker thread is already busy inside this module
178
     * and if so, wait until the worker is done.
179
     */
180
    inline void waitIfBusy() {
181
        while (AO_load_full(&busy) == BUSY) {
182
            __asm__("pause");
183
        }
184
    }
185

  
186
    /*
187
     * INTERNAL: Indicate that a worker is busy inside this module.
188
     */
189
	inline void setBusy() {
190
		AO_store_full(&busy, BUSY);
191
	}
192

  
193
	/**
194
	 * INTERNAL: Unset flag to indicate that a worker has finished.
195
	 */
196
	inline void unsetBusy() {
197
		AO_store_full(&busy, NOT_BUSY);
198
	}
199
    //}@r
200

  
201

  
202
    /** @name Wrapper functions for the OMNeT++ API */
203
    //@{
204
    /**
205
     * @see cSimpleModule
206
     */
207
    virtual int scheduleAt(simtime_t t, cMessage *msg);
208

  
209
    /**
210
     * @see cSimpleModule
211
     */
212
    virtual int send(cMessage *msg, int gateid);
213

  
214
    /**
215
     * @see cSimpleModule
216
     */
217
    virtual int send(cMessage *msg, const char *gatename, int sn=-1);
218

  
219
    /**
220
     * @see cSimpleModule
221
     */
222
    virtual int send(cMessage *msg, cGate *outputgate);
223

  
224
    /**
225
     * @see cSimpleModule
226
     */
227
    virtual int sendDelayed(cMessage *msg, simtime_t delay, int gateid);
228

  
229
    /**
230
     * @see cSimpleModule
231
     */
232
    virtual int sendDelayed(cMessage *msg, simtime_t delay, const char *gatename, int sn=-1);
233

  
234
    /**
235
     * @see cSimpleModule
236
     */
237
    virtual int sendDelayed(cMessage *msg, simtime_t delay, cGate *outputgate);
238

  
239
    /**
240
     * @see cSimpleModule
241
     */
242
    virtual int sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cModule *mod, int inputgateid);
243

  
244
    /**
245
     * @see cSimpleModule
246
     */
247
    virtual int sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cModule *mod, const char *inputgatename, int sn=-1);
248

  
249
    /**
250
     * @see cSimpleModule
251
     */
252
    virtual int sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cGate *inputgate);
253
    //}@
254

  
255
};
256

  
257
#endif /* __CASYNCMODULE_H */
include/cbarriermessage.h
22 22
#include <semaphore.h>
23 23

  
24 24
#include "cmessage.h"
25
#include "casyncmodule.h"
26 25

  
27 26
#ifdef ATOMIC_OPS_DEBUG
28 27
    #include "catomicopsdebug.h"
include/csimplemodule.h
12 12
/*--------------------------------------------------------------*
13 13
  Copyright (C) 1992-2008 Andras Varga
14 14
  Copyright (C) 2006-2008 OpenSim Ltd.
15
  Copyright (C) 2009 Georg Kunz
15 16

  
16 17
  This file is distributed WITHOUT ANY WARRANTY. See the file
17 18
  `license' for details on this and other legal matters.
......
20 21
#ifndef __CSIMPLEMODULE_H
21 22
#define __CSIMPLEMODULE_H
22 23

  
24
#include <pthread.h>
25
#include <semaphore.h>
26

  
23 27
#include "cmodule.h"
24 28
#include "cnumgen.h"
25 29

  
30
#ifdef ATOMIC_OPS_DEBUG
31
	#include "catomicopsdebug.h"
32
#else
33
	#include <atomic_ops.h>
34
#endif
35

  
26 36
NAMESPACE_BEGIN
27 37

  
28 38
class cQueue;
......
79 89
    static bool stack_cleanup_requested; // 'true' value asks activity() to throw a cStackCleanupException
80 90
    static cSimpleModule *after_cleanup_transfer_to; // transfer back to this module (or to main)
81 91

  
92
  private: // Horizon
93
    // the two different execution states: either handleMessage is called
94
    // synchronously by the scheduler or asynchronously (to the scheduler)
95
    // by a worker thread
96
    enum ExecutionStates
97
    {
98
        synchronous,
99
        asynchronous
100
    };
101

  
102
    // current state of execution
103
    ExecutionStates executionState;
104

  
105
    // new messages may only be scheduled with timestamps >= this value
106
    simtime_t t_end;
107

  
108
    // priority of the current event
109
    short currentEventPriority;
110

  
111
    // shall zero duration events be executed in parallel
112
    bool parZeroDur;
113

  
114
    // no worker is active inside this module
115
    static const AO_t NOT_BUSY = 0;
116

  
117
    // a worker is active inside this module
118
    static const AO_t BUSY     = 1;
119

  
120
    // flag indicating that a thread is processing an event within this module
121
    AO_t busy;
122

  
123
    // how many messages did a given event send?
124
    unsigned int scheduledMessageCount;
125

  
126
    //
127
    unsigned int executionOrderId;
128

  
129
    // current simulation time within this module
130
    simtime_t now;
131

  
132
    /**
133
     * update meta data needed for event execution
134
     */
135
    void prepareHandleMessage(cMessage* msg);
136

  
137
    /**
138
     * set extended meta data of a message upon sending.
139
     */
140
    void setMessageMetaData(cMessage* msg);
141

  
82 142
  private:
83 143
    // internal use
84 144
    static void activate(void *p);
......
141 201
    virtual ~cSimpleModule();
142 202
    //@}
143 203

  
144
    /*
145
     * Returns true if Module is capable of Horizon specific parallel execution
146
     * Called in doOneEvent
147
     * Overridden in cAsyncmodule
148
     */
149
    virtual bool isAsyncModule() const {
150
    	return false;
151
    }
152

  
153 204
    /** @name Redefined cObject member functions. */
154 205
    //@{
155 206
    /**
......
232 283
    /**
233 284
     * Sends a message through the gate given with its ID.
234 285
     */
235
    int send(cMessage *msg, int gateid)  {return sendDelayed(msg, SIMTIME_ZERO, gateid);}
286
    int send(cMessage *msg, int gateid);
236 287

  
237 288
    /**
238 289
     * Sends a message through the gate given with its name and index
239 290
     * (if multiple gate).
240 291
     */
241
    int send(cMessage *msg, const char *gatename, int gateindex=-1)  {return sendDelayed(msg, SIMTIME_ZERO, gatename, gateindex);}
292
    int send(cMessage *msg, const char *gatename, int gateindex=-1);
242 293

  
243 294
    /**
244 295
     * Sends a message through the gate given with its pointer.
245 296
     */
246
    int send(cMessage *msg, cGate *outputgate)  {return sendDelayed(msg, SIMTIME_ZERO, outputgate);}
297
    int send(cMessage *msg, cGate *outputgate);
247 298

  
248 299
    /**
249 300
     * Delayed sending. Sends a message through the gate given with
......
487 538
     * @see cCoroutine
488 539
     */
489 540
    virtual unsigned getStackUsage() const;
490
    //@}
541

  
542
  public: // Horizon
543
    /** @name User-implemented methods for asynchronous event handling. */
544
    //@{
545
    /**
546
     * Returns the duration of the given expanded event. Called by the event
547
     * scheduler to determine the overlapping of expanded events. The user may
548
     * perform any computation on the expanded event (except for deleting it)
549
     * to calculate the event duration.
550
     */
551
    virtual simtime_t getProcessingDelay(cMessage* msg)
552
    {
553
        return 0.0;
554
    }
555

  
556
    /*
557
     * By default non-expanded events are not executed in parallel. The
558
     * option "parallelize-zero-duration-events" globally enables or disables
559
     * parallel execution. This method allows users to overwrite either behavior
560
     * on a per module (and per event) basis. Should return true if parallel
561
     * execution is allowed, false otherwise.
562
     */
563
    virtual bool mayParallelize(cMessage* msg, simtime_t duration) const
564
    {
565
        return duration == SimTime::simTimeZero ? parZeroDur : true;
566
    }
567
    /*
568
     * Initializes the local RNGs according to config options read from ini
569
     */
570
    void initLocalRNGs();
571
    //}@
572

  
573

  
574
    /** @name Support methods for asynchronous event handling. */
575
    //@{
576
    /**
577
     * Returns the duration of the currently processed event.
578
     */
579
    simtime_t getCurrentProcessingDelay() const {
580
        return t_end - simTime();
581
    }
582

  
583
    /** @name Wrapper functions for state keeping inside a module. */
584
    //@{
585
    /**
586
     * INTERNAL: Wrapper for asynchronous message handling.
587
     */
588
    void callHandleAsyncMessage(cMessage* msg);
589

  
590
    /**
591
     * INTERNAL: Wrapper for synchronous message handling.
592
     */
593
    void callHandleMessage(cMessage* msg);
594

  
595
    /*
596
     * INTERNAL: Check if a worker thread is already busy inside this module
597
     * and if so, wait until the worker is done.
598
     */
599
    inline void waitIfBusy() {
600
        while (AO_load_full(&busy) == BUSY) {
601
            __asm__("pause");
602
        }
603
    }
604

  
605
    /*
606
     * INTERNAL: Indicate that a worker is busy inside this module.
607
     */
608
	inline void setBusy() {
609
		AO_store_full(&busy, BUSY);
610
	}
611

  
612
	/**
613
	 * INTERNAL: Unset flag to indicate that a worker has finished.
614
	 */
615
	inline void unsetBusy() {
616
		AO_store_full(&busy, NOT_BUSY);
617
	}
618
    //}@r
619

  
620
   //@}
491 621
};
492 622

  
493 623
NAMESPACE_END
include/csimulation.h
53 53
class  cEnvir;
54 54
class  cDefaultList;
55 55
class  cThreadPool;
56
class  cAsyncModule;
57 56
class  cStopWatch;
58 57

  
59 58
SIM_API extern cDefaultList defaultList; // also in globals.h
......
163 162
    void setupThreadPool();
164 163

  
165 164
    /*
166
     * setup the local Random Number Generators for each cAsyncmodule
165
     * setup the local Random Number Generators for each module
167 166
     */
168 167
    void setupLocalRNGs();
169 168

  
include/cspinningthreadpool.h
1 1
//==========================================================================
2
//   CTHREADPOOL.H  -  header for
2
//   CSPINNINGTHREADPOOL.H  -  header for
3 3
//                     OMNeT++/OMNEST
4 4
//            Discrete System Simulation in C++
5 5
//
6 6
//
7 7
//  Declaration of the following classes:
8
//    cMessage : thread pool for asynchronous event handling
8
//    cSpinningThreadPool : thread pool for asynchronous event handling
9 9
//
10 10
//==========================================================================
11 11

  
......
20 20
#define __CSPINNINGTHREADPOOL_H
21 21

  
22 22
#include "cthreadpool.h"
23
#include "csimplemodule.h"
23 24

  
24 25
#ifdef ATOMIC_OPS_DEBUG
25 26
	#include "catomicopsdebug.h"
include/omnetpp.h
76 76
#include "crng.h"
77 77
#include "cscheduler.h"
78 78
#include "csimplemodule.h"
79
#include "casyncmodule.h"
80 79
#include "csimulation.h"
81 80
#include "cstatistic.h"
82 81
#include "cstddev.h"
src/cmdenv/Makefile
73 73
# DO NOT DELETE THIS LINE -- make depend depends on it.
74 74
$O/cmdenv.o: cmdenv.cc \
75 75
  ../../include/regmacros.h \
76
  ../../include/cstopwatch.h \
77 76
  ../envir/args.h \
78 77
  cmdenv.h \
79
  ../../include/platdep/platdefs.h \
80 78
  ../envir/envirdefs.h \
81
  ../../include/cmathfunction.h \
82
  ../envir/resultlistener.h \
83
  ../../include/catomicopsdebug.h \
84 79
  ../../include/cnamedobject.h \
85
  ../../include/clockedmsgheap.h \
86 80
  ../../include/cexpression.h \
87
  ../envir/eventlogfilemgr.h \
88 81
  cmddefs.h \
89
  ../../include/cgate.h \
90
  ../../include/simtime.h \
91 82
  ../envir/objectprinter.h \
92
  ../../include/carray.h \
93 83
  ../envir/speedometer.h \
94
  ../../include/simtime_t.h \
95
  ../../include/cenvir.h \
96
  ../../include/cmsgpar.h \
97 84
  ../../include/ccomponent.h \
98
  ../../include/cconfigoption.h \
99 85
  ../../include/cproperties.h \
100 86
  ../../include/cregistrationlist.h \
101 87
  ../../include/platdep/timeutil.h \
102 88
  ../../include/cconfiguration.h \
103
  ../../include/opp_string.h \
104
  ../envir/intervals.h \
105
  ../../include/simkerneldefs.h \
106 89
  ../../include/cthreadpool.h \
107
  ../../include/csimulation.h \
108 90
  ../../include/errmsg.h \
109 91
  ../../include/cownedobject.h \
110 92
  ../../include/cmessage.h \
111
  ../../include/cobject.h \
112 93
  ../../include/onstartup.h \
113 94
  ../envir/envirbase.h \
114 95
  ../../include/clistener.h \
115 96
  ../../include/envirext.h \
116
  ../../include/cdummystringpool.h \
117
  ../../include/cstringpool.h \
118 97
  ../../include/cscheduler.h \
119 98
  ../../include/cpar.h \
120 99
  ../../include/globals.h \
121
  ../../include/ctaskheap.h \
122 100
  ../envir/appreg.h \
123
  ../../include/cdefaultlist.h \
124 101
  ../../include/cvisitor.h \
125 102
  ../../include/cpthreadlock.h \
126 103
  ../../include/cttaslock.h \
......
129 106
  ../../include/cnolock.h \
130 107
  ../../include/cmodule.h \
131 108
  ../../include/platdep/platmisc.h \
132
  ../../include/cmessageheap.h \
133 109
  ../../include/cexception.h \
134
  ../../include/simutil.h \
135
  ../../include/cproperty.h \
136 110
  ../../include/platdep/intxtypes.h \
137
  ../../include/ccomponenttype.h
111
  ../../include/ccomponenttype.h \
112
  ../../include/cstopwatch.h \
113
  ../../include/platdep/platdefs.h \
114
  ../../include/cmathfunction.h \
115
  ../envir/resultlistener.h \
116
  ../../include/clockedmsgheap.h \
117
  ../../include/catomicopsdebug.h \
118
  ../envir/eventlogfilemgr.h \
119
  ../../include/simtime.h \
120
  ../../include/cgate.h \
121
  ../../include/carray.h \
122
  ../../include/cenvir.h \
123
  ../../include/simtime_t.h \
124
  ../../include/cmsgpar.h \
125
  ../../include/cconfigoption.h \
126
  ../../include/cnumgen.h \
127
  ../envir/intervals.h \
128
  ../../include/opp_string.h \
129
  ../../include/simkerneldefs.h \
130
  ../../include/random.h \
131
  ../../include/csimulation.h \
132
  ../../include/cobject.h \
133
  ../../include/cdummystringpool.h \
134
  ../../include/cstringpool.h \
135
  ../../include/ctaskheap.h \
136
  ../../include/cdefaultlist.h \
137
  ../../include/crng.h \
138
  ../../include/simutil.h \
139
  ../../include/cmessageheap.h \
140
  ../../include/cproperty.h
src/envir/Makefile
389 389
  ../../include/cscheduler.h \
390 390
  ../../include/cpar.h \
391 391
  ../../include/globals.h \
392
  ../../include/casyncmodule.h \
393 392
  ../../include/cvisitor.h \
394 393
  ../../include/cpthreadlock.h \
395 394
  ../../include/cttaslock.h \
......
419 418
  ../../include/cnumgen.h \
420 419
  ../../include/cclassdescriptor.h \
421 420
  ../../include/cconfigoption.h \
421
  eventlogwriter.h \
422 422
  ../../include/cchannel.h \
423 423
  ../../include/opp_string.h \
424 424
  ../../include/simkerneldefs.h \
......
434 434
  ../../include/crng.h \
435 435
  ../../include/cmessageheap.h \
436 436
  ../../include/simutil.h
437
$O/eventlogwriter.o: eventlogwriter.cc \
438
  ../../include/regmacros.h \
439
  ../../include/cexpression.h \
440
  ../../include/cnamedobject.h \
441
  ../../include/ccomponent.h \
442
  ../../include/cregistrationlist.h \
443
  ../../include/platdep/timeutil.h \
444
  ../../include/cthreadpool.h \
445
  ../../include/errmsg.h \
446
  ../../include/cownedobject.h \
447
  ../../include/onstartup.h \
448
  ../../include/clistener.h \
449
  ../../include/cscheduler.h \
450
  ../../include/cpar.h \
451
  ../../include/globals.h \
452
  ../../include/cvisitor.h \
453
  ../../include/cpthreadlock.h \
454
  ../../include/cttaslock.h \
455
  ../../include/cobjectfactory.h \
456
  ../../include/cnolock.h \
457
  ../../include/platdep/platmisc.h \
458
  ../../include/cmodule.h \
459
  ../../include/cexception.h \
460
  ../../include/platdep/intxtypes.h \
461
  ../../include/cstopwatch.h \
462
  ../../include/platdep/platdefs.h \
463
  envirdefs.h \
464
  ../../include/clockedmsgheap.h \
465
  ../../include/catomicopsdebug.h \
466
  ../../include/cgate.h \
467
  ../../include/simtime.h \
468
  ../../include/cenvir.h \
469
  ../../include/simtime_t.h \
470
  ../../include/cconfigoption.h \
471
  eventlogwriter.h \
472
  ../../include/opp_string.h \
473
  ../../include/simkerneldefs.h \
474
  ../../include/csimulation.h \
475
  ../../include/cobject.h \
476
  ../../include/cdummystringpool.h \
477
  ../../include/cstringpool.h \
478
  ../../include/ctaskheap.h \
479
  ../../include/cdefaultlist.h \
480
  ../../include/cmessageheap.h \
481
  ../../include/simutil.h
437 482
$O/fileoutscalarmgr.o: fileoutscalarmgr.cc \
438 483
  ../../include/regmacros.h \
439 484
  envirbase.h \
src/envir/envirbase.cc
1462 1462
        rngs[i]->initialize(opt_seedset, i, num_rngs, getParsimProcId(), getParsimNumPartitions(), getConfig());
1463 1463
    }
1464 1464

  
1465
    // and  finally the private seed generator for all local generators of cAsyncModule
1465
    // and  finally the private seed generator for all local generators of simple modules
1466 1466
 	CREATE_BY_CLASSNAME(seedGenerator, opt_rng_class.c_str(), cRNG, "random number generator");
1467 1467
 	seedGenerator->initializeAsMaster(opt_seedset, num_rngs+1, num_rngs, getParsimProcId(), getParsimNumPartitions(), getConfig());
1468 1468

  
src/envir/eventlogfilemgr.cc
32 32
#include "ccompoundmodule.h"
33 33
#include "cdisplaystring.h"
34 34
#include "cclassdescriptor.h"
35
#include "casyncmodule.h"
36 35

  
37 36
USING_NAMESPACE
38 37

  
src/sim/Makefile
42 42
    $O/cvisitor.o $O/cwatch.o $O/cxmlelement.o $O/cxmlparimpl.o $O/distrib.o $O/nedfunctions.o \
43 43
    $O/errmsg.o $O/globals.o $O/cregistrationlist.o $O/lex.expryy.o $O/minixpath.o $O/onstartup.o \
44 44
    $O/simtime.o $O/task.o $O/util.o $O/expr.tab.o $O/nedsupport.o $O/sim_std_m.o \
45
    $O/ccommbuffer.o $O/cparsimcomm.o $O/casyncmodule.o $O/cbarriermessage.o $O/cthreadpool.o $O/ctaskheap.o \
45
    $O/ccommbuffer.o $O/cparsimcomm.o $O/cbarriermessage.o $O/cthreadpool.o $O/ctaskheap.o \
46 46
    $O/ctaskring.o $O/clockeddefaultlist.o \
47 47
    $O/cnumgen.o $O/cstopwatch.o $O/clockedthreadpool.o $O/cspinningthreadpool.o \
48 48
    $O/sysdep.o $O/catomicopsdebug.o $O/cflyweightstringpool.o \
......
162 162
  ../../include/platdep/intxtypes.h \
163 163
  ../../include/ccommbuffer.h \
164 164
  ../../include/errmsg.h
165
$O/casyncmodule.o: casyncmodule.cc \
166
  ../envir/args.h \
167
  ../../include/cstopwatch.h \
168
  ../../include/regmacros.h \
169
  ../../include/platdep/platdefs.h \
170
  ../envir/envirdefs.h \
171
  ../envir/resultlistener.h \
172
  ../../include/cmathfunction.h \
173
  ../../include/catomicopsdebug.h \
174
  ../../include/clockedmsgheap.h \
175
  ../../include/cexpression.h \
176
  ../../include/cnamedobject.h \
177
  ../envir/eventlogfilemgr.h \
178
  ../../include/cgate.h \
179
  ../../include/simtime.h \
180
  ../envir/objectprinter.h \
181
  ../../include/carray.h \
182
  ../../include/simtime_t.h \
183
  ../../include/cenvir.h \
184
  ../../include/ccomponent.h \
185
  ../../include/cmsgpar.h \
186
  ../../include/cnumgen.h \
187
  ../../include/cconfigoption.h \
188
  ../../include/cregistrationlist.h \
189
  ../../include/cstringtokenizer.h \
190
  ../../include/platdep/timeutil.h \
191
  ../../include/cconfiguration.h \
192
  ../envir/intervals.h \
193
  ../../include/opp_string.h \
194
  ../../include/simkerneldefs.h \
195
  ../../include/random.h \
196
  ../../include/cthreadpool.h \
197
  ../../include/csimulation.h \
198
  ../../include/errmsg.h \
199
  ../../include/cmessage.h \
200
  ../../include/cownedobject.h \
201
  ../../include/onstartup.h \
202
  ../../include/cobject.h \
203
  ../envir/envirbase.h \
204
  ../../include/envirext.h \
205
  ../../include/clistener.h \
206
  ../../include/cdummystringpool.h \
207
  ../../include/cstringpool.h \
208
  ../../include/cscheduler.h \
209
  ../../include/cpar.h \
210
  ../../include/globals.h \
211
  ../../include/ctaskheap.h \
212
  ../../include/cdefaultlist.h \
213
  ../../include/casyncmodule.h \
214
  ../../include/cvisitor.h \
215
  ../../include/cttaslock.h \
216
  ../../include/cpthreadlock.h \
217
  ../../include/csimplemodule.h \
218
  ../../include/cobjectfactory.h \
219
  ../../include/cnolock.h \
220
  ../../include/crng.h \
221
  ../../include/platdep/platmisc.h \
222
  ../../include/cmodule.h \
223
  ../../include/cexception.h \
224
  ../../include/simutil.h \
225
  ../../include/cmessageheap.h \
226
  ../../include/platdep/intxtypes.h
227 165
$O/catomicopsdebug.o: catomicopsdebug.cc \
228 166
  ../../include/catomicopsdebug.h
229 167
$O/cbarriermessage.o: cbarriermessage.cc \
......
234 172
  ../../include/catomicopsdebug.h \
235 173
  ../../include/clockedmsgheap.h \
236 174
  ../../include/cnamedobject.h \
237
  ../../include/cexpression.h \
238 175
  ../../include/simtime.h \
239
  ../../include/cgate.h \
240 176
  ../../include/carray.h \
241 177
  ../../include/simtime_t.h \
242
  ../../include/cenvir.h \
243 178
  ../../include/cmsgpar.h \
244
  ../../include/ccomponent.h \
245
  ../../include/cconfigoption.h \
246
  ../../include/cnumgen.h \
247 179
  ../../include/cregistrationlist.h \
248 180
  ../../include/platdep/timeutil.h \
249
  ../../include/cconfiguration.h \
250 181
  ../../include/opp_string.h \
251 182
  ../../include/simkerneldefs.h \
252 183
  ../../include/cthreadpool.h \
253
  ../../include/random.h \
254 184
  ../../include/errmsg.h \
255 185
  ../../include/csimulation.h \
256 186
  ../../include/cmessage.h \
257 187
  ../../include/cownedobject.h \
258
  ../../include/onstartup.h \
259 188
  ../../include/cobject.h \
260
  ../../include/clistener.h \
189
  ../../include/onstartup.h \
261 190
  ../../include/cdummystringpool.h \
262 191
  ../../include/cstringpool.h \
263 192
  ../../include/cscheduler.h \
264
  ../../include/cpar.h \
265 193
  ../../include/globals.h \
266 194
  ../../include/ctaskheap.h \
267
  ../../include/casyncmodule.h \
268
  ../../include/cdefaultlist.h \
269 195
  ../../include/cvisitor.h \
270 196
  ../../include/cpthreadlock.h \
271 197
  ../../include/cttaslock.h \
272
  ../../include/csimplemodule.h \
273 198
  ../../include/cobjectfactory.h \
274 199
  ../../include/cnolock.h \
275
  ../../include/crng.h \
276 200
  ../../include/platdep/platmisc.h \
277
  ../../include/cmodule.h \
278 201
  ../../include/cmessageheap.h \
279
  ../../include/simutil.h \
280 202
  ../../include/cexception.h \
203
  ../../include/simutil.h \
281 204
  ../../include/cbarriermessage.h \
282 205
  ../../include/platdep/intxtypes.h
283 206
$O/cboolparimpl.o: cboolparimpl.cc \
......
365 288
  ../../include/cnolock.h \
366 289
  ../../include/platdep/platmisc.h \
367 290
  ../../include/cmodule.h \
368
  ../../include/simutil.h \
369 291
  ../../include/cmessageheap.h \
292
  ../../include/simutil.h \
370 293
  ../../include/cexception.h \
371 294
  ../../include/platdep/intxtypes.h \
372 295
  ../../include/ccomponenttype.h
......
468 391
  ../../include/crng.h \
469 392
  ../../include/platdep/platmisc.h \
470 393
  ../../include/cmodule.h \
471
  ../../include/cmessageheap.h \
472
  ../../include/simutil.h \
473 394
  ../../include/cexception.h \
395
  ../../include/simutil.h \
396
  ../../include/cmessageheap.h \
474 397
  ../../include/cproperty.h \
475 398
  ../../include/platdep/intxtypes.h \
476 399
  ../../include/ccomponenttype.h
......
495 418
  ../../include/cmsgpar.h \
496 419
  ../../include/ccomponent.h \
497 420
  parsim/cplaceholdermod.h \
421
  ../../include/cnumgen.h \
422
  ../../include/cconfigoption.h \
498 423
  ../../include/cregistrationlist.h \
499 424
  ../../include/platdep/timeutil.h \
425
  ../../include/cconfiguration.h \
500 426
  ../../include/cdelaychannel.h \
501 427
  ../../include/cchannel.h \
502 428
  ../../include/opp_string.h \
503 429
  ../../include/simkerneldefs.h \
430
  ../../include/random.h \
504 431
  ../../include/cthreadpool.h \
505 432
  ../../include/ccommbuffer.h \
506 433
  ../../include/csimulation.h \
......
519 446
  ../../include/cdefaultlist.h \
520 447
  ../../include/cparimpl.h \
521 448
  ../../include/cvisitor.h \
522
  ../../include/cttaslock.h \
523 449
  ../../include/cpthreadlock.h \
450
  ../../include/cttaslock.h \
524 451
  ../../include/csimplemodule.h \
525 452
  ../../include/cobjectfactory.h \
526 453
  ../../include/cnolock.h \
454
  ../../include/crng.h \
527 455
  ../../include/platdep/platmisc.h \
528 456
  ../../include/cmodule.h \
529 457
  ../../include/cmessageheap.h \
......
568 496
  ../../include/ctaskheap.h \
569 497
  ../../include/cdefaultlist.h \
570 498
  ../../include/cvisitor.h \
571
  ../../include/cpthreadlock.h \
572 499
  ../../include/cttaslock.h \
500
  ../../include/cpthreadlock.h \
573 501
  ../../include/cobjectfactory.h \
574 502
  ../../include/cnolock.h \
575 503
  ../../include/cmodule.h \
576 504
  ../../include/platdep/platmisc.h \
577
  ../../include/cmessageheap.h \
578
  ../../include/simutil.h \
579 505
  ../../include/cexception.h \
506
  ../../include/simutil.h \
507
  ../../include/cmessageheap.h \
580 508
  ../../include/platdep/intxtypes.h \
581 509
  ../../include/ccomponenttype.h
582 510
$O/cconfigoption.o: cconfigoption.cc \
......
678 606
  ../../include/crng.h \
679 607
  ../../include/platdep/platmisc.h \
680 608
  ../../include/cmodule.h \
681
  ../../include/cmessageheap.h \
682 609
  ../../include/simutil.h \
610
  ../../include/cmessageheap.h \
683 611
  ../../include/cexception.h \
684 612
  ../../include/platdep/intxtypes.h \
685 613
  ../../include/ccomponenttype.h
......
713 641
  ../../include/ctaskheap.h \
714 642
  ../../include/cdefaultlist.h \
715 643
  ../../include/cvisitor.h \
716
  ../../include/cpthreadlock.h \
717 644
  ../../include/cttaslock.h \
645
  ../../include/cpthreadlock.h \
718 646
  ../../include/cobjectfactory.h \
719 647
  ../../include/cnolock.h \
720 648
  ../../include/platdep/platmisc.h \
......
767 695
  ../../include/cobjectfactory.h \
768 696
  ../../include/cnolock.h \
769 697
  ../../include/platdep/platmisc.h \
770
  ../../include/cmessageheap.h \
771 698
  ../../include/simutil.h \
699
  ../../include/cmessageheap.h \
772 700
  ../../include/cexception.h \
773 701
  ../../include/platdep/intxtypes.h \
774 702
  ../../include/ccomponenttype.h
......
805 733
  ../../include/cdetect.h \
806 734
  ../../include/platdep/platdefs.h \
807 735
  ../../include/clockedmsgheap.h \
808
  ../../include/cnamedobject.h \
809 736
  ../../include/catomicopsdebug.h \
737
  ../../include/cnamedobject.h \
810 738
  ../../include/simtime.h \
811 739
  ../../include/simtime_t.h \
812 740
  ../../include/cstatistic.h \
......
823 751
  ../../include/cscheduler.h \
824 752
  ../../include/ctaskheap.h \
825 753
  ../../include/cvisitor.h \
826
  ../../include/cpthreadlock.h \
827 754
  ../../include/cttaslock.h \
755
  ../../include/cpthreadlock.h \
828 756
  ../../include/cnolock.h \
829 757
  ../../include/platdep/platmisc.h \
830
  ../../include/cexception.h \
831 758
  ../../include/cmessageheap.h \
759
  ../../include/cexception.h \
832 760
  ../../include/simutil.h \
833 761
  ../../include/platdep/intxtypes.h
834 762
$O/cdisplaystring.o: cdisplaystring.cc \
......
838 766
  ../../include/platdep/platdefs.h \
839 767
  ../../include/cmathfunction.h \
840 768
  ../../include/cexpression.h \
841
  ../../include/catomicopsdebug.h \
842 769
  ../../include/cnamedobject.h \
770
  ../../include/catomicopsdebug.h \
843 771
  ../../include/clockedmsgheap.h \
844 772
  ../../include/simtime.h \
845 773
  ../../include/cgate.h \
......
871 799
  ../../include/ctaskheap.h \
872 800
  ../../include/cdefaultlist.h \
873 801
  ../../include/cvisitor.h \
874
  ../../include/cttaslock.h \
875 802
  ../../include/cpthreadlock.h \
803
  ../../include/cttaslock.h \
876 804
  ../../include/cobjectfactory.h \
877 805
  ../../include/cnolock.h \
878 806
  ../../include/platdep/platmisc.h \
879 807
  ../../include/cmodule.h \
880 808
  ../../include/simutil.h \
881
  ../../include/cmessageheap.h \
882 809
  ../../include/cexception.h \
810
  ../../include/cmessageheap.h \
883 811
  ../../include/platdep/intxtypes.h \
884 812
  ../../include/ccomponenttype.h
885 813
$O/cdoubleparimpl.o: cdoubleparimpl.cc \
......
948 876
  expryydefs.h \
949 877
  ../../include/cmathfunction.h \
950 878
  ../../include/clockedmsgheap.h \
951
  ../../include/cnamedobject.h \
952 879
  ../../include/catomicopsdebug.h \
880
  ../../include/cnamedobject.h \
953 881
  ../../include/cexpression.h \
954 882
  ../../include/cgate.h \
955 883
  ../../include/simtime.h \
......
977 905
  ../../include/ctaskheap.h \
978 906
  ../../include/cdefaultlist.h \
979 907
  ../../include/cvisitor.h \
980
  ../../include/cpthreadlock.h \
981 908
  ../../include/cttaslock.h \
909
  ../../include/cpthreadlock.h \
982 910
  ../../include/cobjectfactory.h \
983 911
  ../../include/cnolock.h \
984 912
  ../../include/cxmlelement.h \
......
1015 943
  ../../include/globals.h \
1016 944
  ../../include/ctaskheap.h \
1017 945
  ../../include/cvisitor.h \
1018
  ../../include/cpthreadlock.h \
1019 946
  ../../include/cttaslock.h \
947
  ../../include/cpthreadlock.h \
1020 948
  ../../include/cobjectfactory.h \
1021 949
  ../../include/cnolock.h \
1022 950
  ../../include/platdep/platmisc.h \
......
1028 956
  ../../include/regmacros.h \
1029 957
  ../../include/cstopwatch.h \
1030 958
  ../../include/platdep/platdefs.h \
1031
  ../../include/catomicopsdebug.h \
1032 959
  ../../include/cnamedobject.h \
960
  ../../include/catomicopsdebug.h \
1033 961
  ../../include/clockedmsgheap.h \
1034 962
  ../../include/simtime.h \
1035 963
  ../../include/simtime_t.h \
......
1048 976
  ../../include/cscheduler.h \
1049 977
  ../../include/ctaskheap.h \
1050 978
  ../../include/cvisitor.h \
1051
  ../../include/cttaslock.h \
1052 979
  ../../include/cpthreadlock.h \
980
  ../../include/cttaslock.h \
1053 981
  ../../include/cnolock.h \
1054 982
  ../../include/platdep/platmisc.h \
1055 983
  ../../include/simutil.h \
1056
  ../../include/cmessageheap.h \
1057 984
  ../../include/cexception.h \
985
  ../../include/cmessageheap.h \
1058 986
  ../../include/platdep/intxtypes.h
1059 987
$O/cexception.o: cexception.cc \
1060 988
  ../../include/cstopwatch.h \
......
1062 990
  ../../include/platdep/platdefs.h \
1063 991
  ../../include/cexpression.h \
1064 992
  ../../include/clockedmsgheap.h \
1065
  ../../include/cnamedobject.h \
1066 993
  ../../include/catomicopsdebug.h \
994
  ../../include/cnamedobject.h \
1067 995
  ../../include/cgate.h \
1068 996
  ../../include/simtime.h \
1069 997
  ../../include/simtime_t.h \
......
1089 1017
  ../../include/ctaskheap.h \
1090 1018
  ../../include/cdefaultlist.h \
1091 1019
  ../../include/cvisitor.h \
1092
  ../../include/cpthreadlock.h \
1093 1020
  ../../include/cttaslock.h \
1021
  ../../include/cpthreadlock.h \
1094 1022
  ../../include/cobjectfactory.h \
1095 1023
  ../../include/cnolock.h \
1096 1024
  ../../include/platdep/platmisc.h \
......
1173 1101
  ../../include/cownedobject.h \
1174 1102
  ../../include/cmessage.h \
1175 1103
  ../../include/cdisplaystring.h \
1176
  ../../include/cobject.h \
1177 1104
  ../../include/onstartup.h \
1105
  ../../include/cobject.h \
1178 1106
  ../../include/clistener.h \
1179 1107
  ../../include/cdummystringpool.h \
1180 1108
  ../../include/cstringpool.h \
......
1216 1144
  ../../include/cdetect.h \
1217 1145
  ../../include/platdep/platdefs.h \
1218 1146
  ../../include/distrib.h \
1219
  ../../include/catomicopsdebug.h \
1220 1147
  ../../include/cnamedobject.h \
1148
  ../../include/catomicopsdebug.h \
1221 1149
  ../../include/clockedmsgheap.h \
1222 1150
  ../../include/cexpression.h \
1223 1151
  ../../include/simtime.h \
......
1257 1185
  ../../include/cstddev.h \
1258 1186
  ../../include/cnolock.h \
1259 1187
  ../../include/crng.h \
1260
  ../../include/cmodule.h \
1261 1188
  ../../include/platdep/platmisc.h \
1262
  ../../include/simutil.h \
1189
  ../../include/cmodule.h \
1263 1190
  ../../include/cmessageheap.h \
1191
  ../../include/simutil.h \
1264 1192
  ../../include/cexception.h \
1265 1193
  ../../include/platdep/intxtypes.h
1266 1194
$O/cksplit.o: cksplit.cc \
......
1303 1231
  ../../include/cdefaultlist.h \
1304 1232
  ../../include/cdensityestbase.h \
1305 1233
  ../../include/cvisitor.h \
1306
  ../../include/cttaslock.h \
1307 1234
  ../../include/cpthreadlock.h \
1235
  ../../include/cttaslock.h \
1308 1236
  ../../include/cobjectfactory.h \
1309 1237
  ../../include/cstddev.h \
1310 1238
  ../../include/cnolock.h \
......
1343 1271
  ../../include/globals.h \
1344 1272
  ../../include/ctaskheap.h \
1345 1273
  ../../include/cvisitor.h \
1346
  ../../include/cttaslock.h \
1347 1274
  ../../include/cpthreadlock.h \
1275
  ../../include/cttaslock.h \
1348 1276
  ../../include/cobjectfactory.h \
1349 1277
  ../../include/cnolock.h \
1350 1278
  ../../include/crng.h \
......
1423 1351
  ../../include/cnolock.h \
1424 1352
  ../../include/platdep/platmisc.h \
1425 1353
  ../../include/cmodule.h \
1426
  ../../include/cmessageheap.h \
1427 1354
  ../../include/cexception.h \
1355
  ../../include/cmessageheap.h \
1428 1356
  ../../include/simutil.h \
1429 1357
  ../../include/platdep/intxtypes.h \
1430 1358
  ../../include/ccomponenttype.h
......
1465 1393
  ../../include/cmathfunction.h \
1466 1394
  ../../include/cexpression.h \
1467 1395
  ../../include/clockedmsgheap.h \
1468
  ../../include/catomicopsdebug.h \
1469 1396
  ../../include/cnamedobject.h \
1397
  ../../include/catomicopsdebug.h \
1470 1398
  ../../include/cgate.h \
1471 1399
  ../../include/simtime.h \
1472 1400
  ../../include/carray.h \
......
1498 1426
  ../../include/globals.h \
1499 1427
  ../../include/ctaskheap.h \
1500 1428
  ../../include/cdefaultlist.h \
1501
  ../../include/casyncmodule.h \
1502 1429
  ../../include/cvisitor.h \
1503 1430
  ../../include/cttaslock.h \
1504 1431
  ../../include/cpthreadlock.h \
......
1591 1518
  ../../include/ctaskheap.h \
1592 1519
  ../../include/cdefaultlist.h \
1593 1520
  ../../include/cvisitor.h \
1594
  ../../include/cttaslock.h \
1595 1521
  ../../include/cpthreadlock.h \
1522
  ../../include/cttaslock.h \
1596 1523
  ../../include/cobjectfactory.h \
1597 1524
  ../../include/cnolock.h \
1598 1525
  ../../include/crng.h \
......
1607 1534
  ../../include/cstopwatch.h \
1608 1535
  ../../include/platdep/platdefs.h \
1609 1536
  ../../include/cmathfunction.h \
1610
  ../../include/catomicopsdebug.h \
1611 1537
  ../../include/cnamedobject.h \
1538
  ../../include/catomicopsdebug.h \
1612 1539
  ../../include/clockedmsgheap.h \
1613 1540
  ../../include/simtime.h \
1614 1541
  ../../include/carray.h \
......
1635 1562
  ../../include/globals.h \
1636 1563
  ../../include/ctaskheap.h \
1637 1564
  ../../include/cvisitor.h \
1638
  ../../include/cttaslock.h \
1639 1565
  ../../include/cpthreadlock.h \
1566
  ../../include/cttaslock.h \
1640 1567
  ../../include/cmersennetwister.h \
1641 1568
  ../../include/cobjectfactory.h \
1642 1569
  ../../include/cnolock.h \
......
1686 1613
  ../../include/globals.h \
1687 1614
  ../../include/ctaskheap.h \
1688 1615
  ../../include/cdefaultlist.h \
1689
  ../../include/casyncmodule.h \
1690 1616
  ../../include/cvisitor.h \
1691
  ../../include/cttaslock.h \
1692 1617
  ../../include/cpthreadlock.h \
1618
  ../../include/cttaslock.h \
1693 1619
  ../../include/csimplemodule.h \
1694 1620
  ../../include/cobjectfactory.h \
1695 1621
  ../../include/cnolock.h \
......
1756 1682
  ../../include/cenvir.h \
1757 1683
  ../../include/cmsgpar.h \
1758 1684
  ../../include/ccomponent.h \
1685
  ../../include/cnumgen.h \
1686
  ../../include/cconfigoption.h \
1759 1687
  ../../include/cproperties.h \
1760 1688
  ../../include/cregistrationlist.h \
1761 1689
  ../../include/platdep/timeutil.h \
1690
  ../../include/cconfiguration.h \
1762 1691
  ../../include/cchannel.h \
1763 1692
  ../../include/opp_string.h \
1764 1693
  ../../include/simkerneldefs.h \
1694
  ../../include/random.h \
1765 1695
  ../../include/cthreadpool.h \
1766 1696
  ../../include/errmsg.h \
1767 1697
  ../../include/csimulation.h \
......
1778 1708
  ../../include/ctaskheap.h \
1779 1709
  ../../include/cdefaultlist.h \
1780 1710
  ../../include/cvisitor.h \
1781
  ../../include/cttaslock.h \
1782 1711
  ../../include/cpthreadlock.h \
1712
  ../../include/cttaslock.h \
1783 1713
  ../../include/csimplemodule.h \
1784 1714
  ../../include/cobjectfactory.h \
1785 1715
  ../../include/cnolock.h \
1716
  ../../include/crng.h \
1786 1717
  ../../include/platdep/platmisc.h \
1787 1718
  ../../include/cmodule.h \
1788 1719
  ../../include/cmessageheap.h \
......
1825 1756
  ../../include/globals.h \
1826 1757
  ../../include/ctaskheap.h \
1827 1758
  ../../include/cvisitor.h \
1828
  ../../include/cpthreadlock.h \
1829 1759
  ../../include/cttaslock.h \
1760
  ../../include/cpthreadlock.h \
1830 1761
  ../../include/cobjectfactory.h \
1831 1762
  ../../include/cnolock.h \
1832 1763
  ../../include/cxmlelement.h \
......
1892 1823
  ../../include/distrib.h \
1893 1824
  ../../include/cexpression.h \
1894 1825
  ../../include/clockedmsgheap.h \
1895
  ../../include/cnamedobject.h \
1896 1826
  ../../include/catomicopsdebug.h \
1827
  ../../include/cnamedobject.h \
1897 1828
  ../../include/simtime.h \
1898 1829
  ../../include/cgate.h \
1899 1830
  ../../include/simtime_t.h \
......
1929 1860
  ../../include/cobjectfactory.h \
1930 1861
  ../../include/cnolock.h \
1931 1862
  ../../include/crng.h \
1932
  ../../include/platdep/platmisc.h \
1933 1863
  ../../include/cmodule.h \
1934
  ../../include/cmessageheap.h \
1864
  ../../include/platdep/platmisc.h \
1935 1865
  ../../include/simutil.h \
1866
  ../../include/cmessageheap.h \
1936 1867
  ../../include/cexception.h \
1937 1868
  ../../include/platdep/intxtypes.h
1938 1869
$O/cobject.o: cobject.cc \
......
1960 1891
  ../../include/ctaskheap.h \
1961 1892
  ../../include/cdefaultlist.h \
1962 1893
  ../../include/cvisitor.h \
1963
  ../../include/cttaslock.h \
1964 1894
  ../../include/cpthreadlock.h \
1895
  ../../include/cttaslock.h \
1965 1896
  ../../include/cnolock.h \
1966 1897
  ../../include/platdep/platmisc.h \
1967 1898
  ../../include/cmessageheap.h \
......
2002 1933
  ../../include/ctaskheap.h \
2003 1934
  ../../include/cdefaultlist.h \
2004 1935
  ../../include/cvisitor.h \
2005
  ../../include/cpthreadlock.h \
2006 1936
  ../../include/cttaslock.h \
1937
  ../../include/cpthreadlock.h \
2007 1938
  ../../include/cobjectfactory.h \
2008 1939
  ../../include/cnolock.h \
2009 1940
  ../../include/cmodule.h \
......
2047 1978
  ../../include/ctaskheap.h \
2048 1979
  ../../include/cdefaultlist.h \
2049 1980
  ../../include/cvisitor.h \
2050
  ../../include/cttaslock.h \
2051 1981
  ../../include/cpthreadlock.h \
1982
  ../../include/cttaslock.h \
2052 1983
  ../../include/cobjectfactory.h \
2053 1984
  ../../include/cnolock.h \
2054 1985
  ../../include/platdep/platmisc.h \
......
2086 2017
  ../../include/ctaskheap.h \
2087 2018
  ../../include/cdefaultlist.h \
2088 2019
  ../../include/cvisitor.h \
2089
  ../../include/cpthreadlock.h \
2090 2020
  ../../include/cttaslock.h \
2021
  ../../include/cpthreadlock.h \
2091 2022
  ../../include/cobjectfactory.h \
2092 2023
  ../../include/cnolock.h \
2093 2024
  ../../include/platdep/platmisc.h \
......
2180 2111
  ../../include/platdep/platmisc.h \
2181 2112
  ../../include/cmodule.h \
2182 2113
  ../../include/cmessageheap.h \
2183
  ../../include/simutil.h \
2184 2114
  ../../include/cexception.h \
2115
  ../../include/simutil.h \
2185 2116
  ../../include/cproperty.h \
2186 2117
  ../../include/platdep/intxtypes.h \
2187 2118
  ../../include/ccomponenttype.h
......
2237 2168
  ../../include/cstopwatch.h \
2238 2169
  ../../include/regmacros.h \
2239 2170
  ../../include/platdep/platdefs.h \
2240
  ../../include/catomicopsdebug.h \
2241 2171
  ../../include/cnamedobject.h \
2172
  ../../include/catomicopsdebug.h \
2242 2173
  ../../include/clockedmsgheap.h \
2243 2174
  ../../include/simtime.h \
2244 2175
  ../../include/simtime_t.h \
......
2257 2188
  ../../include/cscheduler.h \
2258 2189
  ../../include/ctaskheap.h \
2259 2190
  ../../include/cvisitor.h \
2260
  ../../include/cttaslock.h \
2261 2191
  ../../include/cpthreadlock.h \
2192
  ../../include/cttaslock.h \
2262 2193
  ../../include/cnolock.h \
2263 2194
  ../../include/platdep/platmisc.h \
2264 2195
  ../../include/cmessageheap.h \
......
2451 2382
  ../../include/cpar.h \
2452 2383
  ../../include/globals.h \
2453 2384
  ../../include/ctaskheap.h \
2454
  ../../include/casyncmodule.h \
2455 2385
  ../../include/cdefaultlist.h \
2456 2386
  ../../include/cvisitor.h \
2457 2387
  ../../include/cttaslock.h \
......
2468 2398
  ../../include/cbarriermessage.h \
2469 2399
  ../../include/platdep/intxtypes.h
2470 2400
$O/csimplemodule.o: csimplemodule.cc \
2401
  ../envir/args.h \
2471 2402
  ../../include/regmacros.h \
2472 2403
  ../../include/cstopwatch.h \
2473 2404
  ../../include/ccoroutine.h \
2474 2405
  ../../include/platdep/platdefs.h \
2406
  ../envir/envirdefs.h \
2475 2407
  ../../include/cqueue.h \
2408
  ../envir/resultlistener.h \
2476 2409
  ../../include/cmathfunction.h \
2477
  ../../include/cnamedobject.h \
2478 2410
  ../../include/catomicopsdebug.h \
2411
  ../../include/cnamedobject.h \
2479 2412
  ../../include/cexpression.h \
2480 2413
  ../../include/clockedmsgheap.h \
2414
  ../envir/eventlogfilemgr.h \
2481 2415
  ../../include/simtime.h \
2482 2416
  ../../include/cgate.h \
2417
  ../envir/objectprinter.h \
2483 2418
  ../../include/carray.h \
2484 2419
  ../../include/simtime_t.h \
2485 2420
  ../../include/cenvir.h \
2486 2421
  ../../include/ccomponent.h \
2487 2422
  ../../include/cmsgpar.h \
2423
  ../../include/cnumgen.h \
2424
  ../../include/cconfigoption.h \
2488 2425
  ../../include/cregistrationlist.h \
2426
  ../../include/cstringtokenizer.h \
2489 2427
  ../../include/platdep/timeutil.h \
2428
  ../../include/cconfiguration.h \
2429
  ../envir/intervals.h \
2490 2430
  ../../include/opp_string.h \
2491 2431
  ../../include/simkerneldefs.h \
2432
  ../../include/random.h \
2492 2433
  ../../include/cthreadpool.h \
2493 2434
  ../../include/errmsg.h \
2494 2435
  ../../include/csimulation.h \
2495 2436
  ../../include/cownedobject.h \
2496 2437
  ../../include/cmessage.h \
2497
  ../../include/cobject.h \
2498 2438
  ../../include/onstartup.h \
2439
  ../../include/cobject.h \
2440
  ../envir/envirbase.h \
2441
  ../../include/envirext.h \
2499 2442
  ../../include/clistener.h \
2500 2443
  ../../include/cdummystringpool.h \
2501 2444
  ../../include/cstringpool.h \
......
2505 2448
  ../../include/ctaskheap.h \
2506 2449
  ../../include/cdefaultlist.h \
2507 2450
  ../../include/cvisitor.h \
2508
  ../../include/cpthreadlock.h \
2509 2451
  ../../include/cttaslock.h \
2452
  ../../include/cpthreadlock.h \
2510 2453
  ../../include/csimplemodule.h \
2511 2454
  ../../include/cobjectfactory.h \
2512 2455
  ../../include/cnolock.h \
2456
  ../../include/crng.h \
2513 2457
  ../../include/cmodule.h \
2514 2458
  ../../include/platdep/platmisc.h \
2515
  ../../include/cmessageheap.h \
2516 2459
  ../../include/simutil.h \
2460
  ../../include/cmessageheap.h \
2517 2461
  ../../include/cexception.h \
2518 2462
  ../../include/platdep/intxtypes.h
2519 2463
$O/csimulation.o: csimulation.cc \
2464
  ../../include/cstopwatch.h \
2520 2465
  ../../include/regmacros.h \
2466
  ../../include/ccoroutine.h \
2467
  ../../include/platdep/platdefs.h \
2468
  ../../include/cmathfunction.h \
2469
  ../../include/clockedmsgheap.h \
2521 2470
  ../../include/cexpression.h \
2471
  ../../include/catomicopsdebug.h \
2522 2472
  ../../include/cnamedobject.h \
2473
  ../../include/cgate.h \
2474
  ../../include/simtime.h \
2475
  ../../include/carray.h \
2476
  ../../include/simtime_t.h \
2477
  ../../include/sysdep.h \
2478
  ../../include/cenvir.h \
2479
  ../../include/cmsgpar.h \
2523 2480
  ../../include/ccomponent.h \
2524 2481
  ../../include/cproperties.h \
2482
  ../../include/cnumgen.h \
2483
  ../../include/cconfigoption.h \
2484
  ../../include/cstatistic.h \
2525 2485
  ../../include/cregistrationlist.h \
2526 2486
  ../../include/platdep/timeutil.h \
2527 2487
  ../../include/cconfiguration.h \
2488
  ../../include/opp_string.h \
2528 2489
  ../../include/chasher.h \
2490
  ../../include/simkerneldefs.h \
2491
  netbuilder/cneddeclaration.h \
2492
  ../../include/random.h \
2529 2493
  ../../include/ccommbuffer.h \
2530 2494
  ../../include/cthreadpool.h \
2531 2495
  ../../include/errmsg.h \
2496
  ../../include/csimulation.h \
2532 2497
  ../../include/cownedobject.h \
2533 2498
  ../../include/cmessage.h \
2499
  ../../include/cobject.h \
2534 2500
  ../../include/onstartup.h \
2501
  ../../include/cspinningthreadpool.h \
2535 2502
  ../../include/clistener.h \
2503
  ../../include/clockedthreadpool.h \
2504
  ../../include/cdummystringpool.h \
2505
  ../../include/cstringpool.h \
2536 2506
  ../../include/cscheduler.h \
2537 2507
  ../../include/cpar.h \
2538 2508
  ../../include/globals.h \
2539 2509
  netbuilder/cnedloader.h \
2540
  ../../include/casyncmodule.h \
2510
  ../../include/ctaskheap.h \
2511
  ../../include/cdefaultlist.h \
2512
  ../../include/cparimpl.h \
2541 2513
  ../../include/cvisitor.h \
2542
  ../../include/cttaslock.h \
2543 2514
  ../../include/cpthreadlock.h \
2515
  ../../include/cttaslock.h \
2544 2516
  ../../include/csimplemodule.h \
2545 2517
  ../../include/cobjectfactory.h \
2546 2518
  ../../include/cnolock.h \
2519
  ../../include/crng.h \
2547 2520
  ../../include/platdep/platmisc.h \
2548 2521
  ../../include/cmodule.h \
2522
  ../../include/cmessageheap.h \
2523
  ../../include/simutil.h \
2549 2524
  ../../include/cexception.h \
2525
  ../../include/cproperty.h \
2550 2526
  ../../include/cbarriermessage.h \
2551 2527
  ../../include/platdep/intxtypes.h \
2552
  ../../include/ccomponenttype.h \
2528
  ../../include/ccomponenttype.h
2529
$O/cspinningthreadpool.o: cspinningthreadpool.cc \
2530
  ../../include/regmacros.h \
2553 2531
  ../../include/cstopwatch.h \
2554
  ../../include/ccoroutine.h \
2555 2532
  ../../include/platdep/platdefs.h \
2556 2533
  ../../include/cmathfunction.h \
2557 2534
  ../../include/catomicopsdebug.h \
2535
  ../../include/cnamedobject.h \
2558 2536
  ../../include/clockedmsgheap.h \
2537
  ../../include/cexpression.h \
2559 2538
  ../../include/simtime.h \
2560 2539
  ../../include/cgate.h \
2561 2540
  ../../include/carray.h \
2562
  ../../include/cenvir.h \
2563
  ../../include/sysdep.h \
2564 2541
  ../../include/simtime_t.h \
2542
  ../../include/cenvir.h \
2565 2543
  ../../include/cmsgpar.h \
2566
  ../../include/cstatistic.h \
2567
  ../../include/cconfigoption.h \
2544
  ../../include/ccomponent.h \
2568 2545
  ../../include/cnumgen.h \
2569
  ../../include/opp_string.h \
2570
  ../../include/simkerneldefs.h \
2571
  netbuilder/cneddeclaration.h \
2572
  ../../include/random.h \
2573
  ../../include/csimulation.h \
2574
  ../../include/cspinningthreadpool.h \
2575
  ../../include/cobject.h \
2576
  ../../include/clockedthreadpool.h \
2577
  ../../include/cdummystringpool.h \
2578
  ../../include/cstringpool.h \
2579
  ../../include/ctaskheap.h \
2580
  ../../include/cdefaultlist.h \
2581
  ../../include/cparimpl.h \
2582
  ../../include/crng.h \
2583
  ../../include/cmessageheap.h \
2584
  ../../include/simutil.h \
2585
  ../../include/cproperty.h
2586
$O/cspinningthreadpool.o: cspinningthreadpool.cc \
2587
  ../../include/regmacros.h \
2588
  ../../include/cexpression.h \
2589
  ../../include/cnamedobject.h \
2590
  ../../include/ccomponent.h \
2546
  ../../include/cconfigoption.h \
2591 2547
  ../../include/cregistrationlist.h \
2592 2548
  ../../include/platdep/timeutil.h \
2593 2549
  ../../include/cconfiguration.h \
2550
  ../../include/opp_string.h \
2551
  ../../include/simkerneldefs.h \
2594 2552
  ../../include/cthreadpool.h \
2553
  ../../include/random.h \
2595 2554
  ../../include/errmsg.h \
2555
  ../../include/csimulation.h \
2596 2556
  ../../include/cownedobject.h \
2597 2557
  ../../include/cmessage.h \
2558
  ../../include/cobject.h \
2598 2559
  ../../include/onstartup.h \
2560
  ../../include/cspinningthreadpool.h \
2599 2561
  ../../include/clistener.h \
2562
  ../../include/cdummystringpool.h \
2563
  ../../include/cstringpool.h \
2600 2564
  ../../include/cscheduler.h \
2601 2565
  ../../include/cpar.h \
2602 2566
  ../../include/globals.h \
2603
  ../../include/casyncmodule.h \
2567
  ../../include/ctaskheap.h \
2568
  ../../include/cdefaultlist.h \
2604 2569
  ../../include/cvisitor.h \
2605
  ../../include/cttaslock.h \
2606 2570
  ../../include/cpthreadlock.h \
2571
  ../../include/cttaslock.h \
2607 2572
  ../../include/csimplemodule.h \
2608 2573
  ../../include/cobjectfactory.h \
2609 2574
  ../../include/cnolock.h \
2610
  ../../include/cmodule.h \
2575
  ../../include/crng.h \
2611 2576
  ../../include/platdep/platmisc.h \
2577
  ../../include/cmodule.h \
2612 2578
  ../../include/cexception.h \
2579
  ../../include/simutil.h \
2580
  ../../include/cmessageheap.h \
2613 2581
  ../../include/cbarriermessage.h \
2614
  ../../include/platdep/intxtypes.h \
2582
  ../../include/platdep/intxtypes.h
2583
$O/cstatistic.o: cstatistic.cc \
2615 2584
  ../../include/cstopwatch.h \
2585
  ../../include/regmacros.h \
2586
  ../../include/cdetect.h \
2616 2587
  ../../include/platdep/platdefs.h \
2617
  ../../include/cmathfunction.h \
2588
  ../../include/distrib.h \
2618 2589
  ../../include/clockedmsgheap.h \
2590
  ../../include/cexpression.h \
2591
  ../../include/cnamedobject.h \
2619 2592
  ../../include/catomicopsdebug.h \
2620 2593
  ../../include/cgate.h \
2621 2594
  ../../include/simtime.h \
2622
  ../../include/carray.h \
2623
  ../../include/cenvir.h \
2624 2595
  ../../include/simtime_t.h \
2625
  ../../include/cmsgpar.h \
2596
  ../../include/cenvir.h \
2597
  ../../include/ccomponent.h \
2626 2598
  ../../include/cnumgen.h \
2627 2599
  ../../include/cconfigoption.h \
2628
  ../../include/opp_string.h \
2629
  ../../include/simkerneldefs.h \
2630
  ../../include/random.h \
2631
  ../../include/csimulation.h \
2632
  ../../include/cobject.h \
2633
  ../../include/cspinningthreadpool.h \
2634
  ../../include/cdummystringpool.h \
2635
  ../../include/cstringpool.h \
2636
  ../../include/ctaskheap.h \
2637
  ../../include/cdefaultlist.h \
2638
  ../../include/crng.h \
2639
  ../../include/simutil.h \
2640
  ../../include/cmessageheap.h
2641
$O/cstatistic.o: cstatistic.cc \
2642
  ../../include/regmacros.h \
2643
  ../../include/distrib.h \
2644
  ../../include/cexpression.h \
2645
  ../../include/cnamedobject.h \
2646
  ../../include/ccomponent.h \
2600
  ../../include/cstatistic.h \
2647 2601
  ../../include/cregistrationlist.h \
2648 2602
  ../../include/platdep/timeutil.h \
2649 2603
  ../../include/cconfiguration.h \
2604
  ../../include/opp_string.h \
2605
  ../../include/simkerneldefs.h \
2650 2606
  ../../include/cthreadpool.h \
2651 2607
  ../../include/ccommbuffer.h \
2608
  ../../include/random.h \
2609
  ../../include/csimulation.h \
2652 2610
  ../../include/errmsg.h \
2653 2611
  ../../include/cownedobject.h \
2654 2612
  ../../include/onstartup.h \
2613
  ../../include/cobject.h \
2655 2614
  ../../include/clistener.h \
2615
  ../../include/cdummystringpool.h \
2616
  ../../include/cstringpool.h \
2656 2617
  ../../include/cscheduler.h \
2657 2618
  ../../include/cpar.h \
2658 2619
  ../../include/globals.h \
2620
  ../../include/ctaskheap.h \
2621
  ../../include/cdefaultlist.h \
2659 2622
  ../../include/cvisitor.h \
2660 2623
  ../../include/cttaslock.h \
2661 2624
  ../../include/cpthreadlock.h \
2662 2625
  ../../include/csimplemodule.h \
2663 2626
  ../../include/cobjectfactory.h \
2664 2627
  ../../include/cnolock.h \
2628
  ../../include/crng.h \
2665 2629
  ../../include/cmodule.h \
2666 2630
  ../../include/platdep/platmisc.h \
2631
  ../../include/cmessageheap.h \
2632
  ../../include/simutil.h \
2667 2633
  ../../include/cexception.h \
2668
  ../../include/platdep/intxtypes.h \
2634
  ../../include/platdep/intxtypes.h
2635
$O/cstddev.o: cstddev.cc \
2669 2636
  ../../include/cstopwatch.h \
2637
  ../../include/regmacros.h \
2670 2638
  ../../include/cdetect.h \
2671 2639
  ../../include/platdep/platdefs.h \
2640
  ../../include/distrib.h \
2672 2641
  ../../include/clockedmsgheap.h \
2642
  ../../include/cexpression.h \
2673 2643
  ../../include/catomicopsdebug.h \
2644
  ../../include/cnamedobject.h \
2674 2645
  ../../include/cgate.h \
2675 2646
  ../../include/simtime.h \
2676 2647
  ../../include/simtime_t.h \
2677 2648
  ../../include/cenvir.h \
2649
  ../../include/ccomponent.h \
2650
  ../../include/cnumgen.h \
2678 2651
  ../../include/cconfigoption.h \
2679 2652
  ../../include/cstatistic.h \
2680
  ../../include/opp_string.h \
2681
  ../../include/simkerneldefs.h \
2682
  ../../include/random.h \
2683
  ../../include/csimulation.h \
2684
  ../../include/cobject.h \
2685
  ../../include/cdummystringpool.h \
2686
  ../../include/cstringpool.h \
2687
  ../../include/ctaskheap.h \
2688
  ../../include/cdefaultlist.h \
2689
  ../../include/crng.h \
2690
  ../../include/cmessageheap.h \
2691
  ../../include/simutil.h
2692
$O/cstddev.o: cstddev.cc \
2693
  ../../include/regmacros.h \
2694
  ../../include/distrib.h \
2695
  ../../include/cexpression.h \
2696
  ../../include/cnamedobject.h \
2697
  ../../include/ccomponent.h \
2698 2653
  ../../include/cregistrationlist.h \
2699 2654
  ../../include/platdep/timeutil.h \
2700 2655
  ../../include/cconfiguration.h \
2656
  ../../include/opp_string.h \
2657
  ../../include/simkerneldefs.h \
2701 2658
  ../../include/cthreadpool.h \
2702 2659
  ../../include/ccommbuffer.h \
2660
  ../../include/random.h \
2661
  ../../include/csimulation.h \
2703 2662
  ../../include/errmsg.h \
2704 2663
  ../../include/cownedobject.h \
2705 2664
  ../../include/onstartup.h \
2665
  ../../include/cobject.h \
2706 2666
  ../../include/clistener.h \
2667
  ../../include/cdummystringpool.h \
2668
  ../../include/cstringpool.h \
2707 2669
  ../../include/cscheduler.h \
2708 2670
  ../../include/cpar.h \
2709 2671
  ../../include/globals.h \
2672
  ../../include/ctaskheap.h \
2673
  ../../include/cdefaultlist.h \
2710 2674
  ../../include/cvisitor.h \
2711 2675
  ../../include/cttaslock.h \
2712 2676
  ../../include/cpthreadlock.h \
2713 2677
  ../../include/csimplemodule.h \
2714 2678
  ../../include/cobjectfactory.h \
2715 2679
  ../../include/cnolock.h \
2680
  ../../include/cstddev.h \
2681
  ../../include/crng.h \
2716 2682
  ../../include/cmodule.h \
2717 2683
  ../../include/platdep/platmisc.h \
2684
  ../../include/cmessageheap.h \
2685
  ../../include/simutil.h \
2718 2686
  ../../include/cexception.h \
2719
  ../../include/platdep/intxtypes.h \
2720
  ../../include/cstopwatch.h \
2721
  ../../include/cdetect.h \
2687
  ../../include/platdep/intxtypes.h
2688
$O/cstlwatch.o: cstlwatch.cc \
2689
  ../../include/regmacros.h \
2722 2690
  ../../include/platdep/platdefs.h \
2723
  ../../include/clockedmsgheap.h \
2691
  ../../include/cwatch.h \
2692
  ../../include/cnamedobject.h \
2724 2693
  ../../include/catomicopsdebug.h \
2725
  ../../include/cgate.h \
2726 2694
  ../../include/simtime.h \
2727 2695
  ../../include/simtime_t.h \
2728
  ../../include/cenvir.h \
2729
  ../../include/cconfigoption.h \
2730
  ../../include/cstatistic.h \
2696
  ../../include/cclassdescriptor.h \
2697
  ../../include/cregistrationlist.h \
2731 2698
  ../../include/opp_string.h \
2732 2699
  ../../include/simkerneldefs.h \
2733
  ../../include/random.h \
2734
  ../../include/csimulation.h \
2735
  ../../include/cobject.h \
2736
  ../../include/cdummystringpool.h \
2737
  ../../include/cstringpool.h \
2738
  ../../include/ctaskheap.h \
2739
  ../../include/cdefaultlist.h \
2740
  ../../include/cstddev.h \
2741
  ../../include/crng.h \
2742
  ../../include/cmessageheap.h \
2743
  ../../include/simutil.h
2744
$O/cstlwatch.o: cstlwatch.cc \
2745
  ../../include/regmacros.h \
2746
  ../../include/cnamedobject.h \
2747
  ../../include/cregistrationlist.h \
2748 2700
  ../../include/errmsg.h \
2749 2701
  ../../include/cownedobject.h \
2750 2702
  ../../include/onstartup.h \
2703
  ../../include/cobject.h \
2751 2704
  ../../include/cstlwatch.h \
2705
  ../../include/cdummystringpool.h \
2706
  ../../include/cstringpool.h \
2752 2707
  ../../include/globals.h \
2753 2708
  ../../include/cvisitor.h \
2754 2709
  ../../include/cobjectfactory.h \
2755 2710
  ../../include/platdep/platmisc.h \
2756 2711
  ../../include/cexception.h \
2757
  ../../include/platdep/intxtypes.h \
2758
  ../../include/platdep/platdefs.h \
2759
  ../../include/cwatch.h \
2760
  ../../include/catomicopsdebug.h \
2761
  ../../include/simtime.h \
2762
  ../../include/simtime_t.h \
2763
  ../../include/cclassdescriptor.h \
2764
  ../../include/opp_string.h \
2765
  ../../include/simkerneldefs.h \
2766
  ../../include/cobject.h \
2767
  ../../include/cdummystringpool.h \
2768
  ../../include/cstringpool.h \
2769
  ../../include/simutil.h
2712
  ../../include/simutil.h \
2713
  ../../include/platdep/intxtypes.h
2770 2714
$O/cstopwatch.o: cstopwatch.cc \
2771
  ../../include/platdep/intxtypes.h \
2772 2715
  ../../include/cstopwatch.h \
2773 2716
  ../../include/platdep/platdefs.h \
2774
  ../../include/simkerneldefs.h
2717
  ../../include/simkerneldefs.h \
2718
  ../../include/platdep/intxtypes.h
2775 2719
$O/cstringparimpl.o: cstringparimpl.cc \
2720
  ../../include/cstopwatch.h \
2776 2721
  ../../include/regmacros.h \
2722
  ../../include/platdep/platdefs.h \
2723
  ../../include/clockedmsgheap.h \
2777 2724
  ../../include/cnamedobject.h \
2725
  ../../include/catomicopsdebug.h \
2778 2726
  ../../include/cexpression.h \
2727
  ../../include/simtime.h \
2728
  ../../include/cstringparimpl.h \
2729
  ../../include/cenvir.h \
2730
  ../../include/simtime_t.h \
2779 2731
  ../../include/ccomponent.h \
2780 2732
  ../../include/platdep/timeutil.h \
2781 2733
  ../../include/cdynamicexpression.h \
2734
  ../../include/opp_string.h \
2735
  ../../include/simkerneldefs.h \
2782 2736
  ../../include/cthreadpool.h \
2737
  ../../include/csimulation.h \
2783 2738
  ../../include/errmsg.h \
2784 2739
  ../../include/cownedobject.h \
2740
  ../../include/cobject.h \
2785 2741
  ../../include/clistener.h \
2742
  ../../include/cdummystringpool.h \
2743
  ../../include/cstringpool.h \
2786 2744
  ../../include/cscheduler.h \
2787 2745
  ../../include/cpar.h \
2746
  ../../include/ctaskheap.h \
2747
  ../../include/cdefaultlist.h \
2748
  ../../include/cparimpl.h \
2788 2749
  ../../include/cvisitor.h \
2789 2750
  ../../include/cttaslock.h \
2790 2751
  ../../include/cpthreadlock.h \
2791 2752
  ../../include/cnolock.h \
2792 2753
  ../../include/platdep/platmisc.h \
2754
  ../../include/cmessageheap.h \
2755
  ../../include/simutil.h \
2793 2756
  ../../include/cexception.h \
2794
  ../../include/platdep/intxtypes.h \
2795
  ../../include/cstopwatch.h \
2757
  ../../include/platdep/intxtypes.h
2758
$O/cstringtokenizer.o: cstringtokenizer.cc \
2796 2759
  ../../include/platdep/platdefs.h \
2797
  ../../include/clockedmsgheap.h \
2798
  ../../include/catomicopsdebug.h \
2799 2760
  ../../include/simtime.h \
2800
  ../../include/cstringparimpl.h \
2801
  ../../include/cenvir.h \
2802 2761
  ../../include/simtime_t.h \
2762
  ../../include/cstringtokenizer.h \
2803 2763
  ../../include/opp_string.h \
2804 2764
  ../../include/simkerneldefs.h \
2805
  ../../include/csimulation.h \
2806
  ../../include/cobject.h \
2807
  ../../include/cdummystringpool.h \
2808
  ../../include/cstringpool.h \
2809
  ../../include/ctaskheap.h \
2810
  ../../include/cdefaultlist.h \
2811
  ../../include/cparimpl.h \
2812
  ../../include/cmessageheap.h \
2813
  ../../include/simutil.h
2814
$O/cstringtokenizer.o: cstringtokenizer.cc \
2815 2765
  ../../include/errmsg.h \
2816 2766
  ../../include/platdep/platmisc.h \
2767
  ../../include/simutil.h \
2817 2768
  ../../include/cexception.h \
2818
  ../../include/platdep/intxtypes.h \
2819
  ../../include/platdep/platdefs.h \
2820
  ../../include/simtime.h \
2821
  ../../include/simtime_t.h \
2822
  ../../include/cstringtokenizer.h \
2823
  ../../include/opp_string.h \
2824
  ../../include/simkerneldefs.h \
2825
  ../../include/simutil.h
2769
  ../../include/platdep/intxtypes.h
2826 2770
$O/ctaskheap.o: ctaskheap.cc \
2771
  ../../include/cstopwatch.h \
2827 2772
  ../../include/regmacros.h \
2773
  ../../include/platdep/platdefs.h \
2774
  ../../include/cmathfunction.h \
2775
  ../../include/clockedmsgheap.h \
2776
  ../../include/catomicopsdebug.h \
2828 2777
  ../../include/cnamedobject.h \
2778
  ../../include/simtime.h \
2779
  ../../include/carray.h \
2780
  ../../include/simtime_t.h \
2781
  ../../include/cmsgpar.h \
2829 2782
  ../../include/cregistrationlist.h \
2830 2783
  ../../include/platdep/timeutil.h \
2784
  ../../include/opp_string.h \
2785
  ../../include/simkerneldefs.h \
2831 2786
  ../../include/cthreadpool.h \
2787
  ../../include/csimulation.h \
2832 2788
  ../../include/errmsg.h \
2833 2789
  ../../include/cownedobject.h \
2834 2790
  ../../include/cmessage.h \
2835 2791
  ../../include/onstartup.h \
2792
  ../../include/cobject.h \
2793
  ../../include/cdummystringpool.h \
2794
  ../../include/cstringpool.h \
2836 2795
  ../../include/cscheduler.h \
2837 2796
  ../../include/globals.h \
2797
  ../../include/ctaskheap.h \
2838 2798
  ../../include/cvisitor.h \
2839 2799
  ../../include/cttaslock.h \
2840 2800
  ../../include/cpthreadlock.h \
2841 2801
  ../../include/cobjectfactory.h \
2842 2802
  ../../include/cnolock.h \
2843 2803
  ../../include/platdep/platmisc.h \
2804
  ../../include/cmessageheap.h \
2805
  ../../include/simutil.h \
2844 2806
  ../../include/cexception.h \
2845
  ../../include/platdep/intxtypes.h \
2807
  ../../include/platdep/intxtypes.h
2808
$O/ctaskring.o: ctaskring.cc \
2846 2809
  ../../include/cstopwatch.h \
2810
  ../../include/regmacros.h \
2847 2811
  ../../include/platdep/platdefs.h \
2848 2812
  ../../include/cmathfunction.h \
2849 2813
  ../../include/clockedmsgheap.h \
2814
  ../../include/cnamedobject.h \
2850 2815
  ../../include/catomicopsdebug.h \
2851 2816
  ../../include/simtime.h \
2852 2817
  ../../include/carray.h \
2853 2818
  ../../include/simtime_t.h \
2854 2819
  ../../include/cmsgpar.h \
2820
  ../../include/cregistrationlist.h \
2821
  ../../include/platdep/timeutil.h \
2855 2822
  ../../include/opp_string.h \
2856 2823
  ../../include/simkerneldefs.h \
2824
  ../../include/cthreadpool.h \
2857 2825
  ../../include/csimulation.h \
2826
  ../../include/errmsg.h \
2827
  ../../include/cownedobject.h \
2828
  ../../include/cmessage.h \
2829
  ../../include/onstartup.h \
2858 2830
  ../../include/cobject.h \
2831
  ../../include/ctaskring.h \
2859 2832
  ../../include/cdummystringpool.h \
2860 2833
  ../../include/cstringpool.h \
2834
  ../../include/cscheduler.h \
2835
  ../../include/globals.h \
2861 2836
  ../../include/ctaskheap.h \
2862
  ../../include/cmessageheap.h \
2863
  ../../include/simutil.h
2864
$O/ctaskring.o: ctaskring.cc \
2865
  ../../include/regmacros.h \
2866
  ../../include/cnamedobject.h \
2867
  ../../include/cregistrationlist.h \
2868
  ../../include/platdep/timeutil.h \
2869
  ../../include/cthreadpool.h \
2870
  ../../include/errmsg.h \
2871
  ../../include/cownedobject.h \
2872
  ../../include/cmessage.h \
2873
  ../../include/onstartup.h \
2874
  ../../include/ctaskring.h \
2875
  ../../include/cscheduler.h \
2876
  ../../include/globals.h \
2877 2837
  ../../include/cvisitor.h \
2878 2838
  ../../include/cttaslock.h \
2879 2839
  ../../include/cpthreadlock.h \
2880 2840
  ../../include/cobjectfactory.h \
2881 2841
  ../../include/cnolock.h \
2882 2842
  ../../include/platdep/platmisc.h \
2843
  ../../include/cmessageheap.h \
2844
  ../../include/simutil.h \
2883 2845
  ../../include/cexception.h \
2884
  ../../include/platdep/intxtypes.h \
2846
  ../../include/platdep/intxtypes.h
2847
$O/cthreadpool.o: cthreadpool.cc \
2885 2848
  ../../include/cstopwatch.h \
2849
  ../../include/regmacros.h \
2886 2850
  ../../include/platdep/platdefs.h \
2887 2851
  ../../include/cmathfunction.h \
2888
  ../../include/clockedmsgheap.h \
2852
  ../../include/cnamedobject.h \
2889 2853
  ../../include/catomicopsdebug.h \
2854
  ../../include/clockedmsgheap.h \
2890 2855
  ../../include/simtime.h \
2891 2856
  ../../include/carray.h \
2892 2857
  ../../include/simtime_t.h \
2858
  ../../include/sysdep.h \
2859
  ../../include/cenvir.h \
2893 2860
  ../../include/cmsgpar.h \
2894
  ../../include/opp_string.h \
2895
  ../../include/simkerneldefs.h \
2896
  ../../include/csimulation.h \
2897
  ../../include/cobject.h \
2898
  ../../include/cdummystringpool.h \
2899
  ../../include/cstringpool.h \
2900
  ../../include/ctaskheap.h \
2901
  ../../include/cmessageheap.h \
2902
  ../../include/simutil.h
2903
$O/cthreadpool.o: cthreadpool.cc \
2904
  ../../include/regmacros.h \
2905
  ../../include/cexpression.h \
2906
  ../../include/cnamedobject.h \
2907
  ../../include/ccomponent.h \
2861
  ../../include/cconfigoption.h \
2908 2862
  ../../include/cregistrationlist.h \
2909 2863
  ../../include/platdep/timeutil.h \
2910 2864
  ../../include/cconfiguration.h \
2865
  ../../include/opp_string.h \
2866
  ../../include/simkerneldefs.h \
2911 2867
  ../../include/cthreadpool.h \
2868
  ../../include/csimulation.h \
2912 2869
  ../../include/errmsg.h \
2913 2870
  ../../include/cownedobject.h \
2914 2871
  ../../include/cmessage.h \
2915 2872
  ../../include/onstartup.h \
2916
  ../../include/clistener.h \
2917
  ../../include/cscheduler.h \
2918
  ../../include/cpar.h \
2919
  ../../include/globals.h \
2920
  ../../include/casyncmodule.h \
2921
  ../../include/cvisitor.h \
2922
  ../../include/cttaslock.h \
2923
  ../../include/cpthreadlock.h \
2924
  ../../include/csimplemodule.h \
2925
  ../../include/cobjectfactory.h \
2926
  ../../include/cnolock.h \
2927
  ../../include/cmodule.h \
2928
  ../../include/platdep/platmisc.h \
2929
  ../../include/cexception.h \
2930
  ../../include/cbarriermessage.h \
2931
  ../../include/platdep/intxtypes.h \
2932
  ../../include/cstopwatch.h \
2933
  ../../include/platdep/platdefs.h \
2934
  ../../include/cmathfunction.h \
2935
  ../../include/clockedmsgheap.h \
2936
  ../../include/catomicopsdebug.h \
2937
  ../../include/cgate.h \
2938
  ../../include/simtime.h \
2939
  ../../include/carray.h \
2940
  ../../include/cenvir.h \
2941
  ../../include/simtime_t.h \
2942
  ../../include/sysdep.h \
2943
  ../../include/cmsgpar.h \
2944
  ../../include/cnumgen.h \
2945
  ../../include/cconfigoption.h \
2946
  ../../include/opp_string.h \
2947
  ../../include/simkerneldefs.h \
2948
  ../../include/random.h \
2949
  ../../include/csimulation.h \
2950 2873
  ../../include/cobject.h \
2951 2874
  ../../include/cdummystringpool.h \
2952 2875
  ../../include/cstringpool.h \
2876
  ../../include/cscheduler.h \
2877
  ../../include/globals.h \
2953 2878
  ../../include/ctaskheap.h \
2954 2879
  ../../include/cdefaultlist.h \
2955
  ../../include/crng.h \
2956
  ../../include/cmessageheap.h \
2957
  ../../include/simutil.h
2958
$O/ctimestampedvalue.o: ctimestampedvalue.cc \
2959
  ../../include/regmacros.h \
2960
  ../../include/ctimestampedvalue.h \
2961
  ../../include/cnamedobject.h \
2962
  ../../include/platdep/timeutil.h \
2963
  ../../include/cthreadpool.h \
2964
  ../../include/errmsg.h \
2965
  ../../include/cownedobject.h \
2966
  ../../include/clistener.h \
2967
  ../../include/cscheduler.h \
2968 2880
  ../../include/cvisitor.h \
2969 2881
  ../../include/cpthreadlock.h \
2970 2882
  ../../include/cttaslock.h \
2883
  ../../include/cobjectfactory.h \
2971 2884
  ../../include/cnolock.h \
2972 2885
  ../../include/platdep/platmisc.h \
2886
  ../../include/simutil.h \
2973 2887
  ../../include/cexception.h \
2974
  ../../include/platdep/intxtypes.h \
2888
  ../../include/cmessageheap.h \
2889
  ../../include/cbarriermessage.h \
2890
  ../../include/platdep/intxtypes.h
2891
$O/ctimestampedvalue.o: ctimestampedvalue.cc \
2975 2892
  ../../include/cstopwatch.h \
2893
  ../../include/regmacros.h \
2894
  ../../include/ctimestampedvalue.h \
2976 2895
  ../../include/platdep/platdefs.h \
2977 2896
  ../../include/clockedmsgheap.h \
2978 2897
  ../../include/catomicopsdebug.h \
2898
  ../../include/cnamedobject.h \
2979 2899
  ../../include/simtime.h \
2980 2900
  ../../include/simtime_t.h \
2901
  ../../include/platdep/timeutil.h \
2981 2902
  ../../include/opp_string.h \
2982 2903
  ../../include/simkerneldefs.h \
2983
  ../../include/csimulation.h \
2984
  ../../include/cobject.h \
2985
  ../../include/cdummystringpool.h \
2986
  ../../include/cstringpool.h \
2987
  ../../include/ctaskheap.h \
2988
  ../../include/cmessageheap.h \
2989
  ../../include/simutil.h
2990
$O/ctopology.o: ctopology.cc \
2991
  ../../include/regmacros.h \
2992
  ../../include/cnamedobject.h \
2993
  ../../include/cexpression.h \
2994
  ../../include/ccomponent.h \
2995
  ../../include/cproperties.h \
2996
  ../../include/cregistrationlist.h \
2997
  ../../include/platdep/timeutil.h \
2998 2904
  ../../include/cthreadpool.h \
2999
  ../../include/ccommbuffer.h \
3000 2905
  ../../include/errmsg.h \
2906
  ../../include/csimulation.h \
3001 2907
  ../../include/cownedobject.h \
3002
  ../../include/onstartup.h \
2908
  ../../include/cobject.h \
3003 2909
  ../../include/clistener.h \
2910
  ../../include/cdummystringpool.h \
2911
  ../../include/cstringpool.h \
3004 2912
  ../../include/cscheduler.h \
3005
  ../../include/cpar.h \
3006
  ../../include/globals.h \
2913
  ../../include/ctaskheap.h \
3007 2914
  ../../include/cvisitor.h \
3008 2915
  ../../include/cttaslock.h \
3009 2916
  ../../include/cpthreadlock.h \
3010
  ../../include/cobjectfactory.h \
3011 2917
  ../../include/cnolock.h \
3012
  ../../include/cmodule.h \
3013 2918
  ../../include/platdep/platmisc.h \
2919
  ../../include/cmessageheap.h \
3014 2920
  ../../include/cexception.h \
3015
  ../../include/ctopology.h \
3016
  ../../include/platdep/intxtypes.h \
2921
  ../../include/simutil.h \
2922
  ../../include/platdep/intxtypes.h
2923
$O/ctopology.o: ctopology.cc \
2924
  ../../include/regmacros.h \
3017 2925
  ../../include/cstopwatch.h \
3018 2926
  ../../include/platdep/platdefs.h \
2927
  ../../include/cnamedobject.h \
3019 2928
  ../../include/catomicopsdebug.h \
3020 2929
  ../../include/clockedmsgheap.h \
2930
  ../../include/cexpression.h \
3021 2931
  ../../include/cgate.h \
3022 2932
  ../../include/simtime.h \
3023 2933
  ../../include/simtime_t.h \
3024 2934
  ../../include/cenvir.h \
3025
  ../../include/opp_string.h \
3026
  ../../include/simkerneldefs.h \
3027
  ../../include/csimulation.h \
3028
  ../../include/cobject.h \
3029
  ../../include/cdummystringpool.h \
3030
  ../../include/cstringpool.h \
3031
  ../../include/ctaskheap.h \
3032
  ../../include/cdefaultlist.h \
3033
  ../../include/simutil.h \
3034
  ../../include/cmessageheap.h \
3035
  ../../include/cproperty.h
3036
$O/cvarhist.o: cvarhist.cc \
3037
  ../../include/regmacros.h \
3038
  ../../include/distrib.h \
3039
  ../../include/cexpression.h \
3040
  ../../include/cnamedobject.h \
3041 2935
  ../../include/ccomponent.h \
2936
  ../../include/cproperties.h \
3042 2937
  ../../include/cregistrationlist.h \
3043 2938
  ../../include/platdep/timeutil.h \
3044
  ../../include/cconfiguration.h \
2939
  ../../include/opp_string.h \
2940
  ../../include/simkerneldefs.h \
3045 2941
  ../../include/cthreadpool.h \
3046 2942
  ../../include/ccommbuffer.h \
2943
  ../../include/csimulation.h \
3047 2944
  ../../include/errmsg.h \
3048 2945
  ../../include/cownedobject.h \
2946
  ../../include/cobject.h \
3049 2947
  ../../include/onstartup.h \
3050 2948
  ../../include/clistener.h \
3051
  ../../include/cvarhist.h \
2949
  ../../include/cdummystringpool.h \
2950
  ../../include/cstringpool.h \
3052 2951
  ../../include/cscheduler.h \
3053 2952
  ../../include/cpar.h \
3054 2953
  ../../include/globals.h \
2954
  ../../include/ctaskheap.h \
2955
  ../../include/cdefaultlist.h \
3055 2956
  ../../include/cvisitor.h \
3056
  ../../include/cttaslock.h \
3057 2957
  ../../include/cpthreadlock.h \
2958
  ../../include/cttaslock.h \
3058 2959
  ../../include/cobjectfactory.h \
3059 2960
  ../../include/cnolock.h \
3060 2961
  ../../include/cmodule.h \
3061 2962
  ../../include/platdep/platmisc.h \
2963
  ../../include/simutil.h \
2964
  ../../include/cmessageheap.h \
3062 2965
  ../../include/cexception.h \
3063
  ../../include/platdep/intxtypes.h \
2966
  ../../include/cproperty.h \
2967
  ../../include/ctopology.h \
2968
  ../../include/platdep/intxtypes.h
2969
$O/cvarhist.o: cvarhist.cc \
3064 2970
  ../../include/cstopwatch.h \
2971
  ../../include/regmacros.h \
3065 2972
  ../../include/platdep/platdefs.h \
2973
  ../../include/distrib.h \
3066 2974
  ../../include/clockedmsgheap.h \
2975
  ../../include/cexpression.h \
3067 2976
  ../../include/catomicopsdebug.h \
2977
  ../../include/cnamedobject.h \
3068 2978
  ../../include/cgate.h \
3069 2979
  ../../include/simtime.h \
3070 2980
  ../../include/cenvir.h \
3071 2981
  ../../include/simtime_t.h \
2982
  ../../include/ccomponent.h \
3072 2983
  ../../include/cstatistic.h \
3073 2984
  ../../include/cconfigoption.h \
2985
  ../../include/cregistrationlist.h \
2986
  ../../include/platdep/timeutil.h \
2987
  ../../include/cconfiguration.h \
3074 2988
  ../../include/opp_string.h \
3075 2989
  ../../include/simkerneldefs.h \
2990
  ../../include/cthreadpool.h \
2991
  ../../include/ccommbuffer.h \
3076 2992
  ../../include/random.h \
3077 2993
  ../../include/csimulation.h \
2994
  ../../include/errmsg.h \
3078 2995
  ../../include/chistogram.h \
2996
  ../../include/cownedobject.h \
2997
  ../../include/onstartup.h \
3079 2998
  ../../include/cobject.h \
2999
  ../../include/clistener.h \
3080 3000
  ../../include/cdummystringpool.h \
3001
  ../../include/cvarhist.h \
3081 3002
  ../../include/cstringpool.h \
3003
  ../../include/cscheduler.h \
3004
  ../../include/cpar.h \
3005
  ../../include/globals.h \
3082 3006
  ../../include/ctaskheap.h \
3083 3007
  ../../include/cdensityestbase.h \
3084 3008
  ../../include/cdefaultlist.h \
3009
  ../../include/cvisitor.h \
3010
  ../../include/cttaslock.h \
3011
  ../../include/cpthreadlock.h \
3012
  ../../include/cobjectfactory.h \
3085 3013
  ../../include/cstddev.h \
3014
  ../../include/cnolock.h \
3086 3015
  ../../include/crng.h \
3016
  ../../include/cmodule.h \
3017
  ../../include/platdep/platmisc.h \
3087 3018
  ../../include/cmessageheap.h \
3088
  ../../include/simutil.h
3019
  ../../include/simutil.h \
3020
  ../../include/cexception.h \
3021
  ../../include/platdep/intxtypes.h
3089 3022
$O/cvisitor.o: cvisitor.cc \
3090 3023
  ../../include/regmacros.h \
3091
  ../../include/errmsg.h \
3092
  ../../include/cvisitor.h \
3093
  ../../include/platdep/platmisc.h \
3094
  ../../include/platdep/intxtypes.h \
3095 3024
  ../../include/platdep/platdefs.h \
3096 3025
  ../../include/simkerneldefs.h \
3097
  ../../include/cobject.h \
3098
  ../../include/simutil.h
3099
$O/cwatch.o: cwatch.cc \
3100
  ../../include/regmacros.h \
3101
  ../../include/cnamedobject.h \
3102 3026
  ../../include/errmsg.h \
3103
  ../../include/cownedobject.h \
3027
  ../../include/cobject.h \
3104 3028
  ../../include/cvisitor.h \
3105 3029
  ../../include/platdep/platmisc.h \
3106
  ../../include/cexception.h \
3107
  ../../include/platdep/intxtypes.h \
3030
  ../../include/simutil.h \
3031
  ../../include/platdep/intxtypes.h
3032
$O/cwatch.o: cwatch.cc \
3033
  ../../include/regmacros.h \
3108 3034
  ../../include/platdep/platdefs.h \
3109 3035
  ../../include/cwatch.h \
3036
  ../../include/cnamedobject.h \
3110 3037
  ../../include/catomicopsdebug.h \
3111 3038
  ../../include/simtime.h \
3112 3039
  ../../include/simtime_t.h \
3113 3040
  ../../include/opp_string.h \
3114 3041
  ../../include/simkerneldefs.h \
3042
  ../../include/errmsg.h \
3043
  ../../include/cownedobject.h \
3115 3044
  ../../include/cobject.h \
3116 3045
  ../../include/cdummystringpool.h \
3117 3046
  ../../include/cstringpool.h \
3118
  ../../include/simutil.h
3119
$O/cxmlelement.o: cxmlelement.cc \
3120
  ../../include/regmacros.h \
3121
  ../../include/cexpression.h \
3122
  ../../include/cnamedobject.h \
3123
  ../../include/ccomponent.h \
3124
  ../../include/cregistrationlist.h \
3125
  ../../include/platdep/timeutil.h \
3126
  ../../include/cthreadpool.h \
3127
  ../../include/errmsg.h \
3128
  ../../include/cownedobject.h \
3129
  ../../include/onstartup.h \
3130
  ../../include/clistener.h \
3131
  ../../include/cscheduler.h \
3132
  ../../include/cpar.h \
3133
  ../../include/globals.h \
3134 3047
  ../../include/cvisitor.h \
3135
  ../../include/cpthreadlock.h \
3136
  ../../include/cttaslock.h \
3137
  ../../include/cobjectfactory.h \
3138
  ../../include/cnolock.h \
3139 3048
  ../../include/platdep/platmisc.h \
3140
  ../../include/cmodule.h \
3141 3049
  ../../include/cexception.h \
3142
  ../../include/platdep/intxtypes.h \
3050
  ../../include/simutil.h \
3051
  ../../include/platdep/intxtypes.h
3052
$O/cxmlelement.o: cxmlelement.cc \
3143 3053
  ../../include/cstopwatch.h \
3054
  ../../include/regmacros.h \
3144 3055
  minixpath.h \
3145 3056
  ../../include/platdep/platdefs.h \
3057
  ../../include/cexpression.h \
3146 3058
  ../../include/clockedmsgheap.h \
3147 3059
  ../../include/catomicopsdebug.h \
3060
  ../../include/cnamedobject.h \
3148 3061
  ../../include/cgate.h \
3149 3062
  ../../include/simtime.h \
3150 3063
  ../../include/simtime_t.h \
3151 3064
  ../../include/cenvir.h \
3152
  ../../include/opp_string.h \
3153
  ../../include/simkerneldefs.h \
3154
  ../../include/csimulation.h \
3155
  ../../include/cobject.h \
3156
  ../../include/cdummystringpool.h \
3157
  ../../include/cstringpool.h \
3158
  ../../include/ctaskheap.h \
3159
  ../../include/cdefaultlist.h \
3160
  ../../include/cxmlelement.h \
3161
  ../../include/cmessageheap.h \
3162
  ../../include/simutil.h
3163
$O/cxmlparimpl.o: cxmlparimpl.cc \
3164
  ../../include/regmacros.h \
3165
  ../../include/cnamedobject.h \
3166
  ../../include/cexpression.h \
3167 3065
  ../../include/ccomponent.h \
3066
  ../../include/cregistrationlist.h \
3168 3067
  ../../include/platdep/timeutil.h \
3169
  ../../include/cdynamicexpression.h \
3068
  ../../include/opp_string.h \
3069
  ../../include/simkerneldefs.h \
3170 3070
  ../../include/cthreadpool.h \
3171 3071
  ../../include/errmsg.h \
3072
  ../../include/csimulation.h \
3172 3073
  ../../include/cownedobject.h \
3074
  ../../include/onstartup.h \
3075
  ../../include/cobject.h \
3173 3076
  ../../include/clistener.h \
3077
  ../../include/cdummystringpool.h \
3078
  ../../include/cstringpool.h \
3174 3079
  ../../include/cscheduler.h \
3175 3080
  ../../include/cpar.h \
3081
  ../../include/globals.h \
3082
  ../../include/ctaskheap.h \
3083
  ../../include/cdefaultlist.h \
3176 3084
  ../../include/cvisitor.h \
3177
  ../../include/cpthreadlock.h \
3178 3085
  ../../include/cttaslock.h \
3086
  ../../include/cpthreadlock.h \
3087
  ../../include/cobjectfactory.h \
3179 3088
  ../../include/cnolock.h \
3089
  ../../include/cxmlelement.h \
3180 3090
  ../../include/platdep/platmisc.h \
3091
  ../../include/cmodule.h \
3092
  ../../include/cmessageheap.h \
3093
  ../../include/simutil.h \
3181 3094
  ../../include/cexception.h \
3182
  ../../include/platdep/intxtypes.h \
3095
  ../../include/platdep/intxtypes.h
3096
$O/cxmlparimpl.o: cxmlparimpl.cc \
3183 3097
  ../../include/cstopwatch.h \
3098
  ../../include/regmacros.h \
3184 3099
  ../../include/platdep/platdefs.h \
3185 3100
  ../../include/clockedmsgheap.h \
3101
  ../../include/cnamedobject.h \
3186 3102
  ../../include/catomicopsdebug.h \
3103
  ../../include/cexpression.h \
3187 3104
  ../../include/simtime.h \
3188 3105
  ../../include/cenvir.h \
3189 3106
  ../../include/simtime_t.h \
3107
  ../../include/ccomponent.h \
3190 3108
  ../../include/cstringtokenizer.h \
3109
  ../../include/platdep/timeutil.h \
3110
  ../../include/cdynamicexpression.h \
3191 3111
  ../../include/opp_string.h \
3192 3112
  ../../include/simkerneldefs.h \
3113
  ../../include/cthreadpool.h \
3193 3114
  ../../include/csimulation.h \
3115
  ../../include/errmsg.h \
3116
  ../../include/cownedobject.h \
3194 3117
  ../../include/cobject.h \
3118
  ../../include/clistener.h \
3195 3119
  ../../include/cdummystringpool.h \
3196 3120
  ../../include/cstringpool.h \
3121
  ../../include/cscheduler.h \
3122
  ../../include/cpar.h \
3197 3123
  ../../include/ctaskheap.h \
3198 3124
  ../../include/cdefaultlist.h \
3199 3125
  ../../include/cxmlparimpl.h \
3200 3126
  ../../include/cparimpl.h \
3201
  ../../include/cxmlelement.h \
3202
  ../../include/cmessageheap.h \
3203
  ../../include/simutil.h
3204
$O/distrib.o: distrib.cc \
3205
  ../../include/regmacros.h \
3206
  ../../include/distrib.h \
3207
  ../../include/cexpression.h \
3208
  ../../include/cnamedobject.h \
3209
  ../../include/ccomponent.h \
3210
  ../../include/cregistrationlist.h \
3211
  ../../include/platdep/timeutil.h \
3212
  ../../include/cconfiguration.h \
3213
  ../../include/cthreadpool.h \
3214
  ../../include/errmsg.h \
3215
  ../../include/cownedobject.h \
3216
  ../../include/onstartup.h \
3217
  ../../include/clistener.h \
3218
  ../../include/cscheduler.h \
3219
  ../../include/cpar.h \
3220
  ../../include/globals.h \
3221 3127
  ../../include/cvisitor.h \
3222
  ../../include/cpthreadlock.h \
3223 3128
  ../../include/cttaslock.h \
3224
  ../../include/cobjectfactory.h \
3129
  ../../include/cpthreadlock.h \
3225 3130
  ../../include/cnolock.h \
3131
  ../../include/cxmlelement.h \
3226 3132
  ../../include/platdep/platmisc.h \
3227
  ../../include/cmodule.h \
3133
  ../../include/cmessageheap.h \
3134
  ../../include/simutil.h \
3228 3135
  ../../include/cexception.h \
3229
  ../../include/platdep/intxtypes.h \
3136
  ../../include/platdep/intxtypes.h
3137
$O/distrib.o: distrib.cc \
3230 3138
  ../../include/cstopwatch.h \
3139
  ../../include/regmacros.h \
3231 3140
  ../../include/platdep/platdefs.h \
3232 3141
  ../../include/cmathfunction.h \
3142
  ../../include/distrib.h \
3143
  ../../include/cexpression.h \
3233 3144
  ../../include/clockedmsgheap.h \
3234 3145
  ../../include/catomicopsdebug.h \
3146
  ../../include/cnamedobject.h \
3235 3147
  ../../include/simtime.h \
3236 3148
  ../../include/cgate.h \
3237 3149
  ../../include/simtime_t.h \
3238 3150
  ../../include/cenvir.h \
3151
  ../../include/ccomponent.h \
3239 3152
  ../../include/cconfigoption.h \
3153
  ../../include/cregistrationlist.h \
3154
  ../../include/platdep/timeutil.h \
3155
  ../../include/cconfiguration.h \
3240 3156
  ../../include/opp_string.h \
3241 3157
  ../../include/simkerneldefs.h \
3242 3158
  ../../include/random.h \
3243
  ../../include/csimulation.h \
3244
  ../../include/cobject.h \
3245
  ../../include/cdummystringpool.h \
3246
  ../../include/cstringpool.h \
3247
  ../../include/ctaskheap.h \
3248
  ../../include/cdefaultlist.h \
3249
  ../../include/crng.h \
3250
  ../../include/cmessageheap.h \
3251
  ../../include/simutil.h
3252
$O/errmsg.o: errmsg.cc \
3253
  ../../include/errmsg.h \
3254
  ../../include/platdep/intxtypes.h \
3255
  ../../include/platdep/platdefs.h \
3256
  ../../include/simkerneldefs.h
3257
$O/expr.tab.o: expr.tab.cc \
3258
  ../../include/regmacros.h \
3259
  ../../include/cnamedobject.h \
3260
  ../../include/cexpression.h \
3261
  ../../include/cregistrationlist.h \
3262
  ../../include/platdep/timeutil.h \
3263
  ../../include/cdynamicexpression.h \
3264
  ../../include/nedsupport.h \
3265 3159
  ../../include/cthreadpool.h \
3266 3160
  ../../include/errmsg.h \
3161
  ../../include/csimulation.h \
3267 3162
  ../../include/cownedobject.h \
3268 3163
  ../../include/onstartup.h \
3164
  ../../include/cobject.h \
3165
  ../../include/clistener.h \
3166
  ../../include/cdummystringpool.h \
3167
  ../../include/cstringpool.h \
3269 3168
  ../../include/cscheduler.h \
3270 3169
  ../../include/cpar.h \
3271 3170
  ../../include/globals.h \
3171
  ../../include/ctaskheap.h \
3172
  ../../include/cdefaultlist.h \
3272 3173
  ../../include/cvisitor.h \
3273 3174
  ../../include/cpthreadlock.h \
3274 3175
  ../../include/cttaslock.h \
3275 3176
  ../../include/cobjectfactory.h \
3276 3177
  ../../include/cnolock.h \
3178
  ../../include/crng.h \
3179
  ../../include/cmodule.h \
3277 3180
  ../../include/platdep/platmisc.h \
3181
  ../../include/simutil.h \
3182
  ../../include/cmessageheap.h \
3278 3183
  ../../include/cexception.h \
3279
  ../../include/platdep/intxtypes.h \
3184
  ../../include/platdep/intxtypes.h
3185
$O/errmsg.o: errmsg.cc \
3186
  ../../include/platdep/platdefs.h \
3187
  ../../include/simkerneldefs.h \
3188
  ../../include/errmsg.h \
3189
  ../../include/platdep/intxtypes.h
3190
$O/expr.tab.o: expr.tab.cc \
3280 3191
  ../../include/cstopwatch.h \
3192
  ../../include/regmacros.h \
3281 3193
  ../../include/platdep/platdefs.h \
3282 3194
  expryydefs.h \
3283 3195
  ../../include/cmathfunction.h \
3284 3196
  ../../include/clockedmsgheap.h \
3197
  ../../include/cnamedobject.h \
3285 3198
  ../../include/catomicopsdebug.h \
3199
  ../../include/cexpression.h \
3286 3200
  ../../include/simtime.h \
3287 3201
  ../../include/cenvir.h \
3288 3202
  ../../include/simtime_t.h \
3203
  ../../include/cregistrationlist.h \
3204
  ../../include/platdep/timeutil.h \
3205
  ../../include/cdynamicexpression.h \
3289 3206
  ../../include/opp_string.h \
3207
  ../../include/nedsupport.h \
3290 3208
  ../../include/simkerneldefs.h \
3209
  ../../include/cthreadpool.h \
3291 3210
  ../../include/csimulation.h \
3211
  ../../include/errmsg.h \
3212
  ../../include/cownedobject.h \
3213
  ../../include/onstartup.h \
3292 3214
  ../../include/cobject.h \
3293 3215
  ../../include/cnedfunction.h \
3294 3216
  ../../include/cdummystringpool.h \
3295 3217
  ../../include/cstringpool.h \
3296
  ../../include/ctaskheap.h \
3297
  ../../include/cxmlelement.h \
3298
  ../../include/cmessageheap.h \
3299
  ../../include/simutil.h
3300
$O/globals.o: globals.cc \
3301
  ../../include/regmacros.h \
3302
  ../../include/cexpression.h \
3303
  ../../include/cnamedobject.h \
3304
  ../../include/cregistrationlist.h \
3305
  ../../include/errmsg.h \
3306
  ../../include/cownedobject.h \
3307
  ../../include/onstartup.h \
3218
  ../../include/cscheduler.h \
3308 3219
  ../../include/cpar.h \
3309 3220
  ../../include/globals.h \
3221
  ../../include/ctaskheap.h \
3310 3222
  ../../include/cvisitor.h \
3223
  ../../include/cttaslock.h \
3224
  ../../include/cpthreadlock.h \
3311 3225
  ../../include/cobjectfactory.h \
3226
  ../../include/cnolock.h \
3227
  ../../include/cxmlelement.h \
3312 3228
  ../../include/platdep/platmisc.h \
3229
  ../../include/cmessageheap.h \
3230
  ../../include/simutil.h \
3313 3231
  ../../include/cexception.h \
3314
  ../../include/platdep/intxtypes.h \
3315
  ../../include/ccomponenttype.h \
3232
  ../../include/platdep/intxtypes.h
3233
$O/globals.o: globals.cc \
3234
  ../../include/regmacros.h \
3316 3235
  ../../include/platdep/platdefs.h \
3236
  ../../include/cexpression.h \
3317 3237
  ../../include/catomicopsdebug.h \
3238
  ../../include/cnamedobject.h \
3318 3239
  ../../include/cgate.h \
3319 3240
  ../../include/simtime.h \
3320 3241
  ../../include/simtime_t.h \
3242
  ../../include/cregistrationlist.h \
3321 3243
  ../../include/opp_string.h \
3322 3244
  ../../include/simkerneldefs.h \
3245
  ../../include/errmsg.h \
3246
  ../../include/cownedobject.h \
3247
  ../../include/onstartup.h \
3323 3248
  ../../include/cobject.h \
3324 3249
  ../../include/cdummystringpool.h \
3325 3250
  ../../include/cstringpool.h \
3326
  ../../include/simutil.h
3327
$O/lex.expryy.o: lex.expryy.cc \
3328
  ../../include/regmacros.h \
3329
  ../../include/cexpression.h \
3330
  ../../include/cdynamicexpression.h \
3331
  ../../include/errmsg.h \
3332
  expr.tab.hh \
3251
  ../../include/cpar.h \
3252
  ../../include/globals.h \
3333 3253
  ../../include/cvisitor.h \
3254
  ../../include/cobjectfactory.h \
3334 3255
  ../../include/platdep/platmisc.h \
3256
  ../../include/simutil.h \
3335 3257
  ../../include/cexception.h \
3336 3258
  ../../include/platdep/intxtypes.h \
3259
  ../../include/ccomponenttype.h
3260
$O/lex.expryy.o: lex.expryy.cc \
3261
  ../../include/regmacros.h \
3337 3262
  ../../include/platdep/platdefs.h \
3338 3263
  expryydefs.h \
3264
  ../../include/cexpression.h \
3339 3265
  ../../include/simtime.h \
3340 3266
  ../../include/simtime_t.h \
3267
  ../../include/cdynamicexpression.h \
3341 3268
  ../../include/opp_string.h \
3342 3269
  ../../include/simkerneldefs.h \
3270
  ../../include/errmsg.h \
3271
  expr.tab.hh \
3343 3272
  ../../include/cobject.h \
3344 3273
  ../../include/cdummystringpool.h \
3345 3274
  ../../include/cstringpool.h \
3346
  ../../include/simutil.h
3347
$O/minixpath.o: minixpath.cc \
3348
  ../../include/regmacros.h \
3349
  ../../include/cnamedobject.h \
3350
  ../../include/platdep/timeutil.h \
3351
  ../../include/cthreadpool.h \
3352
  ../../include/errmsg.h \
3353
  ../../include/cownedobject.h \
3354
  ../../include/cscheduler.h \
3355 3275
  ../../include/cvisitor.h \
3356
  ../../include/cttaslock.h \
3357
  ../../include/cpthreadlock.h \
3358
  ../../include/cnolock.h \
3359 3276
  ../../include/platdep/platmisc.h \
3277
  ../../include/simutil.h \
3360 3278
  ../../include/cexception.h \
3361
  ../../include/platdep/intxtypes.h \
3279
  ../../include/platdep/intxtypes.h
3280
$O/minixpath.o: minixpath.cc \
3281
  ../../include/regmacros.h \
3362 3282
  ../../include/cstopwatch.h \
3363 3283
  minixpath.h \
3364 3284
  ../../include/platdep/platdefs.h \
3285
  ../../include/cnamedobject.h \
3365 3286
  ../../include/catomicopsdebug.h \
3366 3287
  ../../include/clockedmsgheap.h \
3367 3288
  ../../include/simtime.h \
3368 3289
  ../../include/simtime_t.h \
3369 3290
  ../../include/cenvir.h \
3291
  ../../include/platdep/timeutil.h \
3370 3292
  ../../include/opp_string.h \
3371 3293
  ../../include/simkerneldefs.h \
3294
  ../../include/cthreadpool.h \
3372 3295
  ../../include/csimulation.h \
3296
  ../../include/errmsg.h \
3297
  ../../include/cownedobject.h \
3373 3298
  ../../include/cobject.h \
3374 3299
  ../../include/cdummystringpool.h \
3375 3300
  ../../include/cstringpool.h \
3301
  ../../include/cscheduler.h \
3376 3302
  ../../include/ctaskheap.h \
3303
  ../../include/cvisitor.h \
3304
  ../../include/cpthreadlock.h \
3305
  ../../include/cttaslock.h \
3377 3306
  ../../include/cxmlelement.h \
3307
  ../../include/cnolock.h \
3308
  ../../include/platdep/platmisc.h \
3378 3309
  ../../include/simutil.h \
3379
  ../../include/cmessageheap.h
3310
  ../../include/cmessageheap.h \
3311
  ../../include/cexception.h \
3312
  ../../include/platdep/intxtypes.h
3380 3313
$O/nedfunctions.o: nedfunctions.cc \
3314
  ../../include/cstopwatch.h \
3381 3315
  ../../include/regmacros.h \
3316
  ../../include/platdep/platdefs.h \
3317
  ../../include/cmathfunction.h \
3382 3318
  ../../include/distrib.h \
3383 3319
  ../../include/cexpression.h \
3320
  ../../include/clockedmsgheap.h \
3321
  ../../include/catomicopsdebug.h \
3384 3322
  ../../include/cnamedobject.h \
3323
  ../../include/simtime.h \
3324
  ../../include/cgate.h \
3325
  ../../include/simtime_t.h \
3326
  ../../include/cenvir.h \
3385 3327
  ../../include/ccomponent.h \
3328
  ../../include/cconfigoption.h \
3386 3329
  ../../include/cregistrationlist.h \
3330
  ../../include/cstringtokenizer.h \
3387 3331
  ../../include/cdynamicexpression.h \
3388 3332
  ../../include/platdep/timeutil.h \
3389 3333
  ../../include/cconfiguration.h \
3334
  ../../include/opp_string.h \
3335
  ../../include/simkerneldefs.h \
3336
  ../../include/random.h \
3390 3337
  ../../include/cthreadpool.h \
3391 3338
  ../../include/errmsg.h \
3339
  ../../include/csimulation.h \
3392 3340
  ../../include/cownedobject.h \
3393 3341
  ../../include/onstartup.h \
3342
  ../../include/cobject.h \
3343
  ../../include/cnedfunction.h \
3394 3344
  ../../include/clistener.h \
3345
  ../../include/cdummystringpool.h \
3346
  ../../include/cstringpool.h \
3395 3347
  ../../include/cscheduler.h \
3396 3348
  ../../include/cpar.h \
3397 3349
  ../../include/globals.h \
3350
  ../../include/ctaskheap.h \
3351
  ../../include/cdefaultlist.h \
3398 3352
  ../../include/cvisitor.h \
3399 3353
  ../../include/cpthreadlock.h \
3400 3354
  ../../include/cttaslock.h \
3401 3355
  ../../include/cobjectfactory.h \
3402 3356
  ../../include/cnolock.h \
3403
  ../../include/platdep/platmisc.h \
3357
  ../../include/crng.h \
3404 3358
  ../../include/cmodule.h \
3359
  ../../include/platdep/platmisc.h \
3360
  ../../include/simutil.h \
3361
  ../../include/cmessageheap.h \
3405 3362
  ../../include/cexception.h \
3406
  ../../include/platdep/intxtypes.h \
3363
  ../../include/platdep/intxtypes.h
3364
$O/nedsupport.o: nedsupport.cc \
3407 3365
  ../../include/cstopwatch.h \
3366
  ../../include/regmacros.h \
3408 3367
  ../../include/platdep/platdefs.h \
3409 3368
  ../../include/cmathfunction.h \
3410 3369
  ../../include/clockedmsgheap.h \
3411 3370
  ../../include/catomicopsdebug.h \
3412
  ../../include/simtime.h \
3371
  ../../include/cnamedobject.h \
3372
  ../../include/cexpression.h \
3413 3373
  ../../include/cgate.h \
3374
  ../../include/simtime.h \
3414 3375
  ../../include/simtime_t.h \
3415 3376
  ../../include/cenvir.h \
3416
  ../../include/cconfigoption.h \
3417
  ../../include/cstringtokenizer.h \
3418
  ../../include/opp_string.h \
3419
  ../../include/simkerneldefs.h \
3420
  ../../include/random.h \
3421
  ../../include/csimulation.h \
3422
  ../../include/cobject.h \
3423
  ../../include/cnedfunction.h \
3424
  ../../include/cdummystringpool.h \
3425
  ../../include/cstringpool.h \
3426
  ../../include/ctaskheap.h \
3427
  ../../include/cdefaultlist.h \
3428
  ../../include/crng.h \
3429
  ../../include/cmessageheap.h \
3430
  ../../include/simutil.h
3431
$O/nedsupport.o: nedsupport.cc \
3432
  ../../include/regmacros.h \
3433
  ../../include/cnamedobject.h \
3434
  ../../include/cexpression.h \
3435 3377
  ../../include/ccomponent.h \
3436 3378
  ../../include/cregistrationlist.h \
3437 3379
  ../../include/platdep/timeutil.h \
3438 3380
  ../../include/cdynamicexpression.h \
3381
  ../../include/opp_string.h \
3439 3382
  ../../include/nedsupport.h \
3383
  ../../include/simkerneldefs.h \
3440 3384
  ../../include/cthreadpool.h \
3385
  ../../include/csimulation.h \
3441 3386
  ../../include/errmsg.h \
3442 3387
  ../../include/cownedobject.h \
3443 3388
  ../../include/onstartup.h \
3389
  ../../include/cobject.h \
3390
  ../../include/cnedfunction.h \
3444 3391
  ../../include/clistener.h \
3392
  ../../include/cdummystringpool.h \
3393
  ../../include/cstringpool.h \
3445 3394
  ../../include/cscheduler.h \
3446 3395
  ../../include/cpar.h \
3447 3396
  ../../include/globals.h \
3397
  ../../include/ctaskheap.h \
3398
  ../../include/cdefaultlist.h \
3448 3399
  ../../include/cvisitor.h \
3449
  ../../include/cpthreadlock.h \
3450 3400
  ../../include/cttaslock.h \
3401
  ../../include/cpthreadlock.h \
3451 3402
  ../../include/cobjectfactory.h \
3452 3403
  ../../include/cnolock.h \
3404
  ../../include/cxmlelement.h \
3453 3405
  ../../include/platdep/platmisc.h \
3454 3406
  ../../include/cmodule.h \
3407
  ../../include/cmessageheap.h \
3408
  ../../include/simutil.h \
3455 3409
  ../../include/cexception.h \
3456 3410
  ../../include/platdep/intxtypes.h \
3457
  ../../include/ccomponenttype.h \
3458
  ../../include/cstopwatch.h \
3411
  ../../include/ccomponenttype.h
3412
$O/onstartup.o: onstartup.cc \
3413
  ../../include/regmacros.h \
3459 3414
  ../../include/platdep/platdefs.h \
3460
  ../../include/cmathfunction.h \
3461
  ../../include/clockedmsgheap.h \
3415
  ../../include/cnamedobject.h \
3462 3416
  ../../include/catomicopsdebug.h \
3463
  ../../include/cgate.h \
3464 3417
  ../../include/simtime.h \
3465 3418
  ../../include/simtime_t.h \
3466
  ../../include/cenvir.h \
3467 3419
  ../../include/opp_string.h \
3468 3420
  ../../include/simkerneldefs.h \
3469
  ../../include/csimulation.h \
3470
  ../../include/cobject.h \
3471
  ../../include/cnedfunction.h \
3472
  ../../include/cdummystringpool.h \
3473
  ../../include/cstringpool.h \
3474
  ../../include/ctaskheap.h \
3475
  ../../include/cdefaultlist.h \
3476
  ../../include/cxmlelement.h \
3477
  ../../include/cmessageheap.h \
3478
  ../../include/simutil.h
3479
$O/onstartup.o: onstartup.cc \
3480
  ../../include/regmacros.h \
3481
  ../../include/cnamedobject.h \
3482 3421
  ../../include/errmsg.h \
3483 3422
  ../../include/cownedobject.h \
3423
  ../../include/cobject.h \
3484 3424
  ../../include/onstartup.h \
3425
  ../../include/cdummystringpool.h \
3426
  ../../include/cstringpool.h \
3485 3427
  ../../include/cvisitor.h \
3486 3428
  ../../include/platdep/platmisc.h \
3487 3429
  ../../include/cexception.h \
3488
  ../../include/platdep/intxtypes.h \
3489
  ../../include/platdep/platdefs.h \
3490
  ../../include/catomicopsdebug.h \
3491
  ../../include/simtime.h \
3492
  ../../include/simtime_t.h \
3493
  ../../include/opp_string.h \
3494
  ../../include/simkerneldefs.h \
3495
  ../../include/cobject.h \
3496
  ../../include/cdummystringpool.h \
3497
  ../../include/cstringpool.h \
3498
  ../../include/simutil.h
3430
  ../../include/simutil.h \
3431
  ../../include/platdep/intxtypes.h
3499 3432
$O/sim_std_m.o: sim_std_m.cc \
3500 3433
  ../../include/regmacros.h \
3501 3434
  ../../include/ctimestampedvalue.h \
......
3531 3464
  ../../include/cscheduler.h \
3532 3465
  ../../include/cpar.h \
3533 3466
  ../../include/globals.h \
3534
  ../../include/casyncmodule.h \
3535 3467
  ../../include/cfsm.h \
3536 3468
  ../../include/omnetpp.h \
3537 3469
  ../../include/cvisitor.h \
......
3555 3487
  ../../include/ccoroutine.h \
3556 3488
  ../../include/cdetect.h \
3557 3489
  ../../include/platdep/platdefs.h \
3558
  ../../include/cqueue.h \
3559
  ../../include/coutvector.h \
3560 3490
  ../../include/cwatch.h \
3491
  ../../include/coutvector.h \
3492
  ../../include/cqueue.h \
3561 3493
  sim_std_m.h \
3562
  ../../include/cmathfunction.h \
3563 3494
  ../../include/cdataratechannel.h \
3564
  ../../include/clockedmsgheap.h \
3495
  ../../include/cmathfunction.h \
3565 3496
  ../../include/catomicopsdebug.h \
3497
  ../../include/clockedmsgheap.h \
3566 3498
  ../../include/cgate.h \
3567 3499
  ../../include/simtime.h \
3568 3500
  ../../include/cmodelchange.h \
......
3652 3584
  ../../include/cpar.h \
3653 3585
  ../../include/globals.h \
3654 3586
  ../../include/cvisitor.h \
3655
  ../../include/cttaslock.h \
3656 3587
  ../../include/cpthreadlock.h \
3588
  ../../include/cttaslock.h \
3657 3589
  ../../include/cmersennetwister.h \
3658 3590
  ../../include/cobjectfactory.h \
3659 3591
  ../../include/cnolock.h \
......
3737 3669
  ../../include/cgate.h \
3738 3670
  ../../include/simtime.h \
3739 3671
  ../../include/carray.h \
3740
  ../../include/simtime_t.h \
3741 3672
  ../../include/cenvir.h \
3673
  ../../include/simtime_t.h \
3742 3674
  ../../include/cmsgpar.h \
3743 3675
  ../../include/cchannel.h \
3744 3676
  ../../include/opp_string.h \
......
3751 3683
  ../../include/ctaskheap.h \
3752 3684
  ../../include/cdefaultlist.h \
3753 3685
  ../../include/cparimpl.h \
3754
  ../../include/cmessageheap.h \
3755 3686
  ../../include/simutil.h \
3687
  ../../include/cmessageheap.h \
3756 3688
  ../../include/cproperty.h
3757 3689
$O/netbuilder/cdynamicmoduletype.o: netbuilder/cdynamicmoduletype.cc \
3758 3690
  ../../include/regmacros.h \
......
3775 3707
  ../../include/globals.h \
3776 3708
  netbuilder/cnedloader.h \
3777 3709
  ../../include/cvisitor.h \
3778
  ../../include/cpthreadlock.h \
3779 3710
  ../../include/cttaslock.h \
3711
  ../../include/cpthreadlock.h \
3780 3712
  ../../include/cobjectfactory.h \
3781 3713
  ../../include/cnolock.h \
3782 3714
  ../../include/cmodule.h \
......
3802 3734
  ../../include/ctaskheap.h \
3803 3735
  ../../include/cdefaultlist.h \
3804 3736
  ../../include/cparimpl.h \
3805
  ../../include/cmessageheap.h \
3806 3737
  ../../include/simutil.h \
3738
  ../../include/cmessageheap.h \
3807 3739
  ../../include/cproperty.h
3808 3740
$O/netbuilder/cexpressionbuilder.o: netbuilder/cexpressionbuilder.cc \
3809 3741
  ../../include/regmacros.h \
......
3855 3787
  ../../include/globals.h \
3856 3788
  netbuilder/cnedloader.h \
3857 3789
  ../../include/cvisitor.h \
3858
  ../../include/cttaslock.h \
3859 3790
  ../../include/cpthreadlock.h \
3791
  ../../include/cttaslock.h \
3860 3792
  ../../include/cobjectfactory.h \
3861 3793
  ../../include/cnolock.h \
3862 3794
  ../../include/platdep/platmisc.h \
......
3912 3844
  ../../include/globals.h \
3913 3845
  netbuilder/cnedloader.h \
3914 3846
  ../../include/cvisitor.h \
3915
  ../../include/cttaslock.h \
3916 3847
  ../../include/cpthreadlock.h \
3848
  ../../include/cttaslock.h \
3917 3849
  ../../include/cobjectfactory.h \
3918 3850
  ../../include/cnolock.h \
3919 3851
  ../../include/cmodule.h \
......
3973 3905
  ../../include/globals.h \
3974 3906
  netbuilder/cnedloader.h \
3975 3907
  ../../include/cvisitor.h \
3976
  ../../include/cttaslock.h \
3977 3908
  ../../include/cpthreadlock.h \
3909
  ../../include/cttaslock.h \
3978 3910
  ../../include/cobjectfactory.h \
3979 3911
  ../../include/cnolock.h \
3980 3912
  ../../include/platdep/platmisc.h \
......
4009 3941
  ../../include/ctaskheap.h \
4010 3942
  ../../include/cdefaultlist.h \
4011 3943
  ../../include/cparimpl.h \
4012
  ../../include/simutil.h \
4013 3944
  ../../include/cmessageheap.h \
3945
  ../../include/simutil.h \
4014 3946
  ../../include/cproperty.h
4015 3947
$O/parsim/cadvlinkdelaylookahead.o: parsim/cadvlinkdelaylookahead.cc \
4016 3948
  ../../include/regmacros.h \
......
4032 3964
  ../../include/cpar.h \
4033 3965
  ../../include/globals.h \
4034 3966
  ../../include/cvisitor.h \
4035
  ../../include/cpthreadlock.h \
4036 3967
  ../../include/cttaslock.h \
3968
  ../../include/cpthreadlock.h \
4037 3969
  ../../include/cobjectfactory.h \
4038 3970
  ../../include/cnolock.h \
4039 3971
  ../../include/cmodule.h \
......
4101 4033
  ../../include/cscheduler.h \
4102 4034
  ../../include/globals.h \
4103 4035
  ../../include/cvisitor.h \
4104
  ../../include/cttaslock.h \
4105 4036
  ../../include/cpthreadlock.h \
4037
  ../../include/cttaslock.h \
4106 4038
  ../../include/cobjectfactory.h \
4107 4039
  ../../include/cnolock.h \
4108 4040
  ../../include/platdep/platmisc.h \
......
4284 4216
  ../../include/cpar.h \
4285 4217
  ../../include/globals.h \
4286 4218
  ../../include/cvisitor.h \
4287
  ../../include/cpthreadlock.h \
4288 4219
  ../../include/cttaslock.h \
4220
  ../../include/cpthreadlock.h \
4289 4221
  ../../include/cobjectfactory.h \
4290 4222
  ../../include/cnolock.h \
4291 4223
  ../../include/cmodule.h \
......
4363 4295
  ../../include/cscheduler.h \
4364 4296
  ../../include/globals.h \
4365 4297
  ../../include/cvisitor.h \
4366
  ../../include/cttaslock.h \
4367 4298
  ../../include/cpthreadlock.h \
4299
  ../../include/cttaslock.h \
4368 4300
  ../../include/cobjectfactory.h \
4369 4301
  ../../include/cnolock.h \
4370 4302
  ../../include/platdep/platmisc.h \
......
4432 4364
  ../../include/cscheduler.h \
4433 4365
  ../../include/globals.h \
4434 4366
  ../../include/cvisitor.h \
4435
  ../../include/cttaslock.h \
4436 4367
  ../../include/cpthreadlock.h \
4368
  ../../include/cttaslock.h \
4437 4369
  ../../include/cobjectfactory.h \
4438 4370
  ../../include/cnolock.h \
4439 4371
  ../../include/platdep/platmisc.h \
......
4475 4407
  ../../include/cscheduler.h \
4476 4408
  ../../include/globals.h \
4477 4409
  ../../include/cvisitor.h \
4478
  ../../include/cttaslock.h \
4479 4410
  ../../include/cpthreadlock.h \
4411
  ../../include/cttaslock.h \
4480 4412
  ../../include/cobjectfactory.h \
4481 4413
  ../../include/cnolock.h \
4482 4414
  ../../include/platdep/platmisc.h \
......
4745 4677
  ../../include/cpar.h \
4746 4678
  ../../include/globals.h \
4747 4679
  ../../include/cvisitor.h \
4748
  ../../include/cpthreadlock.h \
4749 4680
  ../../include/cttaslock.h \
4681
  ../../include/cpthreadlock.h \
4750 4682
  ../../include/cobjectfactory.h \
4751 4683
  ../../include/cnolock.h \
4752 4684
  ../../include/cmodule.h \
......
4784 4716
  ../../include/cdefaultlist.h \
4785 4717
  parsim/cnullmessageprot.h \
4786 4718
  parsim/cparsimprotocolbase.h \
4787
  ../../include/cmessageheap.h \
4788
  ../../include/simutil.h
4719
  ../../include/simutil.h \
4720
  ../../include/cmessageheap.h
4789 4721
$O/parsim/cproxygate.o: parsim/cproxygate.cc \
4790 4722
  ../../include/regmacros.h \
4791 4723
  parsim/cproxygate.h \
......
4804 4736
  ../../include/cpar.h \
4805 4737
  ../../include/globals.h \
4806 4738
  ../../include/cvisitor.h \
4807
  ../../include/cttaslock.h \
4808 4739
  ../../include/cpthreadlock.h \
4740
  ../../include/cttaslock.h \
4809 4741
  ../../include/cobjectfactory.h \
4810 4742
  ../../include/cnolock.h \
4811 4743
  ../../include/platdep/platmisc.h \
......
4856 4788
  ../../include/cownedobject.h \
4857 4789
  ../../include/cscheduler.h \
4858 4790
  ../../include/cvisitor.h \
4859
  ../../include/cttaslock.h \
4860 4791
  ../../include/cpthreadlock.h \
4792
  ../../include/cttaslock.h \
4861 4793
  ../../include/cnolock.h \
4862 4794
  ../../include/platdep/platmisc.h \
4863 4795
  ../../include/cexception.h \
src/sim/casyncmodule.cc
1
//=========================================================================
2
//  CASYNCMODULE.CC - part of
3
//
4
//                  OMNeT++/OMNEST
5
//           Discrete System Simulation in C++
6
//
7
//
8
//   Member functions of
9
//    cAsyncModule : derived class of cSimpleModule for asynchronous event handling
10
//
11
//  Author: Georg Kunz
12
//
13
//=========================================================================
14

  
15
/*--------------------------------------------------------------*
16
  Copyright (C) 2009 Georg Kunz
17

  
18
  This file is distributed WITHOUT ANY WARRANTY. See the file
19
  `license' for details on this and other legal matters.
20
*--------------------------------------------------------------*/
21

  
22
#include <cstring>
23
#include <sstream>
24
#include <stdlib.h>
25

  
26
#include "casyncmodule.h"
27
#include "cthreadpool.h"
28
#include "cconfiguration.h"
29
#include "cconfigoption.h"
30
#include "../envir/envirbase.h"
31
#include "cstringtokenizer.h"
32

  
33
Register_PerRunConfigOption(CFGID_ASYNCMODULE_PARZERODUR, "parallelize-zero-duration-events", CFG_BOOL, "false", "Parallelize Events with zero duration");
34
Register_PerObjectConfigOption(CFGID_NUM_LOCAL_RNGS, "number-local-rngs", CFG_INT, "1", "Number of RNGS per module");
35
Register_PerObjectConfigOption(CFGID_LOCAL_RNG_SEED, "local-rng-seed", CFG_STRING, "", "A whitespace seperated list of the seeds for each RNG of the corresponding module, eg '24 232 342 auto 342'");
36

  
37

  
38
cAsyncModule::cAsyncModule(const char *name, cModule *parent, unsigned stacksize) :
39
		t_end(0.0)
40
{
41
	//
42
	// find out if events with 0 durations should also be parallelized?
43
	//
44
	parZeroDur = ev.getConfig()->getAsBool(CFGID_ASYNCMODULE_PARZERODUR);
45

  
46
	//
47
	// init state flag to non-busy since no thread is active yet
48
	//
49
	AO_store(&busy, 0);
50

  
51
	//
52
	// needs to be initialized here for use during model initialization
53
	//
54
	scheduledMessageCount = 0;
55
    currentEventPriority = 0;
56

  
57
	//
58
	// initialize with the current time. This variable is already used when
59
	// scheduling events during the initialization phase of the simulation.
60
	// Hence, it needs to be initialized. However, we cannot assume 0 here since
61
	// the constructor is also called during dynamic module creation at any
62
	// point in time during the simulation.
63
	//
64
	now = simTime();
65

  
66
}
67

  
68

  
69
cAsyncModule::~cAsyncModule()
70
{
71

  
72
}
73

  
74
void cAsyncModule::initLocalRNGs()
75
{
76
    //TODO
77
    unsigned nrNumGens;
78
    unsigned long * seeds;
79

  
80
    //
81
    // how many local random number generators do we need?
82
    // default is 1
83
    //
84
    nrNumGens = ev.getConfig()->parseLong(
85
            ev.getConfig()->getPerObjectConfigValue(getFullPath().c_str(),
86
                    "number-local-rngs"), "1", 1);
87

  
88
    //
89
    // read the seeds from ini file
90
    //
91
    const char * seedString = ev.getConfig()->getPerObjectConfigValue(
92
            getFullPath().c_str(), "local-rng-seed");
93

  
94
    //
95
    // setup seeds for each RNG
96
    //
97
    seeds = new unsigned long[nrNumGens];
98
    cStringTokenizer tokenizer(seedString);
99
    const char * token = NULL;
100
    for (unsigned i = 0; i < nrNumGens; i++)
101
    {
102
        if (tokenizer.hasMoreTokens())
103
        {
104
            token = tokenizer.nextToken();
105
            if (strcmp(token, "auto") == 0)
106
            {
107
                token = NULL;
108
            }
109
        }
110

  
111
        EnvirBase* e = dynamic_cast<EnvirBase*> (&ev);
112
        if (e != NULL)
113
        {
114
            if (token)
115
            {
116
                //if the seed is set in the ini for this module, use ini-settings
117
                //with fallback to autogeneration if parsing failes
118
                seeds[i] = ev.getConfig()->parseLong(token, "",
119
                        e->getSeedGenerator()->intRand());
120
            }
121
            else
122
            {
123
                //else use SeedGenerator for automatic seed generation.
124
                seeds[i] = e->getSeedGenerator()->intRand();
125
            }
126
            token = NULL;
127
        }
128
        else
129
        {
130
            throw cRuntimeError(
131
                    "cAsyncModule: Failed to initialize Number Generator, dynamic cast to EnvirBase failed.");
132
        }
133
    }
134

  
135
    //
136
    // generate the required number of RNGs with the corresponding seeds
137
    //
138
    setupSeeds(nrNumGens,seeds);
139
    delete[] seeds;
140

  
141
}
142

  
143
void cAsyncModule::setMessageMetaData(cMessage* msg)
144
{
145
    msg->setEventDuration(SimTime::simTimeUninitialized);
146
    msg->setSchedulingOrderId(scheduledMessageCount++);
147
    msg->setParentExecutionOrderId(executionOrderId);
148
    msg->setParentStartTime(now);
149
}
150

  
151
int cAsyncModule::scheduleAt(simtime_t t, cMessage *msg)
152
{
153
    setMessageMetaData(msg);
154

  
155
    //
156
    // check current state
157
    //
158
    if (executionState == asynchronous)
159
    {
160
        if (msg==NULL)
161
          throw cRuntimeError("scheduleAt(): message pointer is NULL");
162
        if (t < t_end)
163
        	throw cRuntimeError("scheduleAt(): event cannot be scheduled at "
164
        			"%s because this precedes the end of the processing duration "
165
        			"at %s of the scheduling event.",
166
        			t.str().c_str(), t_end.str().c_str());
167

  
168
        if (t == now && currentEventPriority < msg->getSchedulingPriority()) {
169
            throw cRuntimeError("scheduleAt(): priority of scheduled Event larger than scheduling event and equal starting times => scheduling in the past");
170
        }
171
        // insert this message in the FES. When the scheduler arrives at this
172
        // message it will trigger the processing of the associated task
173
        msg->setSentFrom(this, -1, t_end);
174
        msg->setArrival(this, -1, t);
175

  
176
        simulation.msgQueue.insert(msg);
177
        return 0;
178
    }
179
    else // synch execution
180
    {
181
        return cSimpleModule::scheduleAt(t, msg);
182
    }
183
}
184

  
185

  
186
void cAsyncModule::callHandleAsyncMessage(cMessage* msg)
187
{
188
    //
189
    // set execution state
190
    //
191
    executionState = asynchronous;
192

  
193
    //
194
    // set the simtime for this event
195
    //
196
    cThreadPool::setSimTime(msg->getArrivalTime());
197
    // corresponds to setContextModule(mod);
198
    cThreadPool::setContext(this);
199
    cThreadPool::setDefaultOwner(this);
200

  
201
    //
202
    // update meta data
203
    //
204
    prepareHandleMessage(msg);
205

  
206
    //
207
    // call the actual method
208
    //
209
    handleMessage(msg);
210
}
211

  
212

  
213
void cAsyncModule::callHandleMessage(cMessage* msg)
214
{
215
    //
216
    // set execution state
217
    //
218
    executionState = synchronous;
219

  
220
    //
221
    // update meta data
222
    //
223
    prepareHandleMessage(msg);
224

  
225
    //
226
    // call the actual method
227
    //
228
    handleMessage(msg);
229
}
230

  
231

  
232
void cAsyncModule::prepareHandleMessage(cMessage* msg)
233
{
234
    //
235
    // set some internal state
236
    //
237
    t_end = msg->getArrivalTime() + msg->getEventDuration();
238
    now = msg->getArrivalTime();
239
    currentEventPriority = msg->getSchedulingPriority();
240

  
241
    //
242
    // take ownership of the message only after the test above
243
    //
244
    this->take(msg);
245

  
246
    //
247
    // reset message counter
248
    // message 0 is the barriermsg
249
    //
250
    scheduledMessageCount = 1;
251

  
252
    executionOrderId = msg->getExecutionOrderId();
253

  
254
}
255

  
256
int cAsyncModule::send(cMessage *msg, int gateid)
257
{
258
    return sendDelayed(msg, 0.0, gateid);
259
}
260

  
261

  
262
int cAsyncModule::send(cMessage *msg, const char *gatename, int sn)
263
{
264
    return sendDelayed(msg, 0.0, gatename, sn);
265
}
266

  
267

  
268
int cAsyncModule::send(cMessage *msg, cGate *outputgate)
269
{
270
    return sendDelayed(msg, 0.0, outputgate);
271
}
272

  
273

  
274
int cAsyncModule::sendDelayed(cMessage *msg, simtime_t delay, int gateid)
275
{
276
    cGate *outgate = gate(gateid);
277
    if (outgate==NULL)
278
        throw cRuntimeError("send()/sendDelayed(): module has no gate #%d", gateid);
279

  
280
    return sendDelayed(msg, delay, outgate);
281
}
282

  
283

  
284
int cAsyncModule::sendDelayed(cMessage *msg, simtime_t delay, const char *gatename, int sn)
285
{
286
    cGate *outgate = gate(gatename, sn);
287
    if (outgate==NULL)
288
       throw cRuntimeError(sn<0 ? "send()/sendDelayed(): module has no gate `%s'":
289
                               "send()/sendDelayed(): module has no gate `%s[%d]'",gatename,sn);
290

  
291
    return sendDelayed(msg, delay, outgate);
292
}
293

  
294

  
295
int cAsyncModule::sendDelayed(cMessage *msg, simtime_t delay, cGate *outputgate)
296
{
297
    setMessageMetaData(msg);
298

  
299
    //
300
    // check current state
301
    //
302
    if (executionState == asynchronous)
303
    {
304
        //
305
        // error checking, omit ownership checks if it breaks
306
        //
307
        if (outputgate==NULL)
308
            throw cRuntimeError("send()/sendDelayed(): gate pointer is NULL");
309
        if (outputgate->getType()=='I')
310
            throw cRuntimeError("send()/sendDelayed(): cannot send via an input gate (`%s')",outputgate->getName());
311
        if (!outputgate->getNextGate())  // NOTE: without this error check, msg would become self-message
312
            throw cRuntimeError("send()/sendDelayed(): gate `%s' not connected",outputgate->getFullName());
313
        if (msg==NULL)
314
            throw cRuntimeError("send()/sendDelayed(): message pointer is NULL");
315
        if (msg->getOwner()!=this)
316
        {
317
            if (this!=simulation.getContext())
318
                throw cRuntimeError("send()/sendDelayed() of module (%s)%s called in the context of "
319
                                        "module (%s)%s: method called from the latter module "
320
                                        "lacks Enter_Method() or Enter_Method_Silent()? "
321
                                        "Also, if message to be sent is passed from that module, "
322
                                        "you'll need to call take(msg) after Enter_Method() as well",
323
                                        getClassName(), getFullPath().c_str(),
324
                                        simulation.getContext()->getClassName(),
325
                                        simulation.getContext()->getFullPath().c_str());
326
            else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
327
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
328
                                        "currently scheduled as a self-message for this module",
329
                                        msg->getClassName(), msg->getName());
330
            else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
331
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
332
                                        "currently scheduled as a self-message for ANOTHER module",
333
                                        msg->getClassName(), msg->getName());
334
            else if (msg->getOwner()==&simulation.msgQueue)
335
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
336
                                        "currently in scheduled-events, being underway between two modules",
337
                                        msg->getClassName(), msg->getName());
338
            else
339
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, "
340
                                        "it is currently contained/owned by (%s)%s",
341
                                        msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
342
                                        msg->getOwner()->getFullPath().c_str());
343
        }
344

  
345
        if (delay < 0.0)
346
            throw cRuntimeError("sendDelayed(): negative delay %s",delay.str().c_str());
347

  
348
        simtime_t arrivalTime = now + delay;
349
        if (arrivalTime < t_end) // TODO: Consider channel delay!
350
            throw cRuntimeError("sendDelayed(): send delay shorter than processing delay %s", delay.str().c_str());
351

  
352
        if (delay == 0 && currentEventPriority < msg->getSchedulingPriority()) {
353
            throw cRuntimeError("sendDelayed(): priority of scheduled Event larger than scheduling event and equal starting times => scheduling in the past");
354
        }
355
        //
356
        // set message parameters and send it
357
        //
358
        msg->setSentFrom(this, outputgate->getId(), arrivalTime);
359
        bool keepit = outputgate->deliver(msg, arrivalTime);
360
        if (!keepit)
361
            delete msg;
362

  
363
        return 0;
364
    }
365
    else // syncExecution
366
    {
367
        return cSimpleModule::sendDelayed(msg, delay, outputgate);
368
    }
369
}
370

  
371

  
372
int cAsyncModule::sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cModule *mod, int inputgateid)
373
{
374
    cGate *togate = mod->gate(inputgateid);
375
    if (togate==NULL)
376
        throw cRuntimeError("sendDirect(): module `%s' has no gate #%d",
377
                                mod->getFullPath().c_str(), inputgateid);
378

  
379
    return sendDirect(msg, delay, duration, togate);
380
}
381

  
382

  
383
int cAsyncModule::sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cModule *mod, const char *inputgatename, int sn)
384
{
385
    if (!mod)
386
        throw cRuntimeError("sendDirect(): module ptr is NULL");
387
    cGate *togate = mod->gate(inputgatename,sn);
388
    if (togate==NULL)
389
        throw cRuntimeError(sn<0 ? "sendDirect(): module `%s' has no gate `%s'":
390
                                "sendDirect(): module `%s' has no gate `%s[%d]'",
391
                                mod->getFullPath().c_str(), inputgatename, sn);
392
    return sendDirect(msg, delay, duration, togate);
393
}
394

  
395

  
396
int cAsyncModule::sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cGate *togate)
397
{
398
    setMessageMetaData(msg);
399

  
400
    //
401
    // check current state
402
    //
403
    if (executionState == asynchronous)
404
    {
405
        //
406
        // error checking
407
        //
408
        // Note: it is permitted to send to an output gate. It is especially useful
409
        // with several submodules sending to a single output gate of their parent module.
410
        if (togate==NULL)
411
                throw cRuntimeError("sendDirect(): destination gate pointer is NULL");
412
        if (togate->getPreviousGate())
413
                throw cRuntimeError("sendDirect(): module must have dedicated gate(s) for receiving via sendDirect()"
414
                                                                " (\"from\" side of dest. gate `%s' should NOT be connected)",togate->getFullPath().c_str());
415
        if (msg==NULL)
416
                throw cRuntimeError("sendDirect(): message pointer is NULL");
417
        if (msg->getOwner()!=this)
418
        {
419
                if (this!=simulation.getContext())
420
                        throw cRuntimeError("sendDirect() of module (%s)%s called in the context of "
421
                                                                        "module (%s)%s: method called from the latter module "
422
                                                                        "lacks Enter_Method() or Enter_Method_Silent()? "
423
                                                                        "Also, if message to be sent is passed from that module, "
424
                                                                        "you'll need to call take(msg) after Enter_Method() as well",
425
                                                                        getClassName(), getFullPath().c_str(),
426
                                                                        simulation.getContext()->getClassName(),
427
                                                                        simulation.getContext()->getFullPath().c_str());
428
                else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
429
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
430
                                                                        "currently scheduled as a self-message for this module",
431
                                                                        msg->getClassName(), msg->getName());
432
                else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
433
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
434
                                                                        "currently scheduled as a self-message for ANOTHER module",
435
                                                                        msg->getClassName(), msg->getName());
436
                else if (msg->getOwner()==&simulation.msgQueue)
437
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
438
                                                                        "currently in scheduled-events, being underway between two modules",
439
                                                                        msg->getClassName(), msg->getName());
440
                else
441
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, "
442
                                                                        "it is currently contained/owned by (%s)%s",
443
                                                                        msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
444
                                                                        msg->getOwner()->getFullPath().c_str());
445
        }
446

  
447
        simtime_t arrivalTime = now + delay;
448
        if (arrivalTime < t_end) // TODO: Consider channel delay!
449
            throw cRuntimeError("sendDirect(): send delay shorter than processing delay %s",delay.str().c_str());
450

  
451
        if (delay == 0 && currentEventPriority < msg->getSchedulingPriority()) {
452
            throw cRuntimeError("sendDirect(): priority of scheduled Event larger than scheduling event and equal starting times => scheduling in the past");
453
        }
454

  
455
        // set message parameters and send it
456
        msg->setSentFrom(this, -1, now);
457

  
458
        bool keepit = togate->deliver(msg, arrivalTime);
459
        if (!keepit)
460
                delete msg;
461
        return 0;
462
    }
463
    else  // sync execution
464
    {
465
    	return cSimpleModule::sendDirect(msg, delay, duration, togate);
466
    }
467
}
src/sim/clockedthreadpool.cc
23 23
#include "clockedthreadpool.h"
24 24
#include "cmessage.h"
25 25
#include "cconfiguration.h"
26
#include "casyncmodule.h"
27 26
#include "cdefaultlist.h"
28 27
#include "cbarriermessage.h"
28
#include "csimplemodule.h"
29 29

  
30 30
//#define TIMING_DEBUG
31 31

  
......
119 119
        // NOTE: possible race condition with deregister module which sets vect[...]
120 120
        //       to NULL. However, shouldn't be a problem since vect is ever increasing
121 121
        //
122
        cAsyncModule* mod = (cAsyncModule*)simulation.vect[msg->getArrivalModuleId()];
122
        cSimpleModule* mod = (cSimpleModule*)simulation.vect[msg->getArrivalModuleId()];
123 123
        cThreadPool::setDefaultOwner(mod);
124 124

  
125 125
#ifdef TIMING_DEBUG
src/sim/cmessage.cc
27 27
#include "cmessage.h"
28 28
#include "cexception.h"
29 29
#include "cenvir.h"
30
#include "casyncmodule.h"
31 30

  
32 31
#ifdef WITH_PARSIM
33 32
#include "ccommbuffer.h"
......
375 374
simtime_t cMessage::getEventDuration() {
376 375
    if (duration == SimTime::simTimeUninitialized) {
377 376
        cSimpleModule* mod = (cSimpleModule*) simulation.getModule(getArrivalModuleId());
378
        if (mod && mod->isAsyncModule()) {
377
        if (mod) {
379 378
            // block if another thread is busy inside this module
380 379
            // then set the module to busy
381 380
            // this must only be unset after the corresponding event has been processed,
382 381
            // since otherwise the return value of getProcessingDelay is not deterministically determined
383 382
            // (in the mean time there may have been other events, changing the outcome of getProcessingDelay)
384
            ((cAsyncModule*) mod)->waitIfBusy();
385
            ((cAsyncModule*) mod)->setBusy();
386
            duration = ((cAsyncModule*) mod)->getProcessingDelay(this);
383
            mod->waitIfBusy();
384
            mod->setBusy();
385
            duration = mod->getProcessingDelay(this);
387 386
        }
388 387
    }
389 388
    return duration;
src/sim/cscheduler.cc
28 28
#include "cconfigoption.h"
29 29
#include "platmisc.h" // usleep
30 30
#include "cbarriermessage.h"
31
#include "csimplemodule.h"
31 32

  
32 33
USING_NAMESPACE
33 34

  
......
121 122
    }
122 123

  
123 124
    cSimpleModule* mod = (cSimpleModule*) sim->getModule(msg->getArrivalModuleId());
124
    if (mod->isAsyncModule())
125
    {
126
        cAsyncModule* aMod = (cAsyncModule*) mod;
127
        simtime_t duration = msg->getEventDuration();
128
        if (duration != SimTime::simTimeSequentialExecution && aMod->mayParallelize(msg, duration) && sim->threadPool)
129
        {
130
            //
131
            // create a new barrier and schedule it
132
            //
133
            cBarrierMessage* barrier = new cBarrierMessage();
134
            barrier->setArrival(aMod, -1, msg->getArrivalTime() + duration);
135
            msg->setBarrier(barrier);
136

  
137
            // If the event is a null duration event,
138
            // we have to set additional data in the barrier
139
            // to make sure the barrier gets placed correctly
140
            barrier->setSchedulingPriority(msg->getSchedulingPriority());
141
            barrier->setParentStartTime(msg->getArrivalTime());
142
            barrier->setParentExecutionOrderId(sim->getNextExecutionOrderId(msg));
143
            // Set scheduling order to 0 (in front of all children)
144
            barrier->setSchedulingOrderId(0);
145

  
146
            sim->msgQueue.insert(barrier);
147
        }
148
    }
125
	simtime_t duration = msg->getEventDuration();
126
	if (duration != SimTime::simTimeSequentialExecution && mod->mayParallelize(msg, duration) && sim->threadPool)
127
	{
128
		//
129
		// create a new barrier and schedule it
130
		//
131
		cBarrierMessage* barrier = new cBarrierMessage();
132
		barrier->setArrival(mod, -1, msg->getArrivalTime() + duration);
133
		msg->setBarrier(barrier);
134

  
135
		// If the event is a null duration event,
136
		// we have to set additional data in the barrier
137
		// to make sure the barrier gets placed correctly
138
		barrier->setSchedulingPriority(msg->getSchedulingPriority());
139
		barrier->setParentStartTime(msg->getArrivalTime());
140
		barrier->setParentExecutionOrderId(sim->getNextExecutionOrderId(msg));
141
		// Set scheduling order to 0 (in front of all children)
142
		barrier->setSchedulingOrderId(0);
143

  
144
		sim->msgQueue.insert(barrier);
145
	}
149 146
    return msg;
150 147
#endif
151 148
}
......
175 172
void cEEFScheduler::updateIES() {
176 173
    cMessage *msg = NULL;
177 174
    cSimpleModule* mod = NULL;
178
    cAsyncModule* aMod = NULL;
179 175
#ifdef NOBARRIER
180 176

  
181 177
    while (!(sim->msgQueue.empty()))
......
184 180

  
185 181
        mod = (cSimpleModule*) sim->getModule(msg->getArrivalModuleId());
186 182

  
187
        if (!(mod->isAsyncModule())) {
188
            break;
189
        }
190

  
191
        aMod = (cAsyncModule*) mod;
192 183
        simtime_t duration = msg->getEventDuration();
193 184

  
194
        if (!aMod->mayParallelize(msg, duration)) {
185
        if (!mod->mayParallelize(msg, duration)) {
195 186
            break;
196 187
        }
197 188

  
......
262 253
        }
263 254

  
264 255
        mod = (cSimpleModule*) sim->getModule(msg->getArrivalModuleId());
265
        aMod = NULL;
266
        if (mod->isAsyncModule())
267
        {
268
            aMod = (cAsyncModule*) mod;
269
            simtime_t duration = msg->getEventDuration();
270

  
271
            if (!aMod->mayParallelize(msg, duration))
272
            {
273
                sim->msgQueue.insert(msg);
274
                return;
275
            }
276
            // create a new barrier and schedule it
277
            cBarrierMessage* barrier = new cBarrierMessage();
278
            barrier->setArrival(aMod, -1, msg->getArrivalTime() + duration);
279
            msg->setBarrier(barrier);
280
            sim->msgQueue.insert(barrier);
281

  
282
/*            printf(
283
                    "adding to IEH: %s, tstart=%f, tend= %f, now First in IEH: ",
284
                    ((cSimpleModule*) sim->getModule(msg->getArrivalModuleId()))->getName(),SIMTIME_DBL(msg->getArrivalTime()),
285
                    SIMTIME_DBL(msg->getTend()));*/
286

  
287
            independentEventsHeap.insert(msg);
288

  
289
/*            printf(
290
                    "%s, length=%i\n",
291
                    ((cSimpleModule*) sim->getModule(
292
                            independentEventsHeap.peekFirst()->getArrivalModuleId()))->getName(),
293
                    independentEventsHeap.length());*/
294

  
295
        }
296
        else //Not a AsyncModule
297
        {
298
            sim->msgQueue.insert(msg);
299
            return;
300
        }
256
		simtime_t duration = msg->getEventDuration();
257

  
258
		if (!mod->mayParallelize(msg, duration))
259
		{
260
			sim->msgQueue.insert(msg);
261
			return;
262
		}
263
		// create a new barrier and schedule it
264
		cBarrierMessage* barrier = new cBarrierMessage();
265
		barrier->setArrival(mod, -1, msg->getArrivalTime() + duration);
266
		msg->setBarrier(barrier);
267
		sim->msgQueue.insert(barrier);
268

  
269
		independentEventsHeap.insert(msg);
301 270

  
302 271
    } // while (!(sim->msgQueue.empty()))
303 272
#endif
src/sim/csimplemodule.cc
14 14
/*--------------------------------------------------------------*
15 15
  Copyright (C) 1992-2008 Andras Varga
16 16
  Copyright (C) 2006-2008 OpenSim Ltd.
17
  Copyright (C) 2009 Georg Kunz
17 18

  
18 19
  This file is distributed WITHOUT ANY WARRANTY. See the file
19 20
  `license' for details on this and other legal matters.
......
23 24
#include <stdio.h>           // sprintf
24 25
#include <string.h>          // strcpy
25 26
#include <exception>
27
#include <cstring>
28
#include <sstream>
29
#include <stdlib.h>
26 30
#include "csimplemodule.h"
31

  
27 32
#include "cgate.h"
28 33
#include "cmessage.h"
29 34
#include "ccoroutine.h"
......
34 39
#include "cenvir.h"
35 40
#include "cexception.h"
36 41
#include "commonutil.h"
42
#include "cthreadpool.h"
43
#include "cconfiguration.h"
44
#include "cconfigoption.h"
45
#include "../envir/envirbase.h"
46
#include "cstringtokenizer.h"
47

  
37 48

  
38 49
USING_NAMESPACE
39 50

  
......
41 52
bool cSimpleModule::stack_cleanup_requested;
42 53
cSimpleModule *cSimpleModule::after_cleanup_transfer_to;
43 54

  
55
Register_PerRunConfigOption(CFGID_ASYNCMODULE_PARZERODUR, "parallelize-zero-duration-events", CFG_BOOL, "false", "Parallelize Events with zero duration");
56
Register_PerObjectConfigOption(CFGID_NUM_LOCAL_RNGS, "number-local-rngs", CFG_INT, "1", "Number of RNGS per module");
57
Register_PerObjectConfigOption(CFGID_LOCAL_RNG_SEED, "local-rng-seed", CFG_STRING, "", "A whitespace seperated list of the seeds for each RNG of the corresponding module, eg '24 232 342 auto 342'");
58

  
44 59

  
45 60
void cSimpleModule::activate(void *p)
46 61
{
......
167 182
}
168 183

  
169 184
// legacy constructor, only for backwards compatiblity; first two args are unused
170
cSimpleModule::cSimpleModule(const char *, cModule *, unsigned stksize)
185
cSimpleModule::cSimpleModule(const char *, cModule *, unsigned stksize) :
186
		t_end(0.0)
171 187
{
172 188
    coroutine = NULL;
173 189
    setFlag(FL_USESACTIVITY, stksize!=0);
......
188 204
                               "or rewrite modules to use handleMessage() instead of activity()",
189 205
                               stksize,ev.getExtraStackForEnvir(),getFullPath().c_str());
190 206
    }
207

  
208
	//
209
	// find out if events with 0 durations should also be parallelized?
210
	//
211
	parZeroDur = ev.getConfig()->getAsBool(CFGID_ASYNCMODULE_PARZERODUR);
212

  
213
	//
214
	// init state flag to non-busy since no thread is active yet
215
	//
216
	AO_store(&busy, 0);
217

  
218
	//
219
	// needs to be initialized here for use during model initialization
220
	//
221
	scheduledMessageCount = 0;
222
    currentEventPriority = 0;
223

  
224
	//
225
	// initialize with the current time. This variable is already used when
226
	// scheduling events during the initialization phase of the simulation.
227
	// Hence, it needs to be initialized. However, we cannot assume 0 here since
228
	// the constructor is also called during dynamic module creation at any
229
	// point in time during the simulation.
230
	//
231
	now = simTime();
232

  
191 233
}
192 234

  
193
cSimpleModule::cSimpleModule(unsigned stksize)
235
cSimpleModule::cSimpleModule(unsigned stksize) :
236
		t_end(0.0)
194 237
{
195 238
    coroutine = NULL;
196 239
    setFlag(FL_USESACTIVITY, stksize!=0);
......
211 254
                               "or rewrite modules to use handleMessage() instead of activity()",
212 255
                               stksize,ev.getExtraStackForEnvir(),getFullPath().c_str());
213 256
    }
257

  
258
	//
259
	// find out if events with 0 durations should also be parallelized?
260
	//
261
	parZeroDur = ev.getConfig()->getAsBool(CFGID_ASYNCMODULE_PARZERODUR);
262

  
263
	//
264
	// init state flag to non-busy since no thread is active yet
265
	//
266
	AO_store(&busy, 0);
267

  
268
	//
269
	// needs to be initialized here for use during model initialization
270
	//
271
	scheduledMessageCount = 0;
272
    currentEventPriority = 0;
273

  
274
	//
275
	// initialize with the current time. This variable is already used when
276
	// scheduling events during the initialization phase of the simulation.
277
	// Hence, it needs to be initialized. However, we cannot assume 0 here since
278
	// the constructor is also called during dynamic module creation at any
279
	// point in time during the simulation.
280
	//
281
	now = simTime();
282

  
214 283
}
215 284

  
216 285
cSimpleModule::~cSimpleModule()
......
347 416

  
348 417
#define TRY(code, msgprefix) try {code;} catch(cRuntimeError& e) {e.prependMessage(msgprefix);throw;}
349 418

  
350
int cSimpleModule::sendDelayed(cMessage *msg, simtime_t delay, const char *gateName, int gateIndex)
351
{
352
    cGate *outgate;
353
    TRY(outgate = gate(gateName,gateIndex), "send()/sendDelayed()");
354
    return sendDelayed(msg, delay, outgate);
355
}
356

  
357
int cSimpleModule::sendDelayed(cMessage *msg, simtime_t delay, int gateId)
358
{
359
    cGate *outgate;
360
    TRY(outgate = gate(gateId), "send()/sendDelayed()");
361
    return sendDelayed(msg, delay, outgate);
362
}
363

  
364
int cSimpleModule::sendDelayed(cMessage *msg, simtime_t delay, cGate *outgate)
365
{
366
    // error checking:
367
    if (outgate==NULL)
368
       throw cRuntimeError("send()/sendDelayed(): gate pointer is NULL");
369
    if (outgate->getType()==cGate::INPUT)
370
       throw cRuntimeError("send()/sendDelayed(): cannot send via an input gate (`%s')", outgate->getFullName());
371
    if (!outgate->getNextGate())  // NOTE: without this error check, msg would become self-message
372
       throw cRuntimeError("send()/sendDelayed(): gate `%s' not connected", outgate->getFullName());
373
    if (msg==NULL)
374
        throw cRuntimeError("send()/sendDelayed(): message pointer is NULL");
375
    if (msg->getOwner()!=this)
376
    {
377
        if (this!=simulation.getContextModule())
378
            throw cRuntimeError("send()/sendDelayed() of module (%s)%s called in the context of "
379
                                "module (%s)%s: method called from the latter module "
380
                                "lacks Enter_Method() or Enter_Method_Silent()? "
381
                                "Also, if message to be sent is passed from that module, "
382
                                "you'll need to call take(msg) after Enter_Method() as well",
383
                                getClassName(), getFullPath().c_str(),
384
                                simulation.getContextModule()->getClassName(),
385
                                simulation.getContextModule()->getFullPath().c_str());
386
        else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
387
            throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
388
                                "currently scheduled as a self-message for this module",
389
                                msg->getClassName(), msg->getName());
390
        else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
391
            throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
392
                                "currently scheduled as a self-message for ANOTHER module",
393
                                msg->getClassName(), msg->getName());
394
        else if (msg->getOwner()==&simulation.msgQueue)
395
            throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
396
                                "currently in scheduled-events, being underway between two modules",
397
                                msg->getClassName(), msg->getName());
398
        else
399
            throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, "
400
                                "it is currently contained/owned by (%s)%s",
401
                                msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
402
                                msg->getOwner()->getFullPath().c_str());
403
    }
404
    if (delay < 0)
405
        throw cRuntimeError("sendDelayed(): negative delay %s", SIMTIME_STR(delay));
406

  
407
    // set message parameters and send it
408
    simtime_t delayEndTime = simTime()+delay;
409
    msg->setSentFrom(this, outgate->getId(), delayEndTime);
410
    if (msg->isPacket())
411
        ((cPacket *)msg)->setDuration(0);
412

  
413
    EVCB.beginSend(msg);
414
    bool keepit = outgate->deliver(msg, delayEndTime);
415
    if (!keepit)
416
    {
417
        delete msg; //FIXME problem: tell tkenv somehow that msg has been deleted, otherwise animation will crash
418
    }
419
    else
420
    {
421
        EVCB.messageSent_OBSOLETE(msg); //FIXME obsolete
422
        EVCB.endSend(msg);
423
    }
424
    return 0;
425
}
426

  
427
int cSimpleModule::sendDirect(cMessage *msg, cModule *mod, const char *gateName, int gateIndex)
428
{
429
    return sendDirect(msg, SIMTIME_ZERO, SIMTIME_ZERO, mod, gateName, gateIndex);
430
}
431

  
432
int cSimpleModule::sendDirect(cMessage *msg, cModule *mod, int gateId)
433
{
434
    return sendDirect(msg, SIMTIME_ZERO, SIMTIME_ZERO, mod, gateId);
435
}
436

  
437
int cSimpleModule::sendDirect(cMessage *msg, cGate *togate)
438
{
439
    return sendDirect(msg, SIMTIME_ZERO, SIMTIME_ZERO, togate);
440
}
441

  
442
int cSimpleModule::sendDirect(cMessage *msg, simtime_t propdelay, simtime_t duration,
443
                              cModule *mod, const char *gateName, int gateIndex)
444
{
445
    if (!mod)
446
        throw cRuntimeError("sendDirect(): destination module pointer is NULL");
447
    cGate *togate;
448
    TRY(togate = mod->gate(gateName, gateIndex), "sendDirect()");
449
    return sendDirect(msg, propdelay, duration, togate);
450
}
451

  
452
int cSimpleModule::sendDirect(cMessage *msg, simtime_t propdelay, simtime_t duration, cModule *mod, int gateId)
453
{
454
    if (!mod)
455
        throw cRuntimeError("sendDirect(): destination module pointer is NULL");
456
    cGate *togate;
457
    TRY(togate = mod->gate(gateId), "sendDirect()");
458
    return sendDirect(msg, propdelay, duration, togate);
459
}
460

  
461

  
462
int cSimpleModule::sendDirect(cMessage *msg, simtime_t propdelay, simtime_t duration, cGate *togate)
463
{
464
    // Note: it is permitted to send to an output gate. It is especially useful
465
    // with several submodules sending to a single output gate of their parent module.
466
    if (togate==NULL)
467
        throw cRuntimeError("sendDirect(): destination gate pointer is NULL");
468
    if (togate->getPreviousGate())
469
        throw cRuntimeError("sendDirect(): module must have dedicated gate(s) for receiving via sendDirect()"
470
                            " (\"from\" side of dest. gate `%s' should NOT be connected)",togate->getFullPath().c_str());
471
    if (propdelay<0 || duration<0)
472
        throw cRuntimeError("sendDirect(): the propagation and duration parameters cannot be negative");
473
    if (msg==NULL)
474
        throw cRuntimeError("sendDirect(): message pointer is NULL");
475
    if (msg->getOwner()!=this)
476
    {
477
        // try to give a meaningful error message
478
        if (this!=simulation.getContextModule())
479
            throw cRuntimeError("sendDirect() of module (%s)%s called in the context of "
480
                                "module (%s)%s: method called from the latter module "
481
                                "lacks Enter_Method() or Enter_Method_Silent()? "
482
                                "Also, if message to be sent is passed from that module, "
483
                                "you'll need to call take(msg) after Enter_Method() as well",
484
                                getClassName(), getFullPath().c_str(),
485
                                simulation.getContextModule()->getClassName(),
486
                                simulation.getContextModule()->getFullPath().c_str());
487
        else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
488
            throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
489
                                "currently scheduled as a self-message for this module",
490
                                msg->getClassName(), msg->getName());
491
        else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
492
            throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
493
                                "currently scheduled as a self-message for ANOTHER module",
494
                                msg->getClassName(), msg->getName());
495
        else if (msg->getOwner()==&simulation.msgQueue)
496
            throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
497
                                "currently in scheduled-events, being underway between two modules",
498
                                msg->getClassName(), msg->getName());
499
        else
500
            throw cRuntimeError("sendDirect(): cannot send message (%s)%s, "
501
                                "it is currently contained/owned by (%s)%s",
502
                                msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
503
                                msg->getOwner()->getFullPath().c_str());
504
    }
505

  
506
    // set message parameters and send it
507
    msg->setSentFrom(this, -1, simTime());
508

  
509
    EVCB.beginSend(msg);
510
    if (msg->isPacket())
511
        ((cPacket *)msg)->setDuration(duration);
512
    else if (duration!=SIMTIME_ZERO)
513
        throw cRuntimeError("sendDirect(): cannot send non-packet message (%s)%s when nonzero duration is specified",
514
                            msg->getClassName(), msg->getName());
515
    EVCB.messageSendDirect(msg, togate, propdelay, duration);
516
    bool keepit = togate->deliver(msg, simTime() + propdelay);
517
    if (!keepit)
518
    {
519
        delete msg; //FIXME problem: tell tkenv somehow that msg has been deleted, otherwise animation will crash
520
    }
521
    else
522
    {
523
        EVCB.messageSent_OBSOLETE(msg, togate); //FIXME obsolete
524
        EVCB.endSend(msg);
525
    }
526
    return 0;
527
}
528

  
529
int cSimpleModule::scheduleAt(simtime_t t, cMessage *msg)
530
{
531
    if (msg==NULL)
532
        throw cRuntimeError("scheduleAt(): message pointer is NULL");
533
    if (t<simTime())
534
        throw cRuntimeError(eBACKSCHED, msg->getClassName(), msg->getName(), SIMTIME_DBL(t));
535
    if (msg->getOwner()!=this)
536
    {
537
        if (this!=simulation.getContextModule())
538
            throw cRuntimeError("scheduleAt() of module (%s)%s called in the context of "
539
                                "module (%s)%s: method called from the latter module "
540
                                "lacks Enter_Method() or Enter_Method_Silent()?",
541
                                getClassName(), getFullPath().c_str(),
542
                                simulation.getContextModule()->getClassName(),
543
                                simulation.getContextModule()->getFullPath().c_str());
544
        else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
545
            throw cRuntimeError("scheduleAt(): message (%s)%s is currently scheduled, "
546
                                "use cancelEvent() before rescheduling",
547
                                msg->getClassName(), msg->getName());
548
        else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
549
            throw cRuntimeError("scheduleAt(): cannot schedule message (%s)%s, it is "
550
                                "currently scheduled as self-message for ANOTHER module",
551
                                msg->getClassName(), msg->getName());
552

  
553
         else if (msg->getOwner()==&simulation.msgQueue)
554
            throw cRuntimeError("scheduleAt(): cannot schedule message (%s)%s, it is "
555
                                "currently in scheduled-events, being underway between two modules",
556
                                msg->getClassName(), msg->getName());
557
        else
558
            throw cRuntimeError("scheduleAt(): cannot schedule message (%s)%s, "
559
                                "it is currently contained/owned by (%s)%s",
560
                                msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
561
                                msg->getOwner()->getFullPath().c_str());
562
    }
563

  
564
    // set message parameters and schedule it
565
    msg->setSentFrom(this, -1, simTime());
566
    msg->setArrival(this, -1, t);
567
    EVCB.messageSent_OBSOLETE( msg ); //XXX obsolete but needed for Tkenv
568
    EVCB.messageScheduled(msg);
569
    simulation.insertMsg(msg);
570
    return 0;
571
}
572

  
573 419
cMessage *cSimpleModule::cancelEvent(cMessage *msg)
574 420
{
575 421
    // make sure we really have the message and it is scheduled
......
757 603
    return coroutine ? coroutine->getStackUsage() : 0;
758 604
}
759 605

  
606
void cSimpleModule::initLocalRNGs()
607
{
608
    //TODO
609
    unsigned nrNumGens;
610
    unsigned long * seeds;
611

  
612
    //
613
    // how many local random number generators do we need?
614
    // default is 1
615
    //
616
    nrNumGens = ev.getConfig()->parseLong(
617
            ev.getConfig()->getPerObjectConfigValue(getFullPath().c_str(),
618
                    "number-local-rngs"), "1", 1);
619

  
620
    //
621
    // read the seeds from ini file
622
    //
623
    const char * seedString = ev.getConfig()->getPerObjectConfigValue(
624
            getFullPath().c_str(), "local-rng-seed");
625

  
626
    //
627
    // setup seeds for each RNG
628
    //
629
    seeds = new unsigned long[nrNumGens];
630
    cStringTokenizer tokenizer(seedString);
631
    const char * token = NULL;
632
    for (unsigned i = 0; i < nrNumGens; i++)
633
    {
634
        if (tokenizer.hasMoreTokens())
635
        {
636
            token = tokenizer.nextToken();
637
            if (strcmp(token, "auto") == 0)
638
            {
639
                token = NULL;
640
            }
641
        }
642

  
643
        EnvirBase* e = dynamic_cast<EnvirBase*> (&ev);
644
        if (e != NULL)
645
        {
646
            if (token)
647
            {
648
                //if the seed is set in the ini for this module, use ini-settings
649
                //with fallback to autogeneration if parsing failes
650
                seeds[i] = ev.getConfig()->parseLong(token, "",
651
                        e->getSeedGenerator()->intRand());
652
            }
653
            else
654
            {
655
                //else use SeedGenerator for automatic seed generation.
656
                seeds[i] = e->getSeedGenerator()->intRand();
657
            }
658
            token = NULL;
659
        }
660
        else
661
        {
662
            throw cRuntimeError(
663
                    "cSimpleModule: Failed to initialize Number Generator, dynamic cast to EnvirBase failed.");
664
        }
665
    }
666

  
667
    //
668
    // generate the required number of RNGs with the corresponding seeds
669
    //
670
    setupSeeds(nrNumGens,seeds);
671
    delete[] seeds;
672

  
673
}
674

  
675
void cSimpleModule::setMessageMetaData(cMessage* msg)
676
{
677
    msg->setEventDuration(SimTime::simTimeUninitialized);
678
    msg->setSchedulingOrderId(scheduledMessageCount++);
679
    msg->setParentExecutionOrderId(executionOrderId);
680
    msg->setParentStartTime(now);
681
}
682

  
683
int cSimpleModule::scheduleAt(simtime_t t, cMessage *msg)
684
{
685
    setMessageMetaData(msg);
686

  
687
    //
688
    // check current state
689
    //
690
    if (executionState == asynchronous)
691
    {
692
        if (msg==NULL)
693
			throw cRuntimeError("scheduleAt(): message pointer is NULL");
694
        if (t < t_end)
695
        	throw cRuntimeError("scheduleAt(): event cannot be scheduled at "
696
        			"%s because this precedes the end of the processing duration "
697
        			"at %s of the scheduling event.",
698
        			t.str().c_str(), t_end.str().c_str());
699

  
700
        if (t == now && currentEventPriority < msg->getSchedulingPriority()) {
701
            throw cRuntimeError("scheduleAt(): priority of scheduled Event larger than scheduling event and equal starting times => scheduling in the past");
702
        }
703
        // insert this message in the FES. When the scheduler arrives at this
704
        // message it will trigger the processing of the associated task
705
        msg->setSentFrom(this, -1, t_end);
706
        msg->setArrival(this, -1, t);
707

  
708
        simulation.msgQueue.insert(msg);
709
        return 0;
710
    }
711
    else // synch execution
712
    {
713
		if (msg==NULL)
714
			throw cRuntimeError("scheduleAt(): message pointer is NULL");
715
		if (t<simTime())
716
			throw cRuntimeError(eBACKSCHED, msg->getClassName(), msg->getName(), SIMTIME_DBL(t));
717
		if (msg->getOwner()!=this)
718
		{
719
			if (this!=simulation.getContextModule())
720
				throw cRuntimeError("scheduleAt() of module (%s)%s called in the context of "
721
						"module (%s)%s: method called from the latter module "
722
						"lacks Enter_Method() or Enter_Method_Silent()?",
723
						getClassName(), getFullPath().c_str(),
724
						simulation.getContextModule()->getClassName(),
725
						simulation.getContextModule()->getFullPath().c_str());
726
			else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
727
				throw cRuntimeError("scheduleAt(): message (%s)%s is currently scheduled, "
728
						"use cancelEvent() before rescheduling",
729
						msg->getClassName(), msg->getName());
730
			else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
731
				throw cRuntimeError("scheduleAt(): cannot schedule message (%s)%s, it is "
732
						"currently scheduled as self-message for ANOTHER module",
733
						msg->getClassName(), msg->getName());
734

  
735
			else if (msg->getOwner()==&simulation.msgQueue)
736
				throw cRuntimeError("scheduleAt(): cannot schedule message (%s)%s, it is "
737
						"currently in scheduled-events, being underway between two modules",
738
						msg->getClassName(), msg->getName());
739
			else
740
				throw cRuntimeError("scheduleAt(): cannot schedule message (%s)%s, "
741
						"it is currently contained/owned by (%s)%s",
742
						msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
743
						msg->getOwner()->getFullPath().c_str());
744
		}
745

  
746
		// set message parameters and schedule it
747
		msg->setSentFrom(this, -1, simTime());
748
		msg->setArrival(this, -1, t);
749
		EVCB.messageSent_OBSOLETE( msg ); //XXX obsolete but needed for Tkenv
750
		EVCB.messageScheduled(msg);
751
		simulation.insertMsg(msg);
752
		return 0;
753
    }
754
}
755

  
756

  
757
void cSimpleModule::callHandleAsyncMessage(cMessage* msg)
758
{
759
    //
760
    // set execution state
761
    //
762
    executionState = asynchronous;
763

  
764
    //
765
    // set the simtime for this event
766
    //
767
    cThreadPool::setSimTime(msg->getArrivalTime());
768
    // corresponds to setContextModule(mod);
769
    cThreadPool::setContext(this);
770
    cThreadPool::setDefaultOwner(this);
771

  
772
    //
773
    // update meta data
774
    //
775
    prepareHandleMessage(msg);
776

  
777
    //
778
    // call the actual method
779
    //
780
    handleMessage(msg);
781
}
782

  
783

  
784
void cSimpleModule::callHandleMessage(cMessage* msg)
785
{
786
    //
787
    // set execution state
788
    //
789
    executionState = synchronous;
790

  
791
    //
792
    // update meta data
793
    //
794
    prepareHandleMessage(msg);
795

  
796
    //
797
    // call the actual method
798
    //
799
    handleMessage(msg);
800
}
801

  
802

  
803
void cSimpleModule::prepareHandleMessage(cMessage* msg)
804
{
805
    //
806
    // set some internal state
807
    //
808
    t_end = msg->getArrivalTime() + msg->getEventDuration();
809
    now = msg->getArrivalTime();
810
    currentEventPriority = msg->getSchedulingPriority();
811

  
812
    //
813
    // take ownership of the message only after the test above
814
    //
815
    this->take(msg);
816

  
817
    //
818
    // reset message counter
819
    // message 0 is the barriermsg
820
    //
821
    scheduledMessageCount = 1;
822

  
823
    executionOrderId = msg->getExecutionOrderId();
824

  
825
}
826

  
827
int cSimpleModule::send(cMessage *msg, int gateid)
828
{
829
    return sendDelayed(msg, 0.0, gateid);
830
}
831

  
832

  
833
int cSimpleModule::send(cMessage *msg, const char *gatename, int sn)
834
{
835
    return sendDelayed(msg, 0.0, gatename, sn);
836
}
760 837

  
838

  
839
int cSimpleModule::send(cMessage *msg, cGate *outputgate)
840
{
841
    return sendDelayed(msg, 0.0, outputgate);
842
}
843

  
844

  
845
int cSimpleModule::sendDelayed(cMessage *msg, simtime_t delay, int gateid)
846
{
847
    cGate *outgate = gate(gateid);
848
    if (outgate==NULL)
849
        throw cRuntimeError("send()/sendDelayed(): module has no gate #%d", gateid);
850

  
851
    return sendDelayed(msg, delay, outgate);
852
}
853

  
854

  
855
int cSimpleModule::sendDelayed(cMessage *msg, simtime_t delay, const char *gatename, int sn)
856
{
857
    cGate *outgate = gate(gatename, sn);
858
    if (outgate==NULL)
859
       throw cRuntimeError(sn<0 ? "send()/sendDelayed(): module has no gate `%s'":
860
                               "send()/sendDelayed(): module has no gate `%s[%d]'",gatename,sn);
861

  
862
    return sendDelayed(msg, delay, outgate);
863
}
864

  
865

  
866
int cSimpleModule::sendDelayed(cMessage *msg, simtime_t delay, cGate *outputgate)
867
{
868
    setMessageMetaData(msg);
869

  
870
    //
871
    // check current state
872
    //
873
    if (executionState == asynchronous)
874
    {
875
        //
876
        // error checking, omit ownership checks if it breaks
877
        //
878
        if (outputgate==NULL)
879
            throw cRuntimeError("send()/sendDelayed(): gate pointer is NULL");
880
        if (outputgate->getType()=='I')
881
            throw cRuntimeError("send()/sendDelayed(): cannot send via an input gate (`%s')",outputgate->getName());
882
        if (!outputgate->getNextGate())  // NOTE: without this error check, msg would become self-message
883
            throw cRuntimeError("send()/sendDelayed(): gate `%s' not connected",outputgate->getFullName());
884
        if (msg==NULL)
885
            throw cRuntimeError("send()/sendDelayed(): message pointer is NULL");
886
        if (msg->getOwner()!=this)
887
        {
888
            if (this!=simulation.getContext())
889
                throw cRuntimeError("send()/sendDelayed() of module (%s)%s called in the context of "
890
                                        "module (%s)%s: method called from the latter module "
891
                                        "lacks Enter_Method() or Enter_Method_Silent()? "
892
                                        "Also, if message to be sent is passed from that module, "
893
                                        "you'll need to call take(msg) after Enter_Method() as well",
894
                                        getClassName(), getFullPath().c_str(),
895
                                        simulation.getContext()->getClassName(),
896
                                        simulation.getContext()->getFullPath().c_str());
897
            else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
898
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
899
                                        "currently scheduled as a self-message for this module",
900
                                        msg->getClassName(), msg->getName());
901
            else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
902
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
903
                                        "currently scheduled as a self-message for ANOTHER module",
904
                                        msg->getClassName(), msg->getName());
905
            else if (msg->getOwner()==&simulation.msgQueue)
906
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
907
                                        "currently in scheduled-events, being underway between two modules",
908
                                        msg->getClassName(), msg->getName());
909
            else
910
                throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, "
911
                                        "it is currently contained/owned by (%s)%s",
912
                                        msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
913
                                        msg->getOwner()->getFullPath().c_str());
914
        }
915

  
916
        if (delay < 0.0)
917
            throw cRuntimeError("sendDelayed(): negative delay %s",delay.str().c_str());
918

  
919
        simtime_t arrivalTime = now + delay;
920
        if (arrivalTime < t_end) // TODO: Consider channel delay!
921
            throw cRuntimeError("sendDelayed(): send delay shorter than processing delay %s", delay.str().c_str());
922

  
923
        if (delay == 0 && currentEventPriority < msg->getSchedulingPriority()) {
924
            throw cRuntimeError("sendDelayed(): priority of scheduled Event larger than scheduling event and equal starting times => scheduling in the past");
925
        }
926
        //
927
        // set message parameters and send it
928
        //
929
        msg->setSentFrom(this, outputgate->getId(), arrivalTime);
930
        bool keepit = outputgate->deliver(msg, arrivalTime);
931
        if (!keepit)
932
            delete msg;
933

  
934
        return 0;
935
    }
936
    else // syncExecution
937
    {
938
		// error checking:
939
		if (outputgate==NULL)
940
			throw cRuntimeError("send()/sendDelayed(): gate pointer is NULL");
941
		if (outputgate->getType()==cGate::INPUT)
942
			throw cRuntimeError("send()/sendDelayed(): cannot send via an input gate (`%s')", outputgate->getFullName());
943
		if (!outputgate->getNextGate())  // NOTE: without this error check, msg would become self-message
944
			throw cRuntimeError("send()/sendDelayed(): gate `%s' not connected", outputgate->getFullName());
945
		if (msg==NULL)
946
			throw cRuntimeError("send()/sendDelayed(): message pointer is NULL");
947
		if (msg->getOwner()!=this)
948
		{
949
			if (this!=simulation.getContextModule())
950
				throw cRuntimeError("send()/sendDelayed() of module (%s)%s called in the context of "
951
						"module (%s)%s: method called from the latter module "
952
						"lacks Enter_Method() or Enter_Method_Silent()? "
953
						"Also, if message to be sent is passed from that module, "
954
						"you'll need to call take(msg) after Enter_Method() as well",
955
						getClassName(), getFullPath().c_str(),
956
						simulation.getContextModule()->getClassName(),
957
						simulation.getContextModule()->getFullPath().c_str());
958
			else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
959
				throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
960
						"currently scheduled as a self-message for this module",
961
						msg->getClassName(), msg->getName());
962
			else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
963
				throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
964
						"currently scheduled as a self-message for ANOTHER module",
965
						msg->getClassName(), msg->getName());
966
			else if (msg->getOwner()==&simulation.msgQueue)
967
				throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, it is "
968
						"currently in scheduled-events, being underway between two modules",
969
						msg->getClassName(), msg->getName());
970
			else
971
				throw cRuntimeError("send()/sendDelayed(): cannot send message (%s)%s, "
972
						"it is currently contained/owned by (%s)%s",
973
						msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
974
						msg->getOwner()->getFullPath().c_str());
975
		}
976
		if (delay < 0)
977
			throw cRuntimeError("sendDelayed(): negative delay %s", SIMTIME_STR(delay));
978

  
979
		// set message parameters and send it
980
		simtime_t delayEndTime = simTime()+delay;
981
		msg->setSentFrom(this, outputgate->getId(), delayEndTime);
982
		if (msg->isPacket())
983
			((cPacket *)msg)->setDuration(0);
984

  
985
		EVCB.beginSend(msg);
986
		bool keepit = outputgate->deliver(msg, delayEndTime);
987
		if (!keepit)
988
		{
989
			delete msg; //FIXME problem: tell tkenv somehow that msg has been deleted, otherwise animation will crash
990
		}
991
		else
992
		{
993
			EVCB.messageSent_OBSOLETE(msg); //FIXME obsolete
994
			EVCB.endSend(msg);
995
		}
996
		return 0;
997
    }
998
}
999

  
1000

  
1001
int cSimpleModule::sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cModule *mod, int inputgateid)
1002
{
1003
    cGate *togate = mod->gate(inputgateid);
1004
    if (togate==NULL)
1005
        throw cRuntimeError("sendDirect(): module `%s' has no gate #%d",
1006
                                mod->getFullPath().c_str(), inputgateid);
1007

  
1008
    return sendDirect(msg, delay, duration, togate);
1009
}
1010

  
1011

  
1012
int cSimpleModule::sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cModule *mod, const char *inputgatename, int sn)
1013
{
1014
    if (!mod)
1015
        throw cRuntimeError("sendDirect(): module ptr is NULL");
1016
    cGate *togate = mod->gate(inputgatename,sn);
1017
    if (togate==NULL)
1018
        throw cRuntimeError(sn<0 ? "sendDirect(): module `%s' has no gate `%s'":
1019
                                "sendDirect(): module `%s' has no gate `%s[%d]'",
1020
                                mod->getFullPath().c_str(), inputgatename, sn);
1021
    return sendDirect(msg, delay, duration, togate);
1022
}
1023

  
1024

  
1025
int cSimpleModule::sendDirect(cMessage *msg, simtime_t delay, simtime_t duration, cGate *togate)
1026
{
1027
    setMessageMetaData(msg);
1028

  
1029
    //
1030
    // check current state
1031
    //
1032
    if (executionState == asynchronous)
1033
    {
1034
        //
1035
        // error checking
1036
        //
1037
        // Note: it is permitted to send to an output gate. It is especially useful
1038
        // with several submodules sending to a single output gate of their parent module.
1039
        if (togate==NULL)
1040
                throw cRuntimeError("sendDirect(): destination gate pointer is NULL");
1041
        if (togate->getPreviousGate())
1042
                throw cRuntimeError("sendDirect(): module must have dedicated gate(s) for receiving via sendDirect()"
1043
                                                                " (\"from\" side of dest. gate `%s' should NOT be connected)",togate->getFullPath().c_str());
1044
        if (msg==NULL)
1045
                throw cRuntimeError("sendDirect(): message pointer is NULL");
1046
        if (msg->getOwner()!=this)
1047
        {
1048
                if (this!=simulation.getContext())
1049
                        throw cRuntimeError("sendDirect() of module (%s)%s called in the context of "
1050
                                                                        "module (%s)%s: method called from the latter module "
1051
                                                                        "lacks Enter_Method() or Enter_Method_Silent()? "
1052
                                                                        "Also, if message to be sent is passed from that module, "
1053
                                                                        "you'll need to call take(msg) after Enter_Method() as well",
1054
                                                                        getClassName(), getFullPath().c_str(),
1055
                                                                        simulation.getContext()->getClassName(),
1056
                                                                        simulation.getContext()->getFullPath().c_str());
1057
                else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage() && msg->getArrivalModuleId()==getId())
1058
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
1059
                                                                        "currently scheduled as a self-message for this module",
1060
                                                                        msg->getClassName(), msg->getName());
1061
                else if (msg->getOwner()==&simulation.msgQueue && msg->isSelfMessage())
1062
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
1063
                                                                        "currently scheduled as a self-message for ANOTHER module",
1064
                                                                        msg->getClassName(), msg->getName());
1065
                else if (msg->getOwner()==&simulation.msgQueue)
1066
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, it is "
1067
                                                                        "currently in scheduled-events, being underway between two modules",
1068
                                                                        msg->getClassName(), msg->getName());
1069
                else
1070
                        throw cRuntimeError("sendDirect(): cannot send message (%s)%s, "
1071
                                                                        "it is currently contained/owned by (%s)%s",
1072
                                                                        msg->getClassName(), msg->getName(), msg->getOwner()->getClassName(),
1073
                                                                        msg->getOwner()->getFullPath().c_str());
1074
        }
1075

  
1076
        simtime_t arrivalTime = now + delay;
1077
        if (arrivalTime < t_end) // TODO: Consider channel delay!
1078
            throw cRuntimeError("sendDirect(): send delay shorter than processing delay %s",delay.str().c_str());
1079

  
1080
        if (delay == 0 && currentEventPriority < msg->getSchedulingPriority()) {
1081
            throw cRuntimeError("sendDirect(): priority of scheduled Event larger than scheduling event and equal starting times => scheduling in the past");
1082
        }
1083

  
1084
        // set message parameters and send it
1085
        msg->setSentFrom(this, -1, now);
1086

  
1087
        bool keepit = togate->deliver(msg, arrivalTime);
1088
        if (!keepit)
1089
                delete msg;
1090
        return 0;
1091
    }
1092
    else  // sync execution
1093
    {
1094
    	return cSimpleModule::sendDirect(msg, delay, duration, togate);
1095
    }
1096
}
src/sim/csimulation.cc
40 40
#include "cconfiguration.h"
41 41
#include "ccoroutine.h"
42 42
#include "cthreadpool.h"
43
#include "casyncmodule.h"
44 43
#include "cbarriermessage.h"
45 44
#include "cconfiguration.h"
46 45
#include "cconfigoption.h"
......
677 676
            throw cRuntimeError("Activity-Model not supported with Horizon.");
678 677
        }
679 678

  
680
        // check if this module supports parallel execution
681
        if (mod->isAsyncModule())
682
        {
683
            // yes, it does. Next, check if this event should be executed
684
            // in parallel
685
            cAsyncModule* aMod = (cAsyncModule*) mod;
686

  
687
            simtime_t duration = msg->getEventDuration();
688
            bool sequentialExecution = (duration == SimTime::simTimeSequentialExecution);
689

  
690
            if (sequentialExecution)
691
                duration = SimTime::simTimeZero;
692

  
693
            if (duration < SimTime::simTimeZero)
694
            {
695
                throw cRuntimeError("negative event duration not allowed.");
696
            }
697

  
698
            bool mayPar = aMod->mayParallelize(msg, duration);
699
            // execute this event in parallel
700
            if (mayPar && threaded && !sequentialExecution)
701
            {
702
                //printf("Offloading: %s\n",mod->getName());
703
                threadPool->insertTask(msg, duration);
704
                // the threadpool unsets the module busy after it finishes the event
705
            }
706
            else
707
            {
708
                // set the context for sequential execution
709
                setContext(mod);
710
                setContextType(CTX_EVENT);
711

  
712
                EVCB.simulationEvent(msg);
713

  
714
                msg->setPreviousEventNumber(event_num);
715

  
716
                sequentialWatch.reset();
717
                sequentialWatch.startTicking();
718
                // take ownership in callHandleMessage after concurrency check
719
                aMod->callHandleMessage(msg);
720
                sequentialWatch.stopTicking();
721

  
722
                //Store measured complexity and write to file
723
                EVCB.simulationEventEnd(sequentialWatch.getTicksTime());
724

  
725
                // take ownership in callHandleMessage after concurrency check
726
                // unset busy to release module for further events
727
                aMod->unsetBusy();
728
            }
729
        }
730
        else
731
        { //The module is not a cAsyncModule
732

  
733
            // set the context for sequential execution
734
            setContext(mod);
735
            setContextType(CTX_EVENT);
736

  
737
            //Disabled logging for simpleModules as we assume to have a duration.
738
            //EVCB.simulationEvent(msg);
739
            // store arrival event number of this message; it is useful input for the
740
            // sequence chart tool if the message doesn't get immediately deleted or
741
            // sent out again
742
            msg->setPreviousEventNumber(event_num);
743

  
744
            // take owner here: no danger of a race condition since
745
            // simple modules are only called from here
746
            mod->take(msg);
747
            // if there was an error during simulation, handleMessage()
748
            // will come back with an exception
749
            mod->handleMessage(msg);
750
        }
679
		simtime_t duration = msg->getEventDuration();
680
		bool sequentialExecution = (duration == SimTime::simTimeSequentialExecution);
681

  
682
		if (sequentialExecution)
683
			duration = SimTime::simTimeZero;
684

  
685
		if (duration < SimTime::simTimeZero)
686
		{
687
			throw cRuntimeError("negative event duration not allowed.");
688
		}
689

  
690
		bool mayPar = mod->mayParallelize(msg, duration);
691
		// execute this event in parallel
692
		if (mayPar && threaded && !sequentialExecution)
693
		{
694
			//printf("Offloading: %s\n",mod->getName());
695
			threadPool->insertTask(msg, duration);
696
			// the threadpool unsets the module busy after it finishes the event
697
		}
698
		else
699
		{
700
			// set the context for sequential execution
701
			setContext(mod);
702
			setContextType(CTX_EVENT);
703

  
704
			EVCB.simulationEvent(msg);
705

  
706
			msg->setPreviousEventNumber(event_num);
707

  
708
			sequentialWatch.reset();
709
			sequentialWatch.startTicking();
710
			// take ownership in callHandleMessage after concurrency check
711
			mod->callHandleMessage(msg);
712
			sequentialWatch.stopTicking();
713

  
714
			//Store measured complexity and write to file
715
			EVCB.simulationEventEnd(sequentialWatch.getTicksTime());
716

  
717
			// take ownership in callHandleMessage after concurrency check
718
			// unset busy to release module for further events
719
			mod->unsetBusy();
720
		}
751 721

  
752 722
        //We have handled the Message, return
753 723
        setGlobalContext();
......
877 847
void cSimulation::setupLocalRNGs() {
878 848

  
879 849
    //
880
    // Walk through vect[] and setup RNGs for each cAsyncModule
850
    // Walk through vect[] and setup RNGs for each cSimpleModule
881 851
    //
882 852
    // TODO: Better way to do this? What about dynamically created Modules?
883
    cAsyncModule* mod = NULL;
853
    cSimpleModule* mod = NULL;
884 854
    for (int i = 1; i <= last_id; i++) {
885 855
        if (vect[i]) {
886
            mod = dynamic_cast<cAsyncModule*>(vect[i]);
856
            mod = dynamic_cast<cSimpleModule*>(vect[i]);
887 857
            if (mod) {
888 858
                mod->initLocalRNGs();
889 859
            }
src/sim/cspinningthreadpool.cc
23 23
#include "cspinningthreadpool.h"
24 24
#include "cmessage.h"
25 25
#include "cconfiguration.h"
26
#include "casyncmodule.h"
27 26
#include "cconfigoption.h"
28 27
#ifndef NOBARRIER
29 28
#	include "cbarriermessage.h"
......
92 91
    // NOTE: possible race condition with de-register module which sets vect[...]
93 92
    //       to NULL. However, shouldn't be a problem since vect is ever increasing
94 93
    //
95
    cAsyncModule* mod = (cAsyncModule*) simulation.vect[msg->getArrivalModuleId()];
94
    cSimpleModule* mod = (cSimpleModule*) simulation.vect[msg->getArrivalModuleId()];
96 95
    cThreadPool::setDefaultOwner(mod);
97 96

  
98 97
#ifndef NOBARRIER
src/sim/cthreadpool.cc
29 29
#include <unistd.h>
30 30
#include <sys/signal.h>
31 31

  
32
#include "cenvir.h"
32 33
#include "cthreadpool.h"
33 34
#include "cmessage.h"
34 35
#include "cconfiguration.h"
35
#include "casyncmodule.h"
36 36
#include "cdefaultlist.h"
37 37
#include "cbarriermessage.h"
38 38
#include "sysdep.h"
src/tkenv/Makefile
171 171
  ../../include/cpar.h \
172 172
  ../../include/globals.h \
173 173
  ../../include/cfsm.h \
174
  ../../include/casyncmodule.h \
175 174
  ../../include/omnetpp.h \
176 175
  ../../include/cvisitor.h \
177 176
  ../../include/cmersennetwister.h \
......
290 289
  ../../include/cpar.h \
291 290
  ../../include/globals.h \
292 291
  ../../include/cfsm.h \
293
  ../../include/casyncmodule.h \
294 292
  ../../include/omnetpp.h \
295 293
  ../../include/cvisitor.h \
296 294
  ../../include/cmersennetwister.h \
......
426 424
  ../../include/cenvir.h \
427 425
  ../../include/cmsgpar.h \
428 426
  ../../include/cstatistic.h \
427
  ../../include/cconfigoption.h \
428
  ../../include/cnumgen.h \
429 429
  inspector.h \
430 430
  ../../include/cchannel.h \
431 431
  ../../include/opp_string.h \
432 432
  ../envir/intervals.h \
433 433
  ../../include/simkerneldefs.h \
434
  ../../include/random.h \
434 435
  ../../include/csimulation.h \
435 436
  ../../include/cdisplaystring.h \
436 437
  ../../include/cobject.h \
......
441 442
  ../../include/cdensityestbase.h \
442 443
  ../../include/cdefaultlist.h \
443 444
  ../../include/cstddev.h \
445
  ../../include/crng.h \
444 446
  ../../include/simutil.h \
445 447
  ../../include/cmessageheap.h
446 448
$O/logbuffer.o: logbuffer.cc \
......
547 549
  ../../include/cenvir.h \
548 550
  ../../include/cmsgpar.h \
549 551
  ../../include/cstatistic.h \
552
  ../../include/cconfigoption.h \
553
  ../../include/cnumgen.h \
550 554
  inspector.h \
551 555
  ../../include/cchannel.h \
552 556
  ../../include/opp_string.h \
553 557
  ../envir/intervals.h \
554 558
  ../../include/simkerneldefs.h \
559
  ../../include/random.h \
555 560
  ../../include/csimulation.h \
556 561
  ../../include/cdisplaystring.h \
557 562
  ../../include/cobject.h \
......
563 568
  ../../include/cdensityestbase.h \
564 569
  ../../include/cdefaultlist.h \
565 570
  ../../include/cstddev.h \
571
  ../../include/crng.h \
566 572
  ../../include/simutil.h \
567 573
  ../../include/cmessageheap.h \
568 574
  tkenv.h
......
608 614
  ../../include/cpar.h \
609 615
  ../../include/globals.h \
610 616
  ../../include/cfsm.h \
611
  ../../include/casyncmodule.h \
612 617
  ../../include/omnetpp.h \
613 618
  ../../include/cvisitor.h \
614 619
  ../../include/cmersennetwister.h \
......
758 763
  ../../include/cmessageheap.h \
759 764
  tkenv.h \
760 765
  statinsp.h
766
$O/tclcode.o: tclcode.cc
761 767
$O/tkcmd.o: tkcmd.cc \
762 768
  ../envir/args.h \
763 769
  ../../include/regmacros.h \
......
818 824
  ../../include/simtime_t.h \
819 825
  ../../include/cenvir.h \
820 826
  ../../include/cmsgpar.h \
827
  ../../include/cnumgen.h \
828
  ../../include/cconfigoption.h \
821 829
  ../../include/cclassdescriptor.h \
822 830
  ../../include/cstatistic.h \
823 831
  inspector.h \
......
825 833
  ../envir/intervals.h \
826 834
  ../../include/opp_string.h \
827 835
  ../../include/simkerneldefs.h \
836
  ../../include/random.h \
828 837
  ../../include/csimulation.h \
829 838
  ../../include/cdisplaystring.h \
830 839
  tkdefs.h \
......
836 845
  ../../include/cdensityestbase.h \
837 846
  ../../include/cdefaultlist.h \
838 847
  ../../include/cstddev.h \
848
  ../../include/crng.h \
839 849
  ../../include/simutil.h \
840 850
  ../../include/cmessageheap.h \
841 851
  tkenv.h
......
865 875
  ../../include/clistener.h \
866 876
  ../../include/cscheduler.h \
867 877
  ../../include/cpar.h \
878
  tclcode.cc \
868 879
  ../../include/globals.h \
869 880
  ../envir/appreg.h \
870 881
  ../../include/cvisitor.h \
......
898 909
  ../../include/simtime_t.h \
899 910
  ../../include/cmsgpar.h \
900 911
  ../../include/cstatistic.h \
912
  ../../include/cnumgen.h \
901 913
  ../../include/cconfigoption.h \
902 914
  inspector.h \
903 915
  ../../include/cchannel.h \
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff