Statistics
| Branch: | Revision:

root / include / ChangeLog @ 47c4b975

History | View | Annotate | Download (81 KB)

1 01873262 Georg Kunz
2010-06-11  ------ omnetpp-4.1 released ------
2
3
2010-06-11  Andras Varga
4
5
	* cSimulation: added getSimulationStage()
6
7
	* cException: exception object now stores simulation stage, event 
8
	number and simulation time as well; also added getFormattedMessage()
9
	method that puts together the complete error message from its pieces.
10
11
2010-06-09  Andras Varga
12
13
	* cGate: added utility functions findTransmissionChannel(),
14
	getIncomingTransmissionChannel(), findIncomingTransmissionChannel().
15
16
2010-05-31  ------ omnetpp-4.1rc2 released ------
17
18
2010-05-29  Andras Varga
19
20
	* cChannel: added forceTransmissionFinishTime(simtime t), so that 
21
	channels can support aborted transmissions (needed e.g. for Ethernet).
22
23
2010-05-28  Andras Varga
24
25
	* cChannel: added getNominalDatarate(). This is often needed in models,
26
	for example in INET to fill in the interface entry.
27
28
	* minor: cITimestampedValue::simtimeValue() return type changed from
29
	const SimTime& to SimTime so that the code works with simtime_t=double
30
	as well.
31
32
2010-05-22  Andras Varga
33
34
	* added forgetXMLDocument(filename) and flushXMLDocumentCache() to
35
	cEnvir (see bug #131)
36
37
	* cPar: added a note to the xmlValue() method that the lifetime of
38
	the returned objects may be limited. Modules should NOT hang on to
39
	cXMLElement pointers between events!
40
41
2010-05-07  Andras Varga
42
43
	* restored cChannel::calculateDuration() that was removed in 4.1b3,
44
	as feedback indicates it does have utility value
45
46
2010-05-06  Andras Varga
47
48
	* Enter_Method_Silent() now may take arguments (printf-like arg list).
49
	Also, it now logs the call into the eventlog file (and the resulting
50
	string (if given) is recorded as the method name).
51
52
2010-04-25  Andras Varga
53
54
	* added cComponent::isChannel() utility method
55
56
	* cChannel: introduced MessageSentSignalValue to make transmission
57
	details (result_t) available in listeners of the "messageSent"
58
	channel signal
59
60
	* cConfiguration: substituteVariables() made public
61
62
	* new NED function: expand(). It substitutes ${} config variables
63
	into a string. Possible use: in NED parameters like the following:
64
        string fname = default(expand("${resultdir}/${configname}-${runnumber}.txt"));
65
66
2010-04-20  ------ omnetpp-4.1b4 released ------
67
68
2010-04-19  Andras Varga
69
70
	* channel's main function process(), introduced in the previous beta,
71
	renamed to processMessage() for consistency with handleMessage().
72
73
2010-04-18  Andras Varga
74
75
	* cMessage, cPacket: several methods made virtual, most notably
76
	encapsulate() and decapsulate(), to allow customizing the behavior
77
	in subclasses
78
79
	* cPacket: getEncapsulatedMsg() renamed to getEncapsulatedPacket()
80
	to better describe its function. The old method was left there for
81
	backward compatibility; it is deprecated and delegates to the new
82
	method.
83
84
	* cClassFactory renamed to cObjectFactory
85
86
2010-04-01  Andras Varga
87
88
	* cStringTokenizer: added copy constructor and assignment operator
89
90
2010-03-31  Rudolf Hornig
91
92
	* handleParameterChange() is called for each component with
93
	parameterName=NULL after the last stage of the initialization phase.
94
	This allows the components to refresh their cached parameter values
95
	if some parameters were changed during the initialization phase.
96
	This is necessary because handleParameterChange() is not called during
97
	the component's initialization phase.
98
99
2010-03-14  ------ omnetpp-4.1b3 released ------
100
101
2010-03-10  Andras Varga
102
103
	* When recording a histogram object into the scalars file (see
104
	cComponent::recordStatistic(), cStatistics::record(), etc.),
105
	its transform() method gets invoked to force it set up the histogram
106
	cells, provided it was not already invoked.
107
108
	* cVarHistogram: createEquiProbableCells() renamed to
109
	createEquiprobableCells() (lowercase "p")
110
111
	* cOutVector: added setRecordDuringWarmupPeriod() and getRecordDuring-
112
	WarmupPeriod() methods.
113
114
2010-03-01  Andras Varga
115
116
	* cGate: removed isBusy() and getTransmissionFinishTime(), as they
117
	were confusing (they ignored any propagation delay up to the
118
	transmission channel); they had bad performance characteristics
119
	(they linerarly searched for the transmission channel every time);
120
	and they threw an error if the path didn't contain a transmission
121
	channel at all.
122
123
2010-02-27  Andras Varga
124
125
	* created cHistogram class by merging cDoubleHistogram and cLongHistogram
126
	functionality.
127
128
2010-02-15  Andras Varga
129
130
	* cChannel: deliver() method semantics changed, method renamed to
131
	process(), and argument list changed. Reason is to decrease the
132
	amount of code that needs to be written when implementing a new
133
	channel class, and to improve reusability via subclassing.
134
	See documentation in the code.
135
136
2010-01-29  Andras Varga
137
138
	* cProperty: getNumValues() to return 0 (instead of thowing an error)
139
	when the property does not contain the given property key.
140
141
2010-01-23  Andras Varga
142
143
	* implemented signals mechanism. See new classes cIListener and
144
	cListener; new cComponent methods registerSignal(), getSignalName(),
145
	emit(), mayHaveListeners(), hasListeners(), subscribe(), unsubscribe(),
146
	isSubscribed(), getLocalListenedSignals(), getLocalSignalListeners();
147
	constants PRE_MODEL_CHANGE and POST_MODEL_CHANGE; new class
148
	cModelChangeNotification and subclasses; and new "Signals" section
149
	in the Manual.
150
151
2009-09-14  Rudolf Hornig
152
153
	* cGate: added getNameSuffix() method.
154
155
2009-08-06  Andras Varga
156
157
	* added cArray::setCapacity()/getCapacity(). setCapacity() can be used
158
	to trim back the internally allocated array after a large number of
159
	items have been removed from it.
160
161
2009-07-25  Andras Varga
162
163
	* FES performance improvement: cMessageHeap was changed to more
164
	efficiently handle the insertion and removal of events scheduled
165
	for the current simulation time. Such events are actually quite common
166
	due to plain (zero delay, zero datarate) connections between modules.
167
	For more info, see src/sim/ChangeLog.
168
169
	* performance improvement: cMessage::getArrivalTime() was consuming
170
	10-20% of CPU time in many configurations, see bug #22,
171
	http://dev.omnetpp.org/bugs/view.php?id=22.
172
173
	Solution: change return type of getArrivalTime() and other methods
174
	from simtime_t to simtime_t_retval (which is a new typedef that maps to
175
	const simtime_t&). Reason: on some platforms and configurations, esp.
176
	in debug builds, returning a const reference is more efficient than
177
	returning by value (even though SimTime is only 64 bits and would fit
178
	in register(s)).
179
180
	On 64-bit architectures and optimized builds (-O2/-O3) this change may
181
	actually decrease performance; this is to be investigated, and
182
	simtime_t_retval conditionally defined as plain simtime_t.
183
184
2009-07-10  Andras Varga
185
186
	* cClassDescriptor: added findField() method
187
188
2009-06-25  Andras Varga
189
190
	* cModuleType: added isSimple()
191
192
	* corrected the definition of NULL according to C++ rules
193
194
2009-04-25  Andras Varga
195
196
	* cModule::addGate() to return the gate pointer whenever a single gate
197
	is created (for inout gates [~gate pair] and vectors it returns NULL)
198
199
2009-03-12  ------ omnetpp-4.0 released ------
200
201
2009-03-28  Andras Varga
202
203
	* cClassDescriptor: getFieldAsString() signature change (return
204
	std::string instead of taking char *buf, int bufsize)
205
206
2009-03-09  Andras Varga
207
208
	* added factory methods cIdealChannel::create(), cDelayChannel::create(),
209
	cDatarateChannel::create(), which are easier to find and remember than
210
	previous ones (cChannelType::createIdealChannel()/createDelayChannel()/
211
	createDatarateChannel() -- those are deprecated now).
212
213
2009-02-27  ------ omnetpp-4.0rc2 released ------
214
215
2009-02-18  Andras Varga
216
217
	* added cSimulation::clearLoadedNedFiles() function
218
219
2009-02-07  Andras Varga
220
221
	* cNEDFunction and Define_NED_Function(): changed signature string
222
	to a C-like syntax.
223
224
2009-01-13  Andras Varga
225
226
	* Several changes to make it easier to use the simulation kernel
227
	as a C++ library, for embedding simulations into other programs:
228
229
	- created cRunnableEnvir by factoring out run() method from cEnvir;
230
	simulation user interfaces like Cmdenv or Tkenv subclass from
231
	cRunnableEnvir, but other custom environment objects do not need to.
232
233
	- added cNullEnvir, a default do-nothing implementation for cEnvir.
234
235
	- cConfiguration split to a smaller cConfiguration plus a
236
	cConfigurationEx class that adds the rest of the methods.
237
	When the simulation kernel is used as library, only cConfiguration
238
	needs to be implemented. cConfigurationEx is needed only when one
239
	wants to plug in a different configuration object into the existing
240
	Envir library, replacing SectionBasedConfig.
241
242
	- cSimulation now creates a cSequentialScheduler by default (no need
243
	to do it manually); if it's not good, a different scheduler object
244
	can be installed with the setScheduler() method.
245
246
	- support for multiple instances of cSimulation. "simulation" is
247
	no longer a global variable but a macro that expands to
248
	cSimulation::getActiveSimulation(). Multiple cSimulation objects
249
	may coexist; before invoking any function in the simulation library,
250
	the correct cSimulation instance must be activated with
251
	cSimulation::setActiveSimulation().
252
253
	- multiple environment objects may coexist; in fact, there must be
254
	exactly one associated with every cSimulation instance. "ev" now
255
	maps to cSimulation::getActiveEnvir() which is short for
256
	cSimulation::getActiveSimulation->getEnvir(). cSimulation::
257
	setActiveSimulation() which activates a cSimulation instance
258
	also activates its corresponding environment object.
259
260
	- added cSimulation::loadNedText(), to facilitate creating
261
	self-contained executables by embedding NED source as string
262
	literals.
263
264
	- two new related examples: samples/embedding and samples/embedding2.
265
266
2008-12-12  ------ omnetpp-4.0rc1 released ------
267
268
2008-02-25  Andras Varga
269
270
	Summary of changes for omnetpp-4.0 (2006..2008):
271
272
	Lots of breaking changes. We opted for doing all necessary
273
	changes at once (3.3 -> 4.0), instead of scattering them
274
	over multiple releases after 4.0. So only one porting is needed,
275
	and API can be kept more stable over the coming releases.
276
277
	General:
278
	- "get" verb added to the names of nearly all getter methods; notable
279
	   exceptions are STL-like names like size(), empty(), length(),
280
	   end(), str(), c_str(); par() and gate() methods of cModule;
281
	   boolValue(), longValue(), stringValue() etc methods of cPar
282
	   (already consistent with Java); info(), detailedInfo();
283
	   intRand(), dblRand() and other cRNG methods.
284
	   Methods returning bools begin with "is", "has", "contains" or a
285
	   similar verb. [Change decided by voting on the mailing list]
286
287
	- <omnetpp.h> now provides the C99 integer types and limit macros,
288
	  even on systems that don't have <stdint.h> (for example, MSVC does
289
	  not have it). This includes int8_t, uint8_t,..int64_t, uint64_t types;
290
	  INT8_MAX, UINT64_MAX, etc. In addition, it also provides shorter names
291
	  (int8, uint8,...); they are provided as macros, so if they collide
292
	  with definitions in some external code, they can be undefined after
293
	  including <omnetpp.h>.
294
295
	Simulation time:
296
	- simtime_t is now not double but class SimTime (64-bit fixed point number)
297
	- simtime exponent is base 10, and set globally
298
	- there is no implicit conversion from SimTime to double. However,
299
	  to alleviate this pain, at many places overloaded functions have
300
	  been added that take simtime_t.
301
	- simtimeToStr(), strToSimtime() are no longer (use SimTime methods
302
	  instead, or the compatibility macros described below!)
303
	- simTime() was moved out of the cSimpleModule class: it became a global
304
	  function which delegates to simulation.getSimTime()
305
306
	Simtime compatibility mode:
307
	- if needed, the simkernel can be compiled with simtime_t = double.
308
	  For that, compile everything with USE_DOUBLE_SIMTIME defined
309
	  (add -DUSE_DOUBLE_SIMTIME to CFLAGS). If you want to ensure that
310
	  models compile with both int64-based and double simtime_t, use
311
	  the following macros to convert simtime_t from/to double and string:
312
	  SIMTIME_STR(t), SIMTIME_DBL(t), STR_SIMTIME(s), SIMTIME_TTOA(buf,t).
313
	  MAXTIME is also defined correctly for both simtime types.
314
315
	Converting source code to the new int64-based simtime_t:
316
	- for the large part, code is supposed to compile without much change
317
	- most errors come from using "double" variables which should really be
318
	  "simtime_t". E.g. if you see variables like double timeout, double
319
	  interval, double age, etc, they should all be changed to simtime_t.
320
	  This applies to message fields within .msg files as well: some of
321
	  the "double" ones may need to be changed to "simtime_t".
322
	- when conversion to double is still needed, use SIMTIME_DBL(t) or t.dbl().
323
	- ev << simtimeToStr(t) is to be changed to: ev << t;
324
325
	Gate handling:
326
	- introduced inout gates, which resulted in some changes listed below
327
	- with inout gates, gate("gatename") does not work, use gate("gatename$i")
328
	  or gate("gatename$o") instead
329
	- if a gate vector is zero size, there's no cGate object for it at all.
330
	  But hasGate(), gateType(), isGateVector(), gateSize() do work.
331
	- for gate direction, use the new cGate::Type enum instead of the
332
	  'I' and 'O' characters (though characters continue to work)
333
	- setGateSize() return type changed from int to void (when resizing an
334
	  inout gate, it would have to return the two ids)
335
	- addGate() return type changed to void (when an inout gate is created,
336
	  it would have to return two cGate* pointers)
337
	- gate("xxx") now throws error if gate is not found, instead of returning NULL
338
	- gate("xxx") now won't return gate "xxx[0]"
339
	- gate("out")->size() does not work, because gate("out") throws an error
340
	  ("not found") if "out" is a vector gate; gate("out",0)->size() will work,
341
	  but only if out[] is of nonzero size (otherwise you'll get the "gate out[0]
342
	  not found" error). Best is to use gateSize("out"), a cModule member function.
343
	- removed setTo(), setFrom() methods; use connectTo() instead!
344
	- isRouteOK() renamed to isPathOK()
345
	- fromGate()/toGate() renamed to getPreviousGate()/getNextGate()
346
	- sourceGate()/destinationGate() renamed to getPathStartGate()/getPathEndGate()
347
	- dynamic gate creating changed:
348
	    - removed cGate::setOwnerModule() and setIndex()
349
	    - now there is addGate() and setGateSize()
350
	- to help connecting gate vectors, two utility methods were added:
351
	    - getOrCreateFirstUnconnectedGate()
352
	    - getOrCreateFirstUnconnectedGatePair()
353
	- added setDeliverOnReceptionStart() flag, which may be invoked only on
354
	  simple module input gates. It defines whether a packet that travelled
355
	  through a channel with datarate (i.e. has nonzero duration) is
356
	  delivered to the module at the time reception begins, or when
357
	  reception ends. (In OMNeT++ 3.x, only the latter option was
358
	  available).
359
	- added getTransmissionChannel() which returns *the* transmission
360
	  channel in the path
361
	- transmissionFinishes() renamed to getTransmissionFinishTime()
362
	- gates that have the @loose or @directIn property set in the NED file
363
	  may remain unconnected (ie no error will be raised, even if
364
	  "allowunconnected" is not specified in the connections section)
365
366
	Channels:
367
	- channels became first-class citizens: they have a common base class
368
	  (cComponent) with cModule, they participate in the initialize()/
369
	  finish() protocol, and so on.
370
	- cBasicChannel renamed to cDatarateChannel
371
	- added calculateDuration(cMessage *msg) method into channels
372
	- removed delay(), setDelay(), error(), setError(), dataRate(),
373
	  setDataRate() methods from cGate: please use methods from the gate's channel
374
	  instead: check_and_cast<cDatarateChannel *>(gate->channel())->setDelay(0.1);
375
	  or use generic component parameter access instead: gate->channel()->par("delay")=0.1.
376
	- "error" parameter renamed to "ber" (bit error rate or BER, cDatarateChannel methods
377
	  getBitErrorRate/setBitErrorRate)
378
	- added "per" parameter (packet error rate or PER, cDatarateChannel methods
379
	  getPacketErrorRate/setPacketErrorRate)
380
	- added cIdealChannel which lets messages through without any change
381
	  and without any delay.
382
	- getFromGate() renamed to getSourceGate()
383
	- breaking change in cDatarateChannel behaviour: implicit queueing is
384
	  no longer supported: sending on a busy gate (that is, when simTime() <
385
	  gate->transmissionFinishTime()) results in an error. Thus, using a
386
	  special transmitter module (with an internal queue) is now sort of
387
	  mandatory when channels with data rate are in use.
388
	- setting channel parameters from the ini file:
389
	   (1) make the parameter input, e.g.:
390
	         a.out --> { delay=default(0); } --> b.in;
391
	   (2) add <fromgate-fullpath>.channel.<paramname> = <value> into the ini file, e.g.:
392
	         **.a.out.channel.delay = 10ms
393
	- now a connection path may only contain one cDatarateChannel (more precisely,
394
	  only one channel whose isTransmissionChannel() method returns true)
395
	- likewise, a sendDirect() call with nonzero duration may only be sent onto
396
	  a gate whose connection path does NOT contain any cDatarateChannel (or
397
	  channel whose isTransmissionChannel() method returns true)
398
399
	Dynamic module/channel creation:
400
	- finalizeParameters() must be called (for channels, this reads input params from omnetpp.ini;
401
	  for modules, also creates gates [since gate vector sizes may depend on parameter values])
402
403
	Exception handling changed:
404
	- now all our exceptions subclass from std::exception (e.g. cException extends std::exception)
405
	- exceptions are now thrown by value not by pointer (s/throw new/throw/g)
406
	- hint: catch std::exception if you don't need the exception to be of a specific type
407
408
	DisplayString:
409
	- parse() no longer interprets literal "\t", "\n" escape sequences; it is the job of the
410
	  NED or C++ compiler to convert those to 0x09, 0x0a etc. "\;", "\=", "\," can still be
411
	  used to escape those special characters, but they have to be entered into the NED or C++
412
	  source with *double* backslashes like "t=hello\\,world" (one will be eaten by the NED/C++
413
	  compiler, the other by the display string parser).
414
	- parse() now throws an error if the display string has invalid syntax. It used to return
415
	  a boolean which no one checked.
416
417
	cOutVector:
418
	- removed half-hearted tuple=2 support from cOutVector and underlying infrastructure
419
	- added methods for metadata annotation: setEnum(), setUnit(), setType(),
420
	  setInterpolationMode(), setMin(), setMax()
421
422
	cQueue:
423
	- head()/tail() removed, back()/front() added (insert at back, pop from front!);
424
	  because of head/tail change, iterator direction and meaning of insertBefore/insertAfter
425
	  has changed
426
	- boolean flag to specify ascending/descending order removed (because the
427
	  earlier default ascending=false was inconvenient, and silently changing
428
	  the default is not a good idea)
429
	- compat.h typedef cQueueIterator removed, as iterator semantic was changed in a
430
	  non-compatible way anyway
431
432
	New class: cPacketQueue
433
434
	cArray:
435
	- items() became size()
436
437
	Display strings:
438
	- connection display string is now stored in the channel, not the source gate
439
	- setDisplayString() methods removed
440
	- displayString() delegates to channel()->displayString(); if there's
441
	  no channel, it creates a cIdealChannel
442
	- module and channel display string access functions are now in the common
443
	  base class, cComponent
444
	- display string objects are now only created (from @display) when first accessed
445
446
	Gross renaming: cObject became cOwnedObject, cPolymorphic became cObject;
447
	- cNamedObject introduced in between.
448
	- cArray, cQueue still handle cObject (old cPolymorphic), i.e. they can work
449
	  with non-owned objects as well
450
451
	Introduced cComponent, a common base class for cModule and cChannel
452
	- new methods to mention: isModule(), nedTypeName(), etc
453
	- final garbage object collection can be turned on per module, by
454
	  invoking setPerformFinalGC(true)
455
456
	cSimpleModule, cSimulation:
457
	- removed: pause(), backtomod, pause_in_sendmsg (they were obsolete)
458
	- removed: breakpoint(), and its callback method in cEnvir, in Tkenv, etc..
459
	- sendDirect(): added overloaded methods that accept transmissionDelay as well
460
	- cancelEvent() now only allows cancelling self-messages
461
462
	cModule:
463
	- removed backgroundDisplayString()/setBackgroundDisplayString() and its compat
464
	  #defines displayStringAsParent() and setDisplayStringAsParent()
465
	- added isPlaceholder() to cModule
466
	- cPlaceHolderModule: renamed to cPlaceholderModule (lowercase h)
467
	- gate handling reorganized, so that gate IDs are stable (do not change
468
	  when the gate vector gets resized). Gate IDs are now interpreted as a
469
	  bitfield, so they cannot be used for iterating over all gates of a
470
	  module; cModule::GateIterator was introduced for this purpose.
471
	- gates() removed, as gate IDs are no longer integers in the 0..gates()-1
472
	  interval (use the new cModule::GateIterator for enumerating the gates).
473
	- added gateNames() method
474
	- className() for cModule (or cComponent in general) no longer lies
475
	  the NED type name, but returns the real C++ class name
476
477
	cMessage changes:
478
	- the length, bit error flag and encapsulated message cMessage fields
479
	  got factored out from cMessage, into the cPacket class (which extends
480
	  cMessage). All network packets (frames, datagrams, etc) are now
481
	  supposed to be subclassed from cPacket, not directly cMessage.
482
	  To port simulations into 4.0, in message descriptions (.msg files)
483
	  change relevant "message" keywords to "packet" (this will cause
484
	  the base class to be cPacket), and use casts to convert cMessage* to
485
	  cPacket* where needed: cPacket *pkt = check_and_cast<cPacket *>(msg).
486
	  We hope that on the long run this change will result in clearer code
487
	  in simulation models. To help porting, it is possible to compile
488
	  everything in a "backward compatibility mode" when cPacket is
489
	  just an alias to cMessage, and cMessage contains all fields.
490
	  For that, compile everything having WITHOUT_CPACKET defined
491
	  (add -DWITHOUT_CPACKET to CFLAGS).
492
	- the C++ type for message kind and priority changed from "int" to
493
	  "short", and priority was renamed to scheduling priority (methods
494
	  setSchedulingPriority/getSchedulingPriority)
495
	- added some extra fields required by sequence chart drawing: cause event
496
	  number, message id, message tree id, etc.
497
	- removed two static methods of limited usefulness: cmpbydelivtime(),
498
	  cmpbypriority().
499
500
	cPacket:
501
	- existing obsolete fields (protocol and pdu codes) were removed
502
	- the length, bit error flag and encapsulated message fields were moved
503
	  from cMessage into cPacket
504
	- methods associated with "length" got renamed, new method names are:
505
	        getBitLength(), setBitLength(), addBitLength()
506
	- length changed from long to int64 (reason: message length was limited
507
	  to 2 gigabits=256 megabytes on 32-bit architectures).
508
	  Affected functions:
509
		setLength() / setByteLength() / addLength() / addByteLength()
510
	        length() / byteLength()
511
	- added getDuration() and isReceptionStart() methods, which are related
512
	  to the last send over a channel with datarate, and to cGate's
513
	  deliverOnReceptionStart flag.
514
515
	Message parameters:
516
	- deprecated; type changed: cMsgPar instead of cPar
517
	- cMsgPar is the same as the old cPar, but features which are not needed for message parameter objects have been removed:
518
	  - removed support for interactively prompting the user for a value: input flag, prompt, read() method
519
	  - removed indirection (redirection) support
520
	  - removed support for storing expressions
521
522
	recordScalar() methods (cSimpleModule, cStatistic):
523
	- added optional "const char *unit" argument to all respective methods
524
	- cStatistic::recordScalar() renamed and split to record(), recordAs() and recordWithUnit()
525
	- cSimpleModule::recordScalar() methods moved to cComponent
526
	- see also: **.param-record-as-scalar = true
527
528
	cMessageHeap:
529
	- renamed getFirst() to removeFirst(), and get(cMessage*) to remove(cMessage*)
530
531
	cPar implementation changed
532
533
	cPar, etc:
534
	- setFromText() -> parse()
535
	- getAsText() -> str()
536
	- also cDisplayString: getString() -> str() (old getString() deprecated)
537
	NOTE: inconsistency with INET Framework: IPAddress, IPv6Address, MACAddress: str()
538
539
	cEnvir refactoring:
540
	- motivation: break sim_std.dll dependence on envir.dll (mainly the
541
	  "ev" global variable)
542
	- "ev" is no longer a variable, but a macro which expands to (*evPtr)
543
	- cEnvir no longer subclasses from std::ostream, but instead redirects
544
	  all ev<< calls to an internal std::ostream instance
545
	- cEnvir is no longer a concrete class, but an abstract base class with
546
	  lots of pure virtual methods
547
	- removed puts(const char *) and gets(const char *)
548
549
	cCommBuffer:
550
	- added pack/unpack methods for int64
551
	- array packing methods now take const pointers
552
	- doPacking()/doUnpacking() methods moved out of opp_msgc-generated
553
	  code into the simkernel headers (packing.h, included by omnetpp.h)
554
555
	Misc:
556
	- cBag class removed
557
558
	- global connect() function removed (use cGate::connectTo() instead!)
559
560
	- global findXXX(const char *name) functions turned into static cXXX::find(const char *name);
561
	   - findLink()
562
	   - findFunction
563
	   - findEnum
564
	   - findChannelType
565
	   - findNetworkType()
566
	   - findModuleType()
567
568
	- cModuleType::buildInside(mod) became protected (was deprecated anyway)
569
570
	- cModule: deprecated methods phase(), setPhase() removed
571
572
	- removed writeContents() altogether
573
574
	- removed min(double,double), max(double,double), equal(double,double,double).
575
	  Use std::min and std::max instead.
576
577
	- snapshot file became XML
578
579
	- deprecated cSubmodIterator -- use cModule::SubmoduleIterator instead! cModule::ChannelIterator also added
580
581
	- cSimpleModule::end() -- removed, as there was little value in it. To terminate
582
	  an activity() module, simply return from the activity() method, or call the new
583
	  halt() method to end the module while preserving the local variables for inspection.
584
585
	- added cSimpleModule::halt()
586
587
	- cSimpleModule::deleteModule() -- in handleMessage()-based modules, this no longer
588
	  throws exception. That is, execution will continue normally after the deleteModule() call.
589
590
	- removed cSimpleModule::moduleState()
591
592
	- covariant return types for dup(). This might cause incompatibility with customized message
593
	  classes (.msg file with customize=true). The hand-coded class still contains cPolymorphic*
594
	  return type not the real class type, which results in error messages like:
595
	     ../Transport\TCP\TCPSegment.h(68) : error C2555: 'TCPSegment::dup': overriding virtual function
596
	     return type differs and is not covariant from 'TCPSegment_Base::dup'
597
	  Fix: change dup()'s return type to the real class.
598
599
	- several internal classes got removed/reorganized
600
601
	- cPar: new method stdstringValue() / operator std::string: this must be used with "volatile string" params
602
603
	- removed macros Min() and Max(), use std::min/std::max instead (<algorithm>);
604
	  also removed sgn()
605
606
	- cStringTokenizer: added asIntVector() and asDoubleVector() methods; TODO testing
607
608
	- cXMLElement, xmldoc(): mini-XPath expressions made more tolerant to whitespace
609
610
	Configuration handling rewritten, including cConfiguration.
611
612
	Run number handling:
613
	- run numbers were made entirely the matter of cEnvir. cSimulation::runNumber()
614
	  got removed. Also removed runNumber from the arg list of cEnvir callback
615
	  functions.
616
617
	Removed several obsolete functions:
618
	- calls to myxxx() functions should be replaced with opp_xxx() in the code:
619
		myrandomize(...)
620
		genk_myrandomize(...)
621
		mystrdup(...)
622
		mystrcpy(...)
623
		mystrcmp(...)
624
		mystrmatch(...)
625
		fastconcat(...)
626
		indexedname(...)
627
	- calls to genk_xxx() functions should be replaced with their "genk_"-less
628
	  counterparts  (and the first arg dropped or moved to the last place):
629
		genk_uniform(double gen_nr, double a, double b);
630
		genk_intuniform(double gen_nr, double a, double b);
631
		genk_exponential(double gen_nr, double p);
632
		genk_normal(double gen_nr, double mean, double variance);
633
		genk_truncnormal(double gen_nr, double mean, double variance);
634
	- other:
635
	        correct(const char *) got renamed to opp_nulltoempty(const char *)
636
637
	Statistics classes:
638
	- cStatistic: renamed samples() to count(). This affects cStdDev,
639
	  cWeightedStdDev and basically all statistics classes (they all
640
	  inherit from cStatistic)
641
	- cWeightedStdDev: implemented stddev(); also fixed min() and max()
642
	  (they bogusly returned min/max of the weight*value products).
643
	  For stddev(), code is based on the patch from Peter Woitek.
644
	- cStatistic: added 3 new functions, to access values underlying weighted
645
	  statistics: weightedSum(), sqrSumWeights(), weightedSqrSum()
646
	- cStatistic: added isWeighted()
647
	- cStatistic: added merge(cStatistic *) for aggregating statistics,
648
	  and implemented it in subclasses
649
	- cDensityEstBase etc: transformed() renamed to isTransformed();
650
	  added setCellSize()
651
	- cLongHistogram: revised the way histogram cells are set up. Now it
652
	  throws an error if all given constraints cannot be satisfied (so that
653
	  numCells*cellSize==rangeMax-rangeMin, all integers)
654
655
	cTopology changes:
656
	- added extractFromNetwork(Predicate*), to support specifying conditions
657
	  in a type-safe way (without void* casts)
658
	- extractByModuleType() not longer exists, use the new extractByNedTypeName()
659
	  method instead. Code like
660
	    topo.extractByModuleType("Host", "Router", NULL);
661
	  should be replaced by something like
662
	    topo.extractByModuleType(cStringTokenizer("Host Router").asVector());
663
	- extractByParameter() arg list changed
664
665
	Files renamed (Note: simulation models should only refer to <omnetpp.h>!)
666
	     --OLD--          --NEW--
667
	     cconfig.h        cconfiguration.h
668
	     chist.h          chistogram.h
669
	     cllist.h         clinkedlist.h
670
	     cmsgheap.h       cmessageheap.h
671
	     coutvect.h       coutvector.h
672
	     cstat.h          cstatistic.h
673
	     cdensity.h       cdensityestbase.h
674
	     cstrtokenizer.h  cstringtokenizer.h
675
	     ctopo.h          ctopology.h
676
	     cfunction.h      cmathfunction.h
677
	     csimul.h         csimulation.h
678
	     ...
679
680
	* MSVC 6.0 support dropped (the compiler is over 10+ years old, and
681
	does not support many modern C++ features like covariant return types)
682
683
	* VC++ libs compiled with /MT (mulTithreaded C lib) with VC7.1 as well
684
685
	* out-of-directory build, and other Makefile changes
686
687
2008-02-24  Andras Varga
688
689
	* merged last diffs from head of the 3.x branch
690
691
2006-12-04  Andras Varga
692
693
	* added hasher.h, for cHasher to calculate simulation fingerprints
694
695
	* csimul.h: added method hasher() to provide access to fingerprint
696
	calculation for simulation models.
697
698
2006-11-15  Andras Varga
699
700
	* compat.h: removed some very old compatibility #defines
701
702
2006-11-12  Andras Varga
703
704
	* several methods and classes already marked as DEPRECATED in their
705
	documentations and doc/API-Changes.txt are now marked as such with GCC's
706
	__attribute__((__deprecated__)) facility, which results in warnings
707
	during compilation of code that uses them. Those pieces of code need
708
	to be changed in order to be compatible with future OMNeT++ versions.
709
	MSVC equivalent is __declspec(deprecated).
710
711
	* defs.h: added _OPPDEPRECATED macro
712
713
2006-11-07  Andras Varga
714
715
	* cDensityEstBase: added cellInfo() method
716
717
2006-11-06  Andras Varga
718
719
	* internal class cStructDescriptor refactored and renamed to cClassDescriptor
720
721
2006-10-21  ------ omnetpp-3.3 released ------
722
723
2006-09-13  Andras Varga
724
725
	* cconfig.h: getAsFilenames() enhancement: if directory name contains
726
	spaces, adds quotation marks.
727
728
	* cconfig.h: added getAsFilename()
729
730
2006-03-19  Andras Varga
731
732
	* csimul.h: added method guessNextEvent() for use from Tkenv.
733
734
2006-03-15  Andras Varga
735
736
	* distrib.h: fixed a documentation bug and refined description of
737
	gamma_d() [feedback from Patrick McDonnell]
738
739
2006-02-27  Andras Varga
740
741
	* cenvir.h: added getParsimProcId() and getParsimNumPartitions()
742
743
	* crng.h: added parsimProcId and parsimNumPartitions to the args of
744
	cRNG::initialize(), as every partition should get different random
745
	number streams
746
747
2006-01-12  ------ omnetpp-3.2p1 released ------
748
749
2006-01-10  Andras Varga
750
751
	* platdep/time.h, platdep/socket.h: made it possible to choose between
752
	winsock.h and winsock2.h
753
754
2005-10-27  Andras Varga
755
756
	* csimul.h: setSimTime() added (internal use only!), needed for SystemC
757
	integration support
758
759
2005-10-19  ------ omnetpp-3.2 released ------
760
761
2005-10-09  Andras Varga
762
763
	* cpar.h: added conversion to/from short and unsigned short [patch
764
	from Omer Sinan Kaya]
765
766
2005-09-15  Andras Varga
767
768
	* csimplemodule.h: added method cancelAndDelete(cMessage *msg),
769
	for use in simple module destructors.
770
771
2005-09-14  Andras Varga
772
773
	* cpolymorphic.h, cobject.h, etc: dup() moved up to cPolymorphic, and
774
	return type changed to cPolymorphic. Once we drop MSVC 6.0 support,
775
	return types can be changed to class itself, i.e. in class Foo it can
776
	be defined as Foo *dup(). Unfortunately MSVC 6.0 doesn't support this.
777
778
	* cmodule.h, csimplemodule.h, ctypes.h, macros.h: signature of module
779
	constructors simplified, from
780
	    cModule(const char *name, cModule *parent) and
781
	    cSimpleModule(const char *name, cModule *parent, unsigned stack)
782
	to
783
	    cModule() and
784
	    cSimpleModule(unsigned stack=0)
785
	The purpose is to ease writing constructors, e.g. for a handleMessage()
786
	module class "PacketSink : public cSimpleModule", the constructor is
787
	just
788
	    PacketSink() {}
789
	instead of the former
790
	    PacketSink(const char *name, cModule *parent) :
791
	       cSimpleModule(name, parent, 0) {}
792
793
	Backwards compatibility: module classes using Module_Class_Members()
794
	(95%) are not affected. For module classes using hand-coded
795
	constructors, adding NULL as a default value to the "name" and "parent"
796
	ctor arguments will make the class work with both OMNeT++ 3.2 and
797
	earlier versions:
798
	    PacketSink(const char *name=NULL, cModule *parent=NULL) :
799
	       cSimpleModule(name, parent, 0) {}
800
	This affects very few modules, e.g. two in the current INET Framework
801
	release.
802
803
	Motivation: since cleanup-time garbage collection is off by default
804
	in OMNeT++ 3.2, users are encouraged to write proper destructors.
805
	However, destructors can only be written if constructors set pointer
806
	members of the class to NULL. (This is currently customarily done
807
	in the initialize() method; however, pointers must be initialized
808
	to NULL even if initialize() doesn't get called due to a runtime error
809
	earlier in another module's initialize(), otherwise the destructor will
810
	crash.) The Module_Class_Members() macro (currently used in 95% of
811
	the cases) defines an empty constructor, one cannot put statements
812
	into it -- so one must use hand-coded constructors. The new signature
813
	of constructors makes it possible to write much more compact code,
814
	and will make it more comfortable for users.
815
816
2005-09-12  Andras Varga
817
818
	* cxmlelement.h: several members of cXMLElement made const
819
820
	* cstrtokenizer.h: added hasMoreTokens() method
821
822
	* cenvir.h: added undisposedObject() method
823
824
2005-08-07  Andras Varga
825
826
	* cxmlelement.h: the builtin mini-XPath interpreter now understands
827
	parameters inside predicates, i.e. the following is valid syntax:
828
	"element[@attr=$PARAM]". Before, only literals were allowed, like
829
	"element[@attr='something']". Parameters values are supplied by
830
	a resolver object (cXMLElement::ParamResolver) which can be programmed
831
	by the user and passed into the mini-XPath evaluator.
832
833
	* cmessage.h: implemented reference counting of encapsulated messages.
834
	This should dramatically increase performance of wireless simulations
835
	where lots of message duplication is done (AirFrames) with most copies
836
	discarded without looking into them (noisy channel or wrong L2 dest
837
	address). There' nominal (<1%) performance penalty for other
838
	simulations.
839
840
2005-07-25  Andras Varga
841
842
	* coutvect.h: made it possible to record values into output vectors
843
	by a timestamp other than simTime(): added recordWithTimestamp()
844
	functions to cOutVector. (Increasing timestamp order must still be
845
	ensured.)
846
847
	* cmodule.h: modules can now get notified when a module parameter
848
	changes, by redefining the handleParameterChange(const char *parname)
849
	virtual	method of cModule.
850
851
	* ccommbuffer.h: moved packObject(), unpackObject(), checkFlag(),
852
	isNull() (renamed to packFlag) into cCommBuffer.
853
854
2005-07-24  Andras Varga
855
856
	* cdispstr.h: added setTagArg() method for numeric (long) argument as
857
	well. (Just converts it to string and calls the other setTagArg()).
858
859
	* cpar.h: added isConstant() member to cPar
860
861
	* cmessage.h: added cModule *senderModule() to cMessage
862
863
	* cmessage.h: if "vector" is a vector gate, msg->arrivedOn("vector")
864
	now checks if msg arrived one of the vector's gates. [hint from Ignacio
865
	Arenas Jimenez]
866
867
	* cxmlelement.h: added getFirstChildWithTagName(const char *tagname)
868
	and getNextSiblingByTagName(const char *tagname) to cXMLElement
869
870
	* envirext.h: added flush() to cOutputVectorManager and cOutputScalar-
871
	Manager classes
872
873
2005-07-23  Andras Varga
874
875
	* cwatch.h: WATCH() implementation changed: now anything can be watched
876
	that has operator<<. If it also has operator>> and it gets watched via
877
	WATCH_RW(), it can also be modified from the GUI. Objects and pointers
878
	to objects can also be watched with WATCH_OBJ() and WATCH_PTR().
879
880
	* added cstlwatch.h: macros WATCH_VECTOR(), WATCH_PTRVECTOR, etc
881
882
2005-06-25  Andras Varga
883
884
	* cpar.h: added default value to type parameter of setFromText().
885
886
2005-04-28  Andras Varga
887
888
	* cmessage.h: added byteLength(), setByteLength(), addByteLength()
889
	convenience functions. They just invoke the length(), setLength(),
890
	addLength() methods.
891
892
2005-04-21  Andras Varga
893
894
	* util.h: added simtimeToStrShort().
895
896
2005-04-04  Andras Varga
897
898
	* cenvir.h: fixed compilation bug in gcc3.4. For some obscure reason,
899
	in template classes gcc 3.4 seems to insist on fully qualifying calls
900
	to methods from the base class. This does not appear to make much
901
	sense, and indeed was not a problem with gcc<3.4, vc6.0 or vc7.1,
902
	and even gcc3.4 is willing to compile the old code if run with
903
	the -fpermissive option. Oh well...
904
905
2005-03-31  ------ omnetpp-3.1 released ------
906
907
2005-03-22  Andras Varga
908
909
	* cenvir.h: cEnvir::getParameter() return type changed from
910
	const char * to std::string. This was needed because if the
911
	parameter value contains the xmldoc() function, getParameter()
912
	will modify the file name in it to make it relative to the
913
	position of the ini file the setting was read from.
914
915
2005-03-18  Andras Varga
916
917
	* cconfig.h: added getBaseDirectoryFor() and getLocation() functions
918
	to cConfiguration
919
920
	* added cstrtokenizer.h, which contains cStringTokenizer
921
922
2005-03-17  Andras Varga
923
924
	* cscheduler.h: added method executionResumed() to cScheduler and
925
	cRealtimeScheduler
926
927
	* cstruct.h, ctypes.h: constructor usage patches to satisfy gcc 3.3.5
928
	[reported by Tom Parker]
929
930
2005-03-15  Andras Varga
931
932
	* cexception.h: added cRuntimeError
933
934
2005-02-24  Andras Varga
935
936
	* added missing SIM_API declarations to several classes and functions
937
938
2005-01-10  Andras Varga
939
940
	* create platdep/ subdirectory
941
942
	* cscheduler.h: added cRealTimeScheduler class, added startRun(),
943
	endRun() virtual functions to cScheduler
944
945
946
2004-12-29  ------ omnetpp-3.0 released ------
947
948
2004-12-22  Andras Varga
949
950
	* chist.h: cLongHistogram: if number of cells is not specified,
951
	it will be determined automatically from the range (more info in class
952
	doc)
953
954
2004-12-19  Andras Varga
955
956
	* cstruct.h: added baseclassname, baseclassdesc
957
958
2004-12-16  Andras Varga
959
960
	* cobject.h: setName() made virtual (needs to be overridden in cModule)
961
962
	* cmodule.h: added lastsubmodp (speeds up insertSubmodule())
963
964
	* cenvir.h: removed ev.getDisplayString() with no replacement
965
966
2004-12-10  Andras Varga
967
968
	* csimul.h: added getUniqueNumber(), for generating unique IDs for
969
	models
970
971
2004-12-08  Andras Varga
972
973
	* cenvir.h: added getParameterUseDefault() to support omnetpp.ini's
974
	<paramname>.use-default=yes option
975
976
2004-11-27  Andras Varga
977
978
	* added cvisitor.h, nearly all files changed: old forEach(do_fn)
979
	changed	to forEachChild(cVisitor *) (Visitor pattern)
980
981
2004-11-25  Andras Varga
982
983
	* cmodule.h: displayStringAsParent() renamed to backgroundDisplay-
984
	String() (compatibility #define added)
985
986
	* cchannel.h: cSimpleChannel renamed to cBasicChannel (compatibility
987
	#define added)
988
989
2004-11-23  ------ omnetpp-3.0b1 released ------
990
991
2004-11-18  Andras Varga
992
993
	* index.h: title page change; adjustments in doxygen comments in other
994
	headers
995
996
2004-11-03  ------ omnetpp-3.0a9 released ------
997
998
2004-11-02  Andras Varga
999
1000
	* csimplemodule.h: expanded scheduleAt() comment, to call attention
1001
	to related methods.
1002
1003
2004-10-25  Andras Varga
1004
1005
	* added crng.h
1006
1007
	* cenvir.h: added methods int numRNGs() and cRNG *rng(int k), which
1008
	allow access to the RNGs. The concept is that there are a number
1009
	of RNGs available for the simulation, numbered globaly 0..N.
1010
	Every module uses one or more RNGs identified with "module-local RNG
1011
	numbers", and every local RNG number maps to a global RNGs -- and you
1012
	can specify the mapping. Thus e.g. several module types can all work
1013
	with RNG 0 (local RNG number), and you map some modules to physical
1014
	RNG 0, others to physical RNG 1, and so on.
1015
1016
	* cenvir.h: added getRNGMappingFor(cModule *) which sets up the mapping
1017
	in the given module
1018
1019
	* cmodule.h: added cRNG *rng(int k) which returns the RNG of the given
1020
	local RNG number. This function maps k to a physical RNG number and
1021
	calls ev.rng(k) with it.
1022
1023
	* random.h: following symbols and functions were removed because they
1024
	didn't fit into the new architecture:
1025
	#define NUM_RANDOM_GENERATORS -- this is now an omnetpp.ini setting
1026
	#define INTRAND_MAX -- see cRNG::intRandMax()
1027
	int testrand() -- see cRNG::selfTest()
1028
	long opp_nextrand(long& seed) -- no replacement
1029
	void opp_randomize() -- no replacement
1030
	long randseed() -- no replacement (Mersenne Twister state is >32 bits!)
1031
	long randseed(long seed) -- no replacement (seeding from C++ not supported)
1032
	long intrand() -- see cRNG::intRand()
1033
	void genk_opp_randomize(int gen_nr) -- no replacement (see above)
1034
	long genk_randseed(int gen_nr) -- no replacement (see above)
1035
	long genk_randseed(int gen_nr, long seed) -- no replacement (see above)
1036
	long genk_intrand(int gen_nr) -- see cRNG::intRand()
1037
1038
2004-10-25  Andras Varga
1039
1040
        * all files: void info(char *buf) changed to std::string info() const
1041
        -- new signature is both safer (no danger of accidental buffer overrun)
1042
        and easier to use.
1043
1044
        * cpolymorphic.h, cobject.h, cgate.h, cmodule.h, etc: fullPath()
1045
        return value changed from const char* to std::string. The previous
1046
        version produced the string in a static buffer which was inherently
1047
        dangerous. POTENTIAL INCOMPATIBILITY: fullPath() calls in sprintf(),
1048
        ev.printf(), new cException() etc calls should be changed to
1049
        fullPath().c_str(). (ev<< statements are not affected because ev can
1050
        handle std::string just as well as const char *).
1051
1052
        Note: fullPath(char *buffer, int maxlen) still exists.
1053
1054
2004-10-04  ------ omnetpp-3.0a8 released ------
1055
1056
2004-09-24  ------ omnetpp-3.0a7 released ------
1057
1058
2004-09-15  Andras Varga
1059
1060
        * ctopo.h: added two utility functions to cTopology:
1061
        void extractByModuleType(const char **types)
1062
        void extractByModuleType(const std::vector<std::string> types)
1063
1064
2004-08-11   Andras Varga
1065
1066
        * cmessage.h: changed default length of cMessage to zero (was 1)
1067
1068
2004-07-22  ------ omnetpp-3.0a6 released ------
1069
1070
2004-07-10   Andras Varga
1071
1072
        * cmodule.cc: added ev_enabled to cModule -- this makes it possible
1073
        to select in Cmdenv which modules' output you want to see.
1074
1075
        * csimul.h,util.h: added cSimulation::contextType() to make it
1076
        available from Envir what a module's doing (CTX_INITALIZE, CTX_EVENT,
1077
        CTX_FINISH, etc)
1078
1079
2004-07-05   Andras Varga
1080
1081
        * csimplemodule.h, cenvir.h, envirext.h: recordScalar() functions for
1082
        text and cStatistic data removed. A cStatistic object can be recorded
1083
        into the scalar file by calling its recordScalar() method (below).
1084
1085
        * cstat.h: added recordScalar() method.
1086
1087
2004-06-24  Andras Varga
1088
1089
        * cpar.h: added type M (XML element) to cPar. New methods:
1090
        setXMLValue(cXMLElement*), cXMLElement *xmlValue(), op=(cXMLElement*),
1091
        op cXMLElement*().
1092
1093
2004-06-22  Andras Varga
1094
1095
        * added cxmlelement.cc
1096
1097
2004-06-17  Andras Varga
1098
1099
        * added cconfig.h: contains cConfiguration, an abstract base class
1100
        for configuration managers. cConfiguration makes it possible to
1101
        use different sources than omnetpp.ini, e.g. database or XML.
1102
        See ChangeLog in src/envir.
1103
1104
        * cenvir.h: added method cConfiguration *config(). This lets e.g.
1105
        scheduler classes (see cScheduler) have entries in omnetpp.ini.
1106
1107
2004-06-07  ------ omnetpp-3.0a5 released ------
1108
1109
2004-05-15  ------ omnetpp-3.0a4 released ------
1110
1111
2004-05-10   Andras Varga
1112
1113
        * carray.h,cllist.h: discouraged use of classes cBag and cLinkedList.
1114
        STL classes such as std::vector, std::list or std::deque are
1115
        recommended instead.
1116
1117
2004-04-20   Andras Varga
1118
1119
        * cobject.h, cpolymorphic.h: moved createDescriptor() into cPolymorphic
1120
1121
2004-04-13   Andras Varga
1122
1123
        * cenvir.h: added method bool cEnvir::disabled(); returns true when
1124
        ev<< output is disabled (e.g. Express mode) so executing ev<< is
1125
        a waste of CPU cycles. To save CPU cycles, one can write code like:
1126
           if (!ev.disabled())
1127
               ev << "Packet " << msg->name() << " received\n";
1128
        or (not that ?: binds looser than <<!!!):
1129
           #define EV  ev.disabled()?ev:ev
1130
           EV << "Packet " << msg->name() << " received\n";
1131
1132
        * cmessage.h: added possibility to attach a "control info" object
1133
        (cPolymorphic*) to cMessage. Purpose: communication between protocol
1134
        layers. New methods: setControlInfo(), removeControlInfo(),
1135
        controlInfo().
1136
1137
2004-03-22  ------ omnetpp-3.0a3 released ------
1138
1139
2004-03-20   Andras Varga
1140
1141
        * ccommbuffer.h, cparsimcomm.h: moved here from src/sim/parsim.
1142
1143
2004-03-10   Andras Varga
1144
1145
        * cenvir.h: use std::ostream as base class for cEnvir. ev<< works
1146
        exactly as with any C++ stream now (stream manipulators can be used,
1147
        etc). Also, there are no bounded buffers along the data path, so
1148
        outputting arbitrarily long strings are supported. (Except in
1149
        ev.printf(), but as of 2004, one shouldn't feel much temptation to
1150
        use it.)
1151
1152
        Users should change custom << operators written for cEnvir to use
1153
        std::ostream instead. Leaving cEnvir<< will continue to work,
1154
        but ostream<< is just more useful.
1155
1156
        * cenvir.h: removed stream input ev>> operators, and also the methods
1157
        askf(), prompt(), setprompt(). gets() was retained for now, but added
1158
        an overloaded equivalent which stores input in std::string.
1159
1160
        cpar.h: changed void getAsText(char *buf, int bufsize) functions to
1161
        std::string getAsText().
1162
1163
2004-03-08   Andras Varga
1164
1165
        * cobject.h, cpolymorphic.h: defined fullName() and fullPath() in
1166
        cPolymorhpic as empty virtual functions (return "") which cObject
1167
        redefines. check_and_cast<> argument type changed from cObject* to
1168
        cPolymorphic*.
1169
1170
2004-03-06   Andras Varga
1171
1172
        * cobject.h, cpolymorphic.h: several changes:
1173
        - info() method moved to cPolymorphic
1174
        - buffer size for info() now explicitly declared as MAX_OBJECTINFO
1175
        - new method detailedInfo() added to cPolymorphic -- this method
1176
          is allowed to produce a more verbose, multi-line description of
1177
          the object. Support for displaying it will be built into Tkenv.
1178
          Can be used to display internal tables (routing table, ARP cache,
1179
          etc) and other data structures.
1180
        - default writeContents() implementation changed to use detailedInfo()
1181
        - writeTo() method made "internal"
1182
1183
        * util.h, opp_string.h: opp_string changes:
1184
        - created separate header opp_string.h
1185
        - added c_str(), empty() methods for similarity to std::string
1186
        - removed const char* conversion -- it was often tested against NULL
1187
          to see if string was empty, and caused confusion. c_str() never
1188
          returns NULL.
1189
1190
2004-03-03  ------ omnetpp-3.0a2 released ------
1191
1192
2004-03-01  Andras Varga
1193
1194
        * ctypes.h,macros.h: createOne() return value changed from void* to
1195
        cPolymorphic* so that it can be used with type safety. Only classes
1196
        derived from cPolymorphic can be registered using Register_Class().
1197
1198
        * envirext.h: classes cScheduler, cOutputVectorManager,
1199
        cOutputScalarManager, cSnapshotManager are now subclassed from
1200
        cPolymorphic.
1201
1202
        * cobject.h, cpolymorphic.h: cPolymorphic removed from cobject.h and
1203
        placed into its own header file.
1204
1205
2004-02-23  Andras Varga
1206
1207
        * cmodule.h: added changeParentTo() to cModule.
1208
        * cenvir.h: added moduleReparented() to cEnvir.
1209
1210
2004-02-22  Andras Varga
1211
1212
        * cmodule.h: added gateSize() to cModule.
1213
1214
2004-02-20  Andras Varga
1215
1216
        * ctype.h, cchannel.h, cgate.h: introduced cChannelType which replaces
1217
        cLinkType. cChannelType is a lot more flexible since its factory
1218
        method create() allows creating channels of any class, not just
1219
        cSimpleChannel. Custom channel behaviour can thus be implemented
1220
        by authoring an own channel class and registering it via an
1221
        appropriate cChannelType and the Define_Channel() macro.
1222
1223
2004-02-12  Andras Varga
1224
1225
        * cgate.h, cchannel.h: gave a bool return value to deliver(), "false"
1226
        meaning that message object should be deleted.
1227
1228
2004-02-11  Andras Varga
1229
1230
        * csimul.h, cscheduler.h: semantic change in getNextEvent()'s and
1231
        selectNextModule()'s return value: NULL now means that the scheduler
1232
        got interrupted by the user while it was waiting (typically with parsim
1233
        or real-time sim).
1234
1235
2004-02-09  Andras Varga
1236
1237
        * cexception.h: added storage of module class name (NED type name)
1238
1239
2004-02-09  Andras Varga
1240
1241
        * ctypes.h: added methods to cModuleInterface so that it's possible
1242
        to dynamically assemble it (needed by networkbuilder)
1243
1244
2004-02-07  Andras Varga
1245
1246
        * ctypes.h: added createOneIfClassIsKnown(const char *classname)
1247
        function
1248
1249
2004-02-06  Andras Varga
1250
1251
        * cgate.h: added cGate::disconnect(); revised cGate::connectTo()
1252
1253
        * cchannel.h: added setDelay(double), setError(double),
1254
        setDatarate(double) to cSimpleChannel
1255
1256
2004-02-04  ------ omnetpp-3.0pre1 released ------
1257
1258
2004-01-09  Andras Varga
1259
1260
        * cenvir.h: added bubble() to cEnvir
1261
1262
        * cenvir.h: added overloaded "<<" operator for printing object pointers
1263
        and references (cObject*, const cObject*, cObject&, const cObject&).
1264
        It prints the class name and the full name, like "(cMessage)hello".
1265
1266
2004-01-06  Andras Varga
1267
1268
        * cenvir.h: added isGUI()
1269
1270
        * display string manipulation made a lot easier: displayString() now
1271
        returns a cDisplayString which can be changed with its own member
1272
        functions: insertTag(), setTagArg(), removeTag(), etc.
1273
        Example: coloring the icon: displayString().setTagArg("i",1,"cyan").
1274
        setDisplayString() got deprecated -- there's really no need for it
1275
        any more.
1276
1277
        * cGate became 8 bytes (2 pointers) smaller: notify_inspector and
1278
        data_for_inspector members got eliminated (notification is now
1279
        in the cDisplayString class). Same for cModule.
1280
1281
        * cenvir.h: new notification methods: moduleCreated(),
1282
        moduleDeleted(), connectionCreated(), connectionRemoved(),
1283
        displayStringChanged(cGate*), displayStringChanged(cModule*),
1284
        displayStringAsParentChanged()
1285
1286
        * backwards compatibility stuff collected in compat.h
1287
1288
2004-01-05  Andras Varga
1289
1290
        * Heavy redesign of cObject and cModule internals with performance
1291
        and memory consumption improvements and cleaner code. Summary:
1292
        - new ownership mechanism reduces memory footprint from 20 to 8 bytes
1293
          per simulation object (cObject subclasses: cMessage, cGate, etc.).
1294
          Before it was 4 pointers (ownerp, firstchildp, nextp, prevp) plus
1295
          1 char (storage class) and 1 bool (tkownership), and now it's only
1296
          1 pointer (ownerp) plus 1 int (pos).
1297
        - faster: change of ownership was up to 6 comparisons and 9 assignments,
1298
          now it's 1 comparison, 3 assignments and 1 increment.
1299
        - catches more errors: it now detects attempts to delete or take
1300
          objects that are currently in a queue, array, or the FES. (in other
1301
          words, it's no longer possible to silently steal an object from its
1302
          legitimate owner.)
1303
        - cObject's custom 'operator new' could be eliminated, together with
1304
          determining the storage class.
1305
        - downside: container objects have to call drop() before deleting contained
1306
          objects (basically, 'delete obj' calls have to be changed to
1307
          'dropAndDelete(obj)'.
1308
        - tkownership was also removed also for lack of usefulness
1309
        - other optimization is that short object names (up to 11 chars) are
1310
          stored inside the object's memory (an object with 11-character name
1311
          doesn't allocate more than an object with no name assigned).
1312
        Details follow:
1313
1314
        * in activity() modules, stack cleanup is now done by C++ exceptions
1315
        (utilizes stack unwinding). Implications: cObject's heapflag, stor
1316
        and operator new could all be thrown out (cleaner code, performance
1317
        improvement, plus reduces cObject size by 2 bytes)
1318
1319
        * short object name strings are stored inside cObject (that is,
1320
        cObject contains union {char *nameptr, char shortname[]} now)
1321
        --> short object names come for FREE (don't allocate extra
1322
        memory compared to nameless objects.) This results in memory savings
1323
        (on average) and performance improvent (less calls to 'new').
1324
        Names count as short up to 11 chars. (This might be extended to
1325
        15 chars if measurements show long names are popular.)
1326
1327
        * Object ownership handling in cObject was redesigned, with *both*
1328
        performance improvement and memory saving, plus more protection against
1329
        programming errors (now any object which is stored in a Queue, cArray
1330
        etc cannot be "taken" by any other object -- it must be removed from
1331
        the container first). Basic idea: owned objects were previously stored
1332
        in every cObject via firstchildp, nextp, prevp pointers, every class
1333
        (cQueue, cArray etc) had its own (extra) pointers to contained objects;
1334
        Now it became every object's responsibility to keep ptrs to owned
1335
        objects. Consequences:
1336
        - setOwner() was removed (it caused a lot of misunderstandings)
1337
        - cDefaultList was introduced
1338
        - firstchildp, nextp, prevp got removed from cObject; ownerp was kept;
1339
          pos was added (necessary for storing things in cDefaultList).
1340
          --> reduces cObject size by 8 bytes (on 32-bit architectures)
1341
        - cHead, cIterator was removed
1342
        - removed cModule's `locals', `members' -- the owner is now the cModule
1343
          class itself (cModule became subclass of cDefaultList).
1344
        - defaultowner made a static in cObject
1345
        - added total_objs and live_objs counters (useful for tracing memory
1346
          leaks)
1347
        - isSoftOwner() introduced -- soft owner is an object which allows
1348
          other objects take away an owned object from it (e.g. cQueue and
1349
          cArray are hard owners, cDefaultList and cModul is soft owner)
1350
1351
        * takeownership flag removed from cObject, and put only into classes
1352
        where needed: cQueue, cArray and cPar (reduces cObject size by 2 bytes)
1353
1354
        * cModule optimization:
1355
        - submodules are now kept via firstsubmodp, prevp, nextp pointers
1356
        - cSubmodIterator rewritten to use firstsubmodp, prevp, nextp (more
1357
          efficient!)
1358
        - also: modules are now owned by cSimulation (not the parent module)
1359
1360
        * removed deprecated/obsolete methods: putasideQueue; receiveNew(),
1361
        receiveNewOn(), etc; cSimpleModule's memAlloc()+memFree();
1362
1363
        * removed machine parameters from cModule and cModuleInterface (parsim
1364
        extension no longer uses them)
1365
1366
        * callInitialize(), callFinish() impl. moved to base class, cModule.
1367
1368
        * cDisplayStringParser renamed to cDisplayString (compatibility typedef added)
1369
1370
        * cArray::Iterator added
1371
1372
        * cenum.h: sEnumBuilder removed
1373
1374
        * global registration lists moved to globals.h and transformed into
1375
        cArrays, accessed via new class cSingleton
1376
1377
2003-12-09  Andras Varga
1378
1379
        * distrib.h: fixed description of lognormal distribution -- the m,s
1380
        parameters referred to the underlying normal distribution, not
1381
        lognormal itself. [reported by Ian Grivell]
1382
1383
2003-11-23  Andras Varga
1384
1385
        * cdispstr.h: insertTag() return value changed from bool to int.
1386
1387
        * ccoroutine.h: MSVC version check fixed (#if _MSC_VER==1200 changed
1388
        to #if _MSC_VER>=1200)
1389
1390
2003-11-13  Andras Varga
1391
1392
        * Merged parallel simulation brach that was developed March-May 2003,
1393
        during my stay at Monash University. Changes in that branch:
1394
1395
        2003-05-21  Andras Varga
1396
        * cobject.h: introduced cPolymorphic base class for cObject,
1397
        with the purpose of strengthening type safety by using cPolymorphic
1398
        at places where normally void * pointers would have been used.
1399
        className() moved from cObject to cPolymorphic. cPolymorphic has
1400
        no data members and ctor/dtor doesn't do anything, so subclassing
1401
        from it comes for free.
1402
1403
        2003-04-18  Andras Varga
1404
        * cenvir.h: removed foreignPuts() method, no longer used by parallel
1405
        simulation.
1406
1407
        2003-04-09  Andras Varga
1408
        * csimul.h: added guessNextModule() method, to be used from Tkenv
1409
        in "next module" gauge.
1410
1411
        2003-04-01  Andras Varga
1412
        * cenvir.h: runningMode() removed (because of reorganization of
1413
        parallel simulation support)
1414
1415
        2003-03-31  Andras Varga
1416
        * omnetpp.h, csimul.h; removed cnetmod.h: cNetMod and all references
1417
        to it are removed -- parallel simulation is represented in cSimulation
1418
        via cParsimPartition.
1419
        * csimplemodule.h: syncpoint calls removed.
1420
1421
        2003-03-25  Andras Varga
1422
        * cmodule.h, csimplemodule.h: method isSimple() moved to base class
1423
        cModule where it uses dynamic_cast.
1424
        * cenvir.h: getLocalMachineFor() has been replaced by isModuleLocal()
1425
        * ctypes.h: cModuleType::create(): last arg "bool local" removed
1426
        (it is now determined inside, by calling new method ev.isModuleLocal());
1427
        also added overloaded create() method which takes module index and
1428
        module vector size, and contains cModule::setIndex().
1429
1430
        * cmodule.h: cModule methods setId(), setIndex(), setModuleType()
1431
        made protected. (They're called internally during the module creation
1432
        process, from cModuleType::create().)
1433
1434
        2003-03-24  Andras Varga
1435
        * csimul.h, cmsgheap.h: improved method documentation
1436
1437
        2003-03-23  Andras Varga
1438
        * split cmodule.h: cSimpleModule put into new file csimplemodule.h
1439
        * cobject.h: cObject::namestr private member changed from char* to
1440
        opp_string
1441
        * added cscheduler.h, changed csimul.h: cSimulation::nextModule()
1442
        now relies on a scheduler object, subclassed from cScheduler.
1443
        Normally (with sequential execution) the scheduler is
1444
        cSequentialScheduler which just returns msgQueue.peekFirst();
1445
        With parallel and/or real-time simulation, the scheduler is a
1446
        specialized class which also does synchronization with real time
1447
        and/or with other segments.
1448
1449
        2003-03-20  Andras Varga
1450
        * nearly all files: changed signature of netPack()/netUnpack()
1451
        to use new cCommBuffer interface
1452
        * cgate.h: deliver() made virtual
1453
1454
2003-11-09  Andras Varga
1455
1456
        * csimul.h: added cSimulation::loadNedFile() which can be used to
1457
        dynamically load NED files. See src/sim/ChangeLog for more info
1458
        on how to enable this feature and what other libraries it requires.
1459
1460
2003-10-02  Andras Varga
1461
1462
        * util.h: added Enter_Method() and Enter_Method_Silent() macros
1463
        which should be added to top of module class methods, and do
1464
        context switching and animation of method calls. (Macros build on
1465
        cContextSwitcher internal class.)
1466
1467
        * cenvir.h: added method moduleMethodCalled(), needed for animating
1468
        method calls between modules
1469
1470
2003-09-25  Andras Varga
1471
1472
        * cmessage.h: support for message display strings. You have to
1473
        redefine cMessage's displayString() to return a valid display string
1474
        (by default it returns ""). See Tkenv for valid options.
1475
1476
2003-09-22  Andras Varga
1477
1478
        * cenvir.h: messageSent() signature modified, in order to be able to
1479
        animate sendDirect().
1480
1481
        * cmodule.h: refined the rules for sendDirect(), and documented it.
1482
        Namely, fromGate()==NULL must hold for the destination gate, that is,
1483
        modules MUST have dedicated gates for receiving via sendDirect().
1484
        You cannot have a gate which receives messages via both a connection
1485
        and sendDirect().
1486
1487
        This restriction makes models cleaner (you must have dedicated gates
1488
        for receiving messages via sendDirect()), and it is also necessary
1489
        for proper animation in Tkenv.
1490
1491
        Soundly written existing models will not be affected.
1492
1493
        * cmessage.h: new fields added:
1494
            unsigned refcount : 7;     // reference count for encapsulated message (max 63)
1495
            unsigned char srcprocid;   // reserved for use by parallel exec.
1496
        Also made existing `bool error' a 1-bit bitfield (1 length).
1497
        The total size of cMessage didn't grow as probably earlier the compiler
1498
        used some padding to align fields after the "error" field to a 2-byte
1499
        boundary (at least), and we just filled up this space with useful data.
1500
1501
2003-06-16  ------ omnetpp-2.3 released ------
1502
1503
2003-06-16  Andras Varga
1504
1505
        * cpacket.h: deprecated cPacket class.
1506
1507
2003-06-14  Andras Varga
1508
1509
        * cmodule.h: cModule's addGate(), addPar() return type changed from
1510
        void to cGate*/cPar*.
1511
1512
        * cobject.h: added bool cStaticFlag::isSet()
1513
1514
2003-05-29  Andras Varga
1515
1516
        * cfsm.h: FSM_Print(): improved output
1517
1518
2003-03-15  ------ omnetpp-2.3b2 released ------
1519
1520
2003-03-15  Andras Varga
1521
1522
        * cgate.h, cchannel.h: refined documentation on channel attributes,
1523
        isBusy() and transmissionFinishes().
1524
1525
2003-02-15  ------ omnetpp-2.3b1 released ------
1526
1527
2003-02-10  Andras Varga
1528
1529
        * chist.h: cHistogramBase: added setNumCells() method
1530
1531
2003-01-30  Andras Varga
1532
1533
        * defs.h: added MathFunc4Args (it was needed by triang() and other
1534
        distributions); also added its handling where needed
1535
1536
2003-01-29  Andras Varga
1537
1538
        * chead.h: added argcount paremeter to findFunction()
1539
1540
2003-01-22  Andras Varga
1541
1542
        * ctypes.h, macros.h: increased type safety of Register_Function() and
1543
        cFunctionType
1544
1545
2003-01-20  Andras Varga
1546
1547
        * contents of obsolete header cstk.h removed
1548
1549
2003-01-19  Andras Varga
1550
1551
        * distrib.h (new): contains function declarations for distributions
1552
        contributed by Werner Sandmann (TU Bonn): continuous distributions
1553
        gamma_d(), beta(), erlang_k(), chi_square(), student_t(), cauchy(),
1554
        triang(),lognormal(), weibull(), pareto_shifted(), and discrete
1555
        distributions bernoulli(), binomial(), geometric(), negbinomial(),
1556
        hypergeometric(), poisson()
1557
1558
        * random.h (new), distrib.h; utils.h: From util.h, existing
1559
        distributions (uniform, normal, exponential, etc) were moved to
1560
        distrib.h, and random number generator functions were moved to new file
1561
        random.h.
1562
1563
        * distrib.h: bugfix: 2nd arg to normal() is really the stddev, not
1564
        variance. Documentation fixed.
1565
1566
2003-01-14  Andras Varga
1567
1568
        * cwatch.h: added support for 'bool'
1569
1570
        * index.h: cOutVector doc moved from group 'SimSupport' to 'Statistics'
1571
1572
        * cmodule.h: new method waitAndEnqueue() added to cSimpleModule.
1573
1574
        * cmodule.h: putAsideQueue was DEPRECATED. putAsideQueue is currently
1575
        used implicitly by the methods wait(), receiveOn() and receiveNewOn()
1576
        to insert messages that arrive during the wait period or not on the
1577
        specified gate. The receive() functions look first on the
1578
        putAsideQueue and only then at the future events.
1579
1580
        As practice has shown, the purpose of the putAsideQueue was very
1581
        often misunderstood, and its implicit use by wait() and the message
1582
        receiving functions was highly error-prone. On the other hand,
1583
        it is easy to emulate with waitAndEnqueue(), or a loop with receive().
1584
        putAsideQueue will be removed at some point in the future.
1585
        Be prepared: use wait() and receiveOn() if you do not expect other
1586
        messages to arrive at the module; use waitAndEnqueue() where you
1587
        mean it; do not use the receiveNew..() functions as they will be made
1588
        redundant when putAsideQueue goes away.
1589
1590
2003-01-07  Andras Varga
1591
1592
        * cenvir.h: added ev.flush()
1593
1594
        * cmodule.h: deprecated phase() (nobody really used it)
1595
1596
2003-01-05  Andras Varga
1597
1598
        * macros.h: added macro Define_Function2
1599
1600
2002-12-19  Andras Varga
1601
1602
        * always use <iostream> instead of <iostream.h>
1603
1604
2002-12-17  Andras Varga
1605
1606
        * cobject.h: check_and_cast<T>(cObject *p) template function added --
1607
        it can be used to assert that a pointer is of the given T type.
1608
        It does dynamic_cast<T> and throws exception if the result is NULL
1609
        (ie. pointer types are incompatible). Useful with message subclassing.
1610
1611
2002-12-02  Andras Varga
1612
1613
        * cmessage.h: added convenience methods: addObject(), getObject(),
1614
        hasObject(), removeObject(). Refined related documentation and
1615
        added hint to message subclassing to class description.
1616
1617
2002-11-03  Andras Varga
1618
1619
        * namespace cleanup: several iterator and other small classes
1620
        made inner classes (cKSplitIterator changed to cKSplit::Iterator,
1621
        cQueueIterator to cQueue::Iterator, cLinkedListIterator to
1622
        cLinkedList::Iterator, cMessageHeapIterator to cMessageHeap::Iterator,
1623
        sXElem to cPar::ExprElem, sGrid to cKSplit::Grid, sTopoLink to
1624
        cTopology::Link, sTopoLinkIn to cTopology::LinkIn, sTopoLinkOut to
1625
        cTopology::LinkOut, sTopoNode to cTopology::Node). #defines for
1626
        backwards compatibility were added to defs.h.
1627
1628
2002-10-27  Andras Varga
1629
1630
        * Started to use C++ RTTI. It is no longer necessary to redefine
1631
        className() in every cObject subclass. The class name string is now
1632
        produced in the base class (cObject::className()) using the typeid
1633
        operator.
1634
1635
        Tested with MSVC 6.0 and Cygwin/gcc-2.95.3-5. With MSVC, one needs
1636
        to compile every source using /GR, otherwise Tkenv crashes (RTTI
1637
        exception)!
1638
1639
        * cobject.h: removed inspector() and inspectorFactoryName() methods
1640
        from cObject
1641
1642
        * ctypes.h, macros.h: removed TInspector and the inspectorfactory
1643
        stuff altogether (they didn't really belong here). The whole stuff
1644
        was moved to Tkenv.
1645
1646
2002-10-20  Andras Varga
1647
1648
        * cgate.h: added isConnectedOutside() and isConnectedInside()
1649
        utility methods.
1650
1651
2002-10-19  Andras Varga
1652
1653
        * cmodule.h, ctype.h: refactoring on dynamic module creation: instead of
1654
        modtype->buildInside(mod), one should now write mod->buildInside(),
1655
        which is more logical.
1656
        (Former syntax still works -- a cModuleType::buildInside() is still
1657
        provided for backward compatibility). buildInside() delegates task
1658
        to doBuildInside() (a new method), so it's doBuildInside() which
1659
        should be redefined in subclasses, and also nedc generates now
1660
        doBuildInside() code.
1661
1662
        * ctypes.h, macros.h: refactoring around cNetworkType and
1663
        Define_Network: subclass cNetworkType instead of using a naked
1664
        pointer to a network setup function.
1665
1666
        * cexception.h: introduced cTerminationException, cEndModuleException;
1667
        added 2 new ctors to cException
1668
1669
        * cenvir.h: return type of run() changed from void to int; now the
1670
        return value can be used in main() as application exit code.
1671
1672
2002-10-16  Andras Varga
1673
1674
        * csimul.h: cSimulation: methods warning(), setWarnings(bool),
1675
        warnings() removed from class. Warnings are no longer used by the
1676
        simulation library at all. opp_warning() remained (but its use
1677
        discouraged) -- it can further be used  to report non-fatal
1678
        discrepancies, but the user won't be offered the possibility
1679
        to stop the simulation. (In Cmdenv, warnings will be written
1680
        to the standard error, and in Tkenv it will probably pop up an
1681
        [OK] dialog.
1682
1683
        * Convention 1: methods returning an object reference (e.g. cPar&) now
1684
        always throw an exception if the object is not found. (Until now, some
1685
        methods issued a warning and returned null reference, i.e.
1686
        *(cPar*)NULL).
1687
1688
        * Convention 2: methods returning a pointer (e.g. cGate*) return NULL
1689
        pointer if the object is not found. (Until now, some methods issued
1690
        a warning and returned NULL pointer.
1691
1692
        * csimul.h: cSimulation: lastModuleIndex() renamed to lastModuleId();
1693
        operator[] deprecated (use module(int) method instead)
1694
1695
        * cmodule.h: cSubModIterator: operator[] deprecated (use operator()(int)
1696
        method instead)
1697
1698
        * cModule: cGate *gate() methods no longer issue a warning if the
1699
        gate is not found, just return NULL. (see Convention 2 above)
1700
1701
        * cModule, cMessage: par() throws an exception if parameter was not
1702
        found. (see Convention 1 above)
1703
1704
        * cArray::remove(cObject *) and cQueue::remove(cObject *) methods
1705
        now return NULL instead of the original pointer if the object was
1706
        not found. see Convention 2 above)
1707
1708
2002-10-09  Andras Varga
1709
1710
        * cobject.h: clarified and extended documentation of cObject.
1711
1712
        * csimul.cc: refactoring in cSimulation: del() renamed to deleteModule(),
1713
        add() to addModule()
1714
1715
        * refactoring: NO(classname) macro (an alias to NULL) eliminated
1716
1717
2002-10-08  Andras Varga
1718
1719
        * chead.h: removed deleteChildren() from cHead destructor call.
1720
1721
        * cobject.h: refactoring/simplification: removed deleteChildren() and
1722
        destructChildren() methods; dealloc(cObject *) renamed to discard().
1723
1724
2002-10-07  Andras Varga
1725
1726
        * macros.h, cobject.h: refactoring of internal workings: way of
1727
        constructing global registration lists (module types, networks, etc)
1728
        have been reorganized. Now it uses a new EXECUTE_ON_STARTUP() macro
1729
        instead of having hardwired into global objects' constructor to
1730
        join lists. As a consequence, cObject constructors could be simplified.
1731
1732
        * onstartup.h: new file, contains EXECUTE_ON_STARTUP() macro and
1733
        underlying object.
1734
1735
        * Interface() macro renamed to ModuleInterface() (name clashed with
1736
        COM stuff on Windows); Register_Interface() macro renamed to
1737
        Register_ModuleInterface().
1738
1739
2002-10-04  Andras Varga
1740
1741
        * csimul.h: refactoring on cSimulation object:
1742
1743
        * incEventCount() removed, incrementing event count was moved into
1744
        doOneEvent()
1745
1746
        * responsibilities of startRun() and endRun() changed, see doc comment.
1747
1748
        * several methods moved from cSimulation into the Envir library:
1749
        timeLimit(), simTimeLimit(), startClock(), stopClock(), resetClock(),
1750
        checkTimes(). Also, it is no longer the scheduler function's
1751
        responsibility to stop the simulation if sim/real time limits have
1752
        been reached
1753
1754
        * cexception.h changed
1755
1756
2002-09-07  Andras Varga
1757
1758
        * added cchannel.h: cChannel, cSimpleChannel introduced
1759
1760
        * cGate: added setChannel(), channel()
1761
1762
        * cGate: DEPRECATED setDelay(), setError(), setDatarate(), setLink()
1763
        methods. Channel objects should be used instead.
1764
1765
        * cGate: added connectTo() method; DEPRECATED setFrom() and setTo()
1766
1767
        * cMessage: refactoring: added setSentFrom() and setArrival() methods
1768
        instead of letting friend classes manipulate private data members
1769
        of cMessage, and reduced friend class list.
1770
1771
        * cModule, cGate: deliver(cMessage*) changed to
1772
        deliver(cMessage*, simtime_t); arrived() method signature changed
1773
        similarly
1774
1775
        * cArray: created set(cObject*) method to add optional hashtable-like
1776
        behaviour to cArray: this method replaces the object with the same
1777
        name in the array with the object passed.
1778
1779
        * cArray: commented out opp_warning() calls from all remove() methods.
1780
        TBD: opp_warning() to be eliminated from EVERY class!!!
1781
1782
2002-07-04  Andras Varga
1783
1784
        * cdispstr.h added: utility class cDisplayString
1785
1786
2002-06-27  Andras Varga
1787
1788
        * cexception.h added; methods that formerly called opp_error() now
1789
        throw exception: throw new cException(...).
1790
1791
2002-06-17  Andras Varga
1792
1793
        * cpar.cc: new feature: cPar can use compiled expressions subclassed
1794
        from cDoubleExpression (new class). This is needed for code generated
1795
        by the new, nedxml-based nedc.
1796
1797
2002-06-12  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
1798
1799
        * doxy.cfg (GENERATE_TAGFILE): ../doc/api/tags renamed to
1800
        ../doc/api/opptags.xml
1801
1802
2002-06-11  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
1803
1804
        * doxy.cfg (GENERATE_TAGFILE): generate ../doc/api/tags. This
1805
        tag file can be included when generating model documentation
1806
1807
2002-05-28  Frank Paehlke  <paehlke@tm.uni-karlsruhe.de>
1808
1809
        * defs.h: added macro USE_STD_NAMESPACES for C++ compilers with
1810
        standard library and namespaces (currently GNU C++ >= 3.0)
1811
1812
        * cdensity.h, cenvir.h, chist.h, cksplit.h, cmodule.h, cobject.h,
1813
        cpsquare.h, csimul.h, cstat.h, ctopo.h, ctypes.h, cvarhist.h,
1814
        envirext.h: Use standard headers and namespaces if
1815
        USE_STD_NAMESPACES is defined
1816
1817
        * ctopo.h: check if INFINITY is already defined
1818
1819
2002-05-04  ------ omnetpp-2.2 released ------
1820
1821
2002-04-06  Andras Varga
1822
1823
        * defs.h: version number upped to 2.2
1824
1825
2002-03-05  Andras Varga
1826
1827
        * cgate.h: cGate::setDisplayString() got an optional second parameter,
1828
        bool immediate
1829
1830
2002-03-04  Andras Varga
1831
1832
        * cobject.h: cObject::free(cObject *) renamed to dealloc() to avoid
1833
        misunderstandings
1834
1835
        * coutvect.h: new methods: valuesReceived(), valuesStored()
1836
1837
        * cobject.h, cmodule.h, cgate.h, cpar.h, csimul.h:
1838
        fullPath2(buf,bufsize) renamed to fullPath(buf,bufsize). cObject's
1839
        fullPath() method (without arg) had to be duplicated in all affected
1840
        classes because a (seemingly meaningless) C++ rule says overloaded
1841
        virtual functions must be redefined together.
1842
1843
2002-03-04  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
1844
1845
        * util.h (class opp_string): use delete[] in functions
1846
        ~opp_string, allocate and operator=
1847
1848
2002-03-03  Andras Varga
1849
1850
        * protocol.h: added constants: PR_ICMP, PR_UDP_APP. [suggested by
1851
        Johnny Lai]
1852
1853
2002-03-03  Andras Varga
1854
1855
        * cpar.h: valueChanges() renamed to beforeChange(); corresponding
1856
        afterChange() method added
1857
1858
        * macros.h, ctypes.h: Register_Class(), cClassRegister can now be used
1859
        to create instances of non-cObject classes too; as part of this change,
1860
        createOne() return value changed from cObject* to void*.
1861
1862
        * csimul.h: management of various output files (output vector file,
1863
        output scalar file, snapshot file) was moved from cSimulation to the
1864
        user interface library (behind the ev facade); new methods were added
1865
        to cEnvir to support this. (See also following items.)
1866
1867
        * cenvir.h: added new methods to cEnvir: registerOutputVector(),
1868
        deregisterOutputVector(), overloaded recordInOutputVector() methods,
1869
        overloaded recordScalar() methods, getStreamForSnapshot(),
1870
        releaseStreamForSnapshot().
1871
1872
        * coutvect.h: management of output vector file including start time
1873
        and stop time of vectors was completely moved to the user interface
1874
        library; startTime()/stopTime() methods were removed from cOutVector.
1875
        The cOutFileMgr class was removed altogether.
1876
1877
        * envirext.h added: contains abstract classes that can be used to extend
1878
        the functionality of the standard user interface library (src/envir)
1879
        via a plugin mechanism: cOutputVectorManager, cOutputScalarManager,
1880
        cSnapshotManager.
1881
1882
        * index.h: EnvirExtensions doc group added (contains classes in envirext.h)
1883
1884
        * cpar.cc: module parameter change logging feature removed for various
1885
        reasons. (If you miss it, let me know!)
1886
1887
2002-02-22  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
1888
1889
        * cllist.h (cLinkedList): Doc-fix for cLinkedList::insert()
1890
1891
2002-02-21  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
1892
1893
        * cobject.h: extended description of CompareFunc regarding return values
1894
1895
        * cqueue.h (cQueue): fixed CompareFunc arguments in Queue class description
1896
1897
2001-10-28 Andras Varga
1898
1899
        * util.h: opp_string::allocate(), opp_strprettytrunc() added;
1900
        indexedname() renamed to opp_mkindexedname() (old name still exists
1901
        as macro)
1902
1903
        * cobject.h, cmodule.h, csimul.h, cgate.h, cpar.h: added
1904
        fullPath2(buffer,buflen) which produces the result in an external
1905
        buffer; cObject::fullPath() now relies on fullPath2().
1906
1907
2001-10-06 Andras Varga
1908
1909
        * cstruct.h: fixed bugs that came up while testing experimental msg
1910
        subclassing
1911
1912
2001-09-14 Andras Varga
1913
1914
        * utils.h: added opp_nextrand(long& seed)
1915
1916
        * cmodule.cc: cModule's display string methods were reorganized:
1917
        displayString(type) method split into displayString() and
1918
        displayStringAsParent(), eliminating the type parameter. Similar change
1919
        to the set...() methods. Old methods remained but were made deprecated.
1920
1921
        * cwatch.h: added unsigned int/long, signed/unsigned char, etc.
1922
        constructors to cWatch.
1923
1924
2001-09-06 Andras Varga
1925
1926
        * cleanup around object copying: every class has now a copy constructor,
1927
        an assignment operator, and every non-abstract class has dup().
1928
        All dup()s call the copy constructor, and all copy constructors
1929
        call the assignment operator. In some classes the assignment operator
1930
        calls copyNotSupported().
1931
1932
2001-08-23 Andras Varga
1933
1934
        * index.h: wrote doc comment about internal classes
1935
1936
        * generated API doc for earlier 2.1 release (undoing API changes
1937
        introduced since 2.1 release on a local copy of the headers)
1938
1939
2001-08-12 Andras Varga
1940
1941
        * documented all typedefs
1942
1943
2001-08-11 Andras Varga
1944
1945
        * added _CONSTs to all copy constructors, operator=()'s and dup()'s
1946
        * improved doc comments in cnetmod.h, cdetect.h, index.h
1947
1948
2001-08-05 Andras Varga
1949
1950
        * added a few dozen new _CONSTs; affects nearly all files
1951
1952
2001-08-04 Andras Varga
1953
1954
        * index.h: added doc comments
1955
1956
2001-08-03 Andras Varga
1957
1958
        * ccor.h cdetect.h cgate.h cmodule.h cobject.h cpar.h csimul.h cstk.h:
1959
        improved/added documentation comments
1960
1961
2001-07-30  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
1962
1963
        * cenvir.h: operator<< definitions were broken. Introduced with
1964
        revision nr. 1.5. Reverted according to rev. 1.4
1965
1966
2001-07-29 Andras Varga
1967
1968
        * made a lot of methods const (only experimental for now).
1969
        Used a _CONST macro defined in defs.h; _CONST has to be explicitly
1970
        enabled from the makefile (-D_CONST=const). After testing, _CONST
1971
        macros will be replaced by ordinary 'const'. Affects nearly all files.
1972
1973
2001-07-27 Andras Varga
1974
1975
        * cenum.h cfsm.h cnetmod.h cpar.h cstruct.h cwatch.h macros.h util.h:
1976
        improved/added documentation comments
1977
1978
2001-07-24 Andras Varga
1979
1980
        * misc documentation improvements
1981
1982
2001-07-19 Andras Varga
1983
1984
        * added index.h which defines groups for the documentation; updated
1985
        a lot of classes with @ingroup directives.
1986
1987
        * cdensity.h chist.h cksplit.h cpsquare.h cqueue.h cstat.h ctopo.h
1988
        cvarhist.h chead.h ctypes.h cwatch.h: added/cleaned up DOC++ comments
1989
1990
2001-07-15 Andras Varga
1991
1992
        * added documentation for redefined cObject methods. Affects nearly all
1993
        headers.
1994
1995
2001-07-13 Andras Varga
1996
1997
        * switched to DoxyGen for generating documentation: doxy.cfg added
1998
1999
        * cmsgheap.h coutvect.h cpacket.h ctopo.h: added/cleaned up DOC++
2000
        comments
2001
2002
2001-07-11 Andras Varga
2003
2004
        * carray.h cgate.h cllist.h cpar.h cqueue.h csimul.h: added/cleaned up
2005
        DOC++ comments
2006
2007
2001-07-07 Andras Varga
2008
2009
        * cmessage.h,cmodule.h,util.h: added/cleaned up DOC++ comments
2010
2011
2001-07-02 Andras Varga
2012
2013
        * cenum.h,cstruct.h: DOC++ comments added (not yet complete)
2014
2015
2001-06-28  Andras Varga
2016
2017
        * utils.h: added DOC++ comments (not yet complete!).
2018
2019
        * cstruct.h added: classes to support self-describing data structures,
2020
        to be used for implementing message subclassing. UNTESTED. To be added
2021
        to the makefile.
2022
2023
        * cenum.h added: classes to support string mapping of enums. UNTESTED.
2024
        To be added to the makefile.
2025
2026
2001-06-23  Andras Varga
2027
2028
        * cobject.h: cleaned up DOC++ comments
2029
2030
        * Class comments fixed in all files. Comments for methods, functions,
2031
        and macros yet to be done.
2032
2033
2001-06-22  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
2034
2035
        * Some fixes to errors produced by opp_docify.pl: missing #endif at
2036
        bottom of file added, replaced /* */ statements inside comments
2037
        with // //.
2038
2039
        * Merged in documentation from refman.html into header files using
2040
        Andras' helper script opp_docify.pl (affects all files).  unused.txt
2041
        contains doc entries extracted from opp_docify that did not fit into
2042
        the header files.
2043
2044
2045
2001-06-20  Ulrich Kaage  <kaage@int.uni-karlsruhe.de>
2046
2047
        * const patches applied (affects almost all files)
2048
2049
2050
2001-03-10 Andras Varga
2051
2052
        * ------ omnetpp-2.1 released ------
2053
2054
        * The include/ directory was created. (Header files were formerly
2055
        in src/sim; if you're interested in earlier changes, refer to
2056
        src/sim/ChangeLog.)