2018-06-25 ------ omnetpp-5.4.1 released ------ 2018-06-21 Attila Torok * cHistogram: Fix invalid bin edges in cHistogram when the range is too small. In one specific case, when the histogram wanted to set up 70 uniform bins on a very small range, but really far away from 0 (something like 1457683.667621 - 1457683.667623), we ran out of precision with the double type. Some adjacent bin edges had the exact same value, resulting in failed assertions, and infinite loops trying to consume infinite memory. 2018-06-15 Andras Varga * cSimulation: snapshot(): Check for write errors when using std::ofstream 2018-06-15 Andras Varga * cComponent: fix "cannot cast to double" error when recording "int" parameters as scalars 2018-06-15 Andras Varga * Check for write errors when using std::ofstream 2018-06-14 Rudolf Hornig * Fix build with clang/c2 compiler (__has_builtin-related issue) 2018-06-11 ------ omnetpp-5.4 released ------ 2018-06-08 Attila Torok * cRuntimeError: refactoring related to cEnvir "attach to debugger" changes: breakIntoDebuggerIfRequested() replaced by notifyEnvir(). * cSimpleModule, cSimulation: in DEBUG_TRAP_IF_REQUESTED, call getEnvir()->ensureDebugger() before DEBUG_TRAP, to allow Envir launch an external debugger before executing the trap. 2018-06-08 Andras Varga * SimTime: more precise computation for integer/SimTime division. We try to compute it using integer arithmetic as long as possible, and only fall back to floating-point (double) division when the result is not an integer. 2018-06-06 Andras Varga * cPacket: refined str() method 2018-06-05 Andras Varga * Use SimTime's new ustr() where appropriate: in cClassDescriptor for displaying simtime_t fields; in cEvent's and cMessage's str() for dt. 2018-06-07 Andras Varga * SimTime: implemented ustr() 2018-06-05 Andras Varga * Register each measurement unit as a NED function as well. They accept dimensionless numbers and quantities with a compatible unit as well. E.g. the expressions mW(2*100) and mW(0.2W) both result in 200mW. 2018-06-04 Andras Varga * cComponent::forEachChild: eliminate a source of pontential infinite recursion 2018-05-31 Andras Varga * cDynamicExpressio: recognize "nan" and "inf" as numeric constants 2018-05-24 Attila Torok * Fix build with GCC versions prior to 5.x. These versions didn't yet have __has_builtin, nor __builtin_*_overflow, so don't assume they did. 2018-05-28 Andras Varga * cDynamicExpression: no not allow operations w/ logarithmic units, to rule out issues that would have little practical benefit in solving. 2018-05-23 Andras Varga * Implemented the NED "exists" operator 2018-05-18 Andras Varga * Implemented "typename" in submodule "if" and other expressions Note: typename is not allowed in a submodule VECTOR's condition, because type is elementwise, and we want the condition to apply to the vector as a whole (we don't want to allow "holes" in the submodule vector) 2018-05-18 Andras Varga * cNedNetworkBuilder: fix: allow empty typename value to be used 2018-05-17 Andras Varga * cNedNetworkBuilder: use cDynamicExpression not cParImpl for build-time expression evaluation 2018-05-17 Andras Varga * cDynamicExpression: allow extra information to be passed for evaluation 2018-05-18 Andras Varga * Renamed namespace NedSupport to all-lowercase 2018-04-11 ------ omnetpp-5.3 released ------ 2018-03-01 Attila Torok * Update cDefaultMessagePrinter to use the new API. 2018-03-07 Andras Varga * cCanvas: added getAnimationSpeed(); better documentation for setAnimationSpeed() and holdSimulationFor() 2018-03-07 Andras Varga * Fix: forEachChild(): do not go into listeners which are not owned. If a module was hooked as a listener on another module, it was also listed in the child list (among parameters, gates and local objects) which was kind of weird. 2018-03-07 Andras Varga * Fix: cPars were visited both from cModule's and cComponent's forEachChild() 2018-03-06 Andras Varga * Result recorders: Added "timeWeightedHistogram" recorder 2018-03-01 Andras Varga * cHistogram: Do not keep numOverflows/numUnderflows for weighted statistics, only sums of weights. 2018-02-11 Andras Varga * cCanvas: Proper error message if "type=" is missing from @figure. 2018-02-08 Andras Varga * cDefault/AutoHistogramStrategy: fix std::bad_alloc on collecting an extremely large value. 2018-02-03 Andras Varga * cDynamicExpression: fix: wrong display of errors with operator "%". ("%" was misinterpreted by cRuntimeError as format argument.) 2018-02-02 Attila Torok * Fix potential stack overflow in cComponent::forEachChild(). 2018-01-31 Andras Varga * Make statistic recorders "findable" from Qtenv - make cResultListener subclass from public cObject - cComponent: forEachChild() to recurse into listeners that are cObjects - StatisticsRecorder: forEachChild() to recurse into stored cStatistic - StatisticsRecorder: take ownership of cStatistic (it can, since it is now cObject) - cResultRecorder: override getName() and getFullPath() 2018-01-31 Andras Varga * cModule: fix: forEachChild() skipped cComponent base class 2018-01-31 Andras Varga * sim_std.msg: Refinements - KSplitRecorder, PSquareRecorder were missing - listenedSignals[], results[]: changed @group to "signals,statistics". 2018-01-15 .. 01.29 Andras Varga * Implemented new cHistogram, histogram strategy classes, and implemented histogram API changes. See include/omnetpp/ChangeLog. 2017-07-19 Andras Varga * Removed transient detection and result accuracy detection classes 2017-02-10 Andras Varga * cMessage: remove experimental "tags" API 2018-01-12 Andras Varga * NED functions int() and double() now preserve the unit 2018-01-09 Andras Varga * cNedFunction: added "intquantity" (integer with a measurement unit) to the list of type available in NED function signatures. * cDynamicExpression: The evaluation stack now stores integer values as intpar_t (practically int64_t), and operations on integers are now computed using integer arithmetic. Before, the stack represented all numbers using "double", and integers >= 2^52-1 in absolute value could only be represented using precision loss. If one operand is floating point and the other is integer, the integer one is promoted to double. The guideline is that implicit precision loss should be avoided. Therefore, casting a double to integer now requires the use of the int() operator (thus making the loss of the fractional part explicit.) Integers are implictly cast to double; however, if the double cannot represent the given integer value precisely, an error will be raised. The double() operator can be used suppress that error and allow the computation to proceed with precision loss. 2017-12-14 Andras Varga * cNedValue: added INT type 2018-01-04 Andras Varga * cPar/cParImpl INT-releated refinements 2017-12-18 Attila Torok * gettime.cc: Added opp_get_monotonic_clock_nsecs(). 2017-01-16 Andras Varga * cRealTimeScheduler: use opp_get_monotonic_clock_usecs() and int64_t instead of gettimeofday() and timeval. 2017-12-05 Andras Varga * Renamed cNEDValue, cNEDFunction, NEDFunction, cNEDMathFunction to cNedValue, cNedFunction, NedFunction, cNedMathFunction (NED->Ned). Old names can still be used via compatibility typedefs. * sim_std.msg: Adapted to message compiler changes, see src/nedxml/ChangeLog. 2017-09-11 Zoltan Bojthe * cPacket: Check that the length of the packet to be encapsulated is nonnegative. 2016-11-18 Zoltan Bojthe * cObject: dropAndDelete(): include actual owner in error message 2017-12-14 Andras Varga * cPar, cNEDValue, cExpression, cDynamicExpression, cParImpl, cLongParImpl: Follow changes in the header files (mainly the long->intpar_t change and its logical consequences, see include/omnetpp/ChangeLog.) 2017-12-09 Andras Varga * Reslt recorders: Added the "psquare" and "ksplit" recorders. They are useful for recording histogram information from a variable whose distribution is not known in advance, and might change over time. Internally they rely on the cPSquare and cKSplit classes, respectively. 2017-12-08 ------ omnetpp-5.2.1 released ------ 2017-10-18 Attila Torok * Fix: Include windows.h with the correctly capitalized name. On Windows it doesn't matter, but when cross-compiling on Linux, the build failed. 2017-11-10 Andras Varga * cDynamicExpression: fixed leak in Elem::operator=() functions 2017-09-18 ------ omnetpp-5.2 released ------ 2017-08-18 Rudolf Hornig * Elimnated some warnings 2017-08-14 Andras Varga * packetBytes/packetBits filters: throw error if object is not a cPacket. (nullptrs are allowed and ignored.) 2017-08-14 Andras Varga * Reasult filters/recorders: ignore NaNs. This change affects count (which now also ignores nullptrs), sum, min, max, avg, timeavg, sumPerDuration, stats, histogram. For the time weighted case, NaNs mark intervals to be ignored. 2017-08-08 Andras Varga * cResultFilter: added an init() method. That made it possible to update MeanFilter to obey the timeWeighted=1 @statistic setting. 2017-07-19 Andras Varga * Added "skipNan" result filter, for use with @statistic. 2017-07-17 Andras Varga * Statistics recording: added support collecting for time-weighted statistics of variables like queue length. Add timeWeighted=1 or timeWeighted=true to @statistic to make it collect time-weighted statistics. timeWeighted=1 affects the operation of the following recorders: "mean", "stats" and "histogram". The "timeavg" recorder always computes time average; an additional recorder "avg" has also been added that always computes unweighted mean. "mean" emulates either "avg" or "timeavg", depending on the presence of timeWeighted=1. 2017-07-15 Andras Varga * Histogram classes: added support for weighted statistics. See include/omnetpp/ChangeLog for details. 2017-07-12 Andras Varga * cStddev: implemented support for weighted statistics. See include/omnetpp/ChangeLog for details. Note: there is a slight change in the file format statistics are saved into (saveToFile() / loadFromFile() methods). Existing files must be re-recorded or hand-modified. 2017-04-06 Andras Varga * Modernizing: use C++11's range-based for loops where applicable, using clang-tidy's modernize-loop-convert. * Modernizing: replace INT64_PRINTF_FORMAT and LL with C++11's PRId64. Note: PRId64 includes the "d" that was not part of INT64_PRINTF_FORMAT alias LL. 2017-05-25 Rudolf Hornig * Updated makefiles for speeding up the build: - generated files are created only once, even when using parallel build - binaries are copied to their final destination using proper makefile targets 2017-06-08 Attila Torok * Changes necessary for allowing the OSG Viewer to be factored out from Qtenv into as separate support library, loaded on demand at runtime. The sim. kernel now does not link with, or otherwise require, the OSG libraries. Details: - cOsgCanvas now treats osg::Node* as opaque pointers. No attempt is made to dereference it. - cOsgCanvas now performs osg::Node reference counting via cEnvir's new refOsgNode()/unrefOsgNode() methods instead of Node's methods. - Removed sim_osg.msg, and OSG-related code from sim_std.msg. Contents has been moved inside the Qtenv OSG plugin. - No WITH_OSG or WITH_OSGEARTH conditionals anywhere in omnetpp or qtenv. The only difference with WITH_OSG is whether or not the support library gets built. Consequences: the cOsgCanvas is always available; cModule::getOsgCanvas() never throws "OSG not available" exception. 2017-06-12 Attila Torok * cRandom: fixed typo in ctor implementation. Use member instead of parameter. 2017-05-19 Attila Torok * Fixed assertion failure in static registerSignal() in a dynamically loaded lib. 2017-05-18 Attila Torok * Figure classes: fixed parsing of offset property for path figures. 2017-05-10 Attila Torok * Figure classes: implemented getEffectiveZIndex() 2017-05-10 Attila Torok * Figure classes: Implemented cPanelFigure 2017-05-04 Attila Torok * Figure classes: improvement in @figure parsing: allow empty string as property key if it has no values. Such property keys are created when there is a semicolon at the end of the list (but within the parentheses). 2017-04-18 Attila Torok * Figure class: misc small refinements: - figure copying: zIndex was not copied - change notification adjustments 2017-05-08 ------ omnetpp-5.1.1 released ------ 2017-03-31 ------ omnetpp-5.1 released ------ 2017-03-27 Attila Torok * fix cClassDescriptor::double2string stack corruption fixed with long numbers. 2017-03-22 Andras Varga * fix cStatistic::freadvarsf() samples/histograms caused error when reading saved hist.dat, because cPSquare::loadFromFile() read too much when reading the n[] and q[] arrays from file 2017-03-14 Attila Torok * cOutVector: Removed remains of support for recording a pair of doubles in an output vector. 2017-03-07 Andras Varga * SimTime: code of ttoa() moved into the common library as opp_ttoa(), for reusability. (SimTime::ttoa() now delegates to opp_ttoa()). * SimTime: str() made more efficient (bypass std::stringstream and op<<) 2017-03-16 Rudolf Hornig * onstartup.cc: Detection of release vs. debug mode collision is now safer on Windows 7: __is_release_oppsim__ changed to __release_oppsim_magic_number__ 2017-03-08 Andras Varga * statisticparsing.cc: Fix in @statistics processing: module in source=. attr did not take effect. Listener was mistakenly added to the module of the @statistic, not to the submodule. 2017-03-16 Rudolf Hornig * Minor changes in StartupChecker to improve the reliability of 'release mode detection' on Windows 7 machines where GetProcAddress() was behaving unpredictably with certain big models (i.e. INET) 2017-02-06 ------ omnetpp-5.1pre3 released ------ 2017-02-01 Andras Varga * Fix #823: added setBuiltinAnimationsAllowed() to sim_std.msg 2017-02-01 Andras Varga * Follow change: return type of send() and snapshot() methods changed to 'void' 2017-02-01 Andras Varga * Register the WarmupPeriodFilter class to make it accessible from user code 2017-01-16 Andras Varga * Implemented opp_get_monotonic_clock_usecs() 2017-01-02 Andras Varga * Follow cFigure API change related to parse(), getAllowedPropertyKeys() 2017-01-02 Andras Varga * Follow API change: Canvas: added insertBelow() / insertAbove(), removed insertChild() 2017-01-18 Rudolf Hornig * Fixed build error if WITH_PARSIM=no 2017-01-06 Attila Torok * Fix cChannel::forEachChild bug (wrong superclass). 2017-01-04 Attila Torok * Don't notify about cDisplayString change if it didn't change. Also corrected (negated) the value of a state variable. The meaning inverted when it was renamed, but the usage stayed the same. 2016-10-06 Zoltan Bojthe * cPacket: use getBitLength() instead of bitLength member 2016-12-23 ------ omnetpp-5.1pre2 released ------ 2016-12-19 Andras Varga * errmsg.cc/h: added E_REALTIME 2016-12-16 Andras Varga * Suppressed shift/reduce warnings in .y files by specifying the expected number of conflicts (%expect) 2016-12-02 Attila Torok * sim_std.msg: added missing cFigure declarations for Ring and Icon. 2016-11-30 Rudolf Hornig * build: Makefile refactored. Added clang-c2 support and optimized the build process. * build: removed Makefile.vc, as Visual C++ builds are now handled by the standard Makefiles. 2016-11-18 Andras Varga * Follow cEnvir APIs change: StaticEnv: added appendToImagePath(), loadImage(), getSubmodulePosition() dummy implementations. 2016-11-14 Andras Varga * cCanvas: implementatim: added Register_Figure(), plus tests * cArcFigure: fix so that it can be instantiated from an empty NED property 2016-11-11 Andras Varga * cModule: getModuleByPath(): "" to mean the toplevel module. There was no syntax for that, apart from spelling out the toplevel module's name. 2016-10-30 Andras Varga * cException: put where/when information AFTER the exception text + nits. Goal: improve readability, as user needs to go through less blabla before getting to the actual error message. 2016-11-10 Andras Varga * Refined error messages: capitalization, quotation marks, etc. 2016-11-08 Andras Varga * sim/netbuilder: fix wrong matching order of patterns when processing deep parameter assignments (see NED_parampattern_5.test) 2016-11-05 Andras Varga * cXMLElement: getElementByPath() made more tolerant to whitespace inside the path string (see cXMLElement_getElementByPath_1.test) 2016-11-05 Andras Varga * cDisplayString: fix obscure parse error (see NED_display_n5.test) 2016-10-28 Andras Varga * Refined error messages. 2016-10-11 Attila Torok * sim_std.msg: Made displayString fields directly editable. 2016-10-27 Andras Varga * cAbstractTextFigure::getBounds(), cImageFigure::getDefaultSize() now return more precise dimensions, due to cEnvir change: its getTextExtent() and getImageSize() methods now return the size in doubles and not in ints. Motivation: - small font size (displayed zoomed) - SVG and other vector images that don't necessarily have integer dimensions 2016-10-25 Andras Varga * cConfiguration: fix: allow filename-type config values to be quoted. Necessary because result file names now routinely contain '#'. Examples: output-scalar-file=General-#0.sca <-- wrong, as #0.sca is taken as comment output-scalar-file="General-#0.sca" <-- OK 2016-10-22 Andras Varga * cConfigOption: Implemented new lookup methods find() and get() 2016-10-19 Andras Varga * Follow cEnvir API changes related to askyesno(), putsmsg(), alert(), etc. 2016-08-08 Andras Varga * cCanvas: implemented setAnimationSpeed(), holdSimulationFor() * StaticEnv: follow related cEnvir API change (getAnimationTime(), getAnimationSpeed(), getRemainingAnimationHoldTime()) 2016-09-21 Andras Varga * Figure classes: setters methods to only fire change notification if value has actually changed. 2016-09-21 Andras Varga * SimTime: fix: ttoa() did not work for t=INT64_MIN 2016-09-01 Andras Varga * Canvas: added getPosition() to arc, rectangle, oval, ring, and pieslice figures. 2016-09-05 Rudolf Hornig * cOsgCanvas: understand WITH_OSGEARTH. 2016-08-31 Andras Varga * Canvas: added support for self-refreshing figures (cFigure:: refreshDisplay()). 2016-08-30 Andras Varga * Canvas: parse() methods not to overwrite settings that are not specified in @figure. This will allow settings set e.g. in the constructor to take effect 2016-08-29 Benjamin Seregi * Fingerprint: fix: getAsString() returned a dangling pointer. 2016-08-26 Andras Varga * Canvas: follow API changes, see include/ChangeLog 2016-08-24 Andras Varga * cComponent: getDisplayString(): do not throw exception. The "Cannot access display string yet: parameters not yet set up" exception does not seem to be necessary or useful any more. 2016-08-23 Andras Varga * XML elements and XML parameters became made inspectable: - cXMLParImpl::forEachChild() visits the contained cXMLElement - cXMLElement::forEachChild() visits contained elements - sim_std.msg: better descriptor for cXMLElement 2016-08-23 Andras Varga * cISimulationLifecycleListener's destructor to deregister the listener. 2016-08-23 Andras Varga * cComponentType: implemented getNedSource() 2016-08-23 Andras Varga * cPacket: getDisplayString() to fall back to the encapsulated packet's display string 2016-08-23 Andras Varga * cPar: fix: unit was missing from info string (str()). This was apparent in Qtenv/Tkenv inspectors, and made it difficult to edit the value. 2016-08-23 Andras Varga * cXMLElement: added str(), getXML() 2016-08-23 Andras Varga * cObject and subclasses: detailedInfo() removed. See include/ChangeLog for more info. 2016-08-23 Andras Varga * cObject and subclasses: rename info() to str(). See include/ChangeLog for more info. 2016-08-05 Andras Varga * cAbstractTextFigure: implemented "halo" attribute 2016-08-05 Andras Varga * cFigure: changed "childZ" parse-time attribute into "zIndex", a proper field in cFigure. 2016-08-22 Andras Varga * cDensityEstBase: saveToFile() fix; bug caused cPSquare to save an array of uninitialized values. 2016-08-22 Andras Varga * cStatistic and subclasses: loadFromFile() made safer: - use GNU's __attribute__(format(...)) for checking freadvarsf() args - opp_vsscanf(): more compliant to standard sscanf() (%lg to mean double) - %g -> %lg (follow opp_vsscanf change) 2016-08-22 Andras Varga * cDensityEstBase: bugfix in loadFromFile(): freadvarsf() read an int into a bool variable. Bug caused the Histograms sample to crash in the 2nd and subsequent runs (when user chose "Yes" to "Load previously saved data?" question) on 64-bit architectures. 2016-08-22 Andras Varga * cPSquare: use proper constant -DBL_MAX (instead of -1e50) 2016-08-22 Andras Varga * cPSquare: fix: ctor to deallocate precollectedValues[] which is unused by this class. 2016-08-10 Andras Varga * cFigure: implemented tooltip and assocatedObject 2016-08-02 Andras Varga * cPixmapFigure: added support for "fillColor" @figure attribute (initial fill for the pixmap) 2016-08-01 Andras Varga * cAbstractShapeFigure: fix: in @figure, lineColor= didn't work as a means of setting outlined=false 2016-07-29 Andras Varga * cFigure: fix bounding box computation for anchor modes ANCHOR_E and ANCHOR_W. Affects several figure classes. 2016-08-01 Andras Varga * cProperty: implemented internal method updateWith() 2016-08-05 Andras Varga * cEvent: follow change: insertOrder needs to be eventnumber_t to prevent overflow 2016-08-05 Andras Varga * cEvent: implemented comparison functions shouldPrecede() and compareBySchedulingOrder() 2016-08-04 Andras Varga * cEventHeap: adjustment: insertOrder was not updated in the circbuf case (but was not used either) 2016-08-04 Andras Varga * cEventHeap: implemented setUseCb(false) 2016-08-04 Andras Varga * cEventHeap: fix: events scheduled for current simulation time w/ negative priority were handled incorrectly 2016-08-03 Andras Varga * canvas: changed class name lookup for the @figure "type" attribute. Previous code did not play well with namespaces. Now, the type name is first tried "as is", second, by capitalizing it, and third, by also appending "Figure". That is, a figure class named inet::FooFigure can be referred to as "inet::foo", "inet::Foo" and "inet::FooFigure". 2016-08-01 Attila Torok * sim_std.msg: Figure fields grouped (added @group annotations). 2016-07-29 Attila Torok * sim_std.msg: ANCHOR_BASELINE_xxx constants were missing from the enum 2016-07-21 Andras Varga * cAbstractTextFigure,cAbstractImageFigure: implemented getBounds(), using cEnvir's new getImageSize() and getTextExtent() methods. 2016-07-28 Andras Varga * cFigure: fixed font parsing in inspectors (parseFont() method) 2016-07-28 Andras Varga * StatisticsRecorder: removed cObject as private base class. This fixes crash when inspecting the owner of HistogramRecorder's inner cStatitistic. Reason for the crash: when mapping the value returned by getOwner() to HistogramRecorder, the pointer value will be off (will point to the cObject part instead of the start of the object). This cannot be easily fixed, as multiple inheritance is not mapped well into cClassDescriptors. Workaround: StatisticsRecorder no longer owns the cStatitistic object (but calls removeFromOwnershipTree() on it instead) so it no longer needs to be a cObject. 2016-07-25 Andras Varga * cSimpleModule, cEnvir: messageSendHop(): added "discard" parameter; also: moved call site to include message's last hop. This is needed e.g. for Qtenv's message log view (we want to clone the msg while it still exists). 2016-07-25 Andras Varga * cResultListener: added getClassName() (note: str() was added earlier) 2016-07-25 Andras Varga * cStaticFlag: isSet() renamd to isMainRunning() 2016-07-22 Andras Varga * cComponent: internal change: SignalData renamed to SignalListenerList 2016-07-22 Andras Varga * cComponent: signal mayHaveListeners() / hasListeners() reimplemented. Use global data structure to store which signals have listeners at all, anywhere. This replaces per-module int64 masks. Rationale: - if a signal has listeners in one place in a module (i.e. in one host), it is very likely to have listeners in most other places (i.e. all hosts) as well - efficient for unlimited signals, not only for the first 64 - straightforward implementation - possibly increased performance? as the "mask" argument has been reomved from fire() method; less check at each ancestor, etc. - cComponent became 2*64bit = 16 bytes smaller 2016-07-20 Andras Varga * sim_std.msg: allow inspecting result recorders by adding a result[] field to cComponent. 2016-07-19 Andras Varga * @statistic parser: accept $input as (preferred) synonym for $source 2016-07-19 Andras Varga * Added str() to cResultListener, and implemented it for result filters and recorders 2016-07-19 Andras Varga * Result recorders and filters: receiveSignal() and other methods made protected. They only need to be public in the base class. 2016-07-19 Andras Varga * sim_std.msg: allow inspecting listener lists by adding a listenedSignals[] field to cComponent. 2016-07-19 Andras Varga * sim_std.msg: "properties" array in cComponent is now accessible with fewer levels 2016-04-19 Andras Varga * Follow cEnvir change: remove messageSent_OBSOLETE(), a relic from OMNeT++ 3.x. 2016-07-13 Andras Varga * sim_std.msg: describe result filters/recorders 2016-07-13 Andras Varga * cResultRecorderDescriptor renamed to cResultRecorderType, and cResultFilterDescriptor renamed to cResultFilterType. Reason: Now that cResultFilter and cResultDescriptor will be in the sim_std.msg, the orignal names collide with the names of message-compiler generated descriptor classes. 2016-07-14 Andras Varga * cModule: buildInside() retval changed from int to void 2016-07-11 Andras Varga * Factored out a StatisticBuilder class from EnvirBase, and moved it into the sim.kernel. Details: - defer configuring statistics recording to the end of buildInside() -- this is needed for next item - @statistic source to accept signals qualified with module path - check source signals in @statistic (default: check if it's a simple module or channel; force with checkSignals key in @signal) - code to use symbolic constants for property names 2016-07-06 Andras Varga * cComponentType: factored out getSignalDeclaration() 2016-07-13 Andras Varga * sim_std.msg: fix ancient bug in cTopology descriptor (LinIn/LinkOut mismatch) 2016-06-23 Rudolf Hornig * The makefile now uses compiler-generated dependency files. 2016-06-20 Andras Varga * SimTime: added format(), currently as internal function for time display in Qtenv/Tkenv 2016-04-13 ------ omnetpp-5.0 released ------ 2016-04-13 Andras Varga * cScheduler and scheduler classes: info() now returns a short description that will be displayed in the GUI 2016-03-23 Zoltan Bojthe * Added markup to config option descriptions 2016-04-01 Rudolf Hornig * Fix bug #943, error in cDatarateChannel::forceTransmissionFinishTime(). It caused error when vector recording was on (recorded values not in increasing timstamp order) 2016-04-01 Andras Varga * cOsgCanvas: implemented zNear/zFar related changes (see include/omnetpp/ChangeLog) 2016-03-10 Andras Varga * cFingerprint renamed to cFingerprintCalculator, config option also renamed to fingerprintcalculator-class. 2016-03-10 ------ omnetpp-5.0rc released ------ 2016-02-22 Andras Varga * cSimulation: moved both updating the event number and simulation time into executeEvent(). They were updated inconsistently, plus executeEvent() is a better place for that than getNextEvent(), considering cScheduler's putBackEvent(). 2016-02-15 Levente Meszaros * Follow changes in the logging API, see include/ChangeLog 2016-02-05 Andras Varga * cEnvir: getRNGMappingFor(component) renamed to preconfigure(component) 2016-01-22 Andras Varga * cFigure: implemented API refinements, see include/ChangeLog * @figure parsing refined: - transform= now accepts "((a b) (c d) (t1 t2))" and matrix(a,b,c,d,t1,t2) syntaxes - in transform=, scale() now accepts center as well - in transform=, skew() now expects coefficient instead of angle - arc, rectangle, image, etc to support bounds=x,t,width,height as an alternative to the pos=,size=,anchor= triplet 2015-12-07 ------ omnetpp-5.0b3 released ------ 2015-11-19 Andras Varga * Implemented the new fingerprint mechanism. It adds the following new configuration options: - fingerprint-categories= (default: "tpl") - fingerprint-events= (default: "*") - fingerprint-modules= (default: "*") - fingerprint-results= (default: "*") 2015-11-23 Levente Meszaros * cEvent: initialize insertOrder (not strictly needed, but cleaner) 2015-11-20 Andras Varga * cSimpleModule::scheduleAt() return type changed from int to void. See include/ChangeLog for details. 2015-11-17 Andras Varga * Some cComponent/cModule methods made const. See include/ChangeLog for details. 2015-11-21 Andras Varga * SimTime improvements: - cPar operations now use the "long" conversion when appropriate (before it always used "double" conversion) - Refactored powersOfTen[] and setScaleExp() 2015-11-16 Andras Varga * SimTime improvements. See See include/ChangeLog for details. 2015-10-19 Andras Varga * Added extra arg (cObject *details) to emit() and cIListener methods. See include/ChangeLog for details. 2015-11-12 Rudolf Hornig * Fixed warnings. 2015-11-09 Andras Varga * Implemented refreshDisplay(). See include/ChangeLog for details. 2015-10-16 Andras Varga * omnetpp namespace made permanent (cannot be turned off): - removed configure option and preprocessor symbol USE_NAMESPACE - removed related macros: NAMESPACE_BEGIN, NAMESPACE_END, USING_NAMESPACE, OPP, OPP_STR, OPP_PREFIX etc. 2015-07-24 Andras Varga * Implemented cOsgCanvas. See include/ChangeLog for details. 2015-07-20 ------ omnetpp-5.0b2 released ------ 2015-06-29 Andras Varga * cClassDescriptor: string2enum() made more tolerant 2015-06-24 Andras Varga * sim_std.msg: refactored @enum annotations 2015-06-19 Andras Varga * cDynamicExpression: Fix #830 related bug: parser would crash on encountering a "//" comment in an expression 2015-06-16 Andras Varga * Cleanup: prefer ++it to it++ (less copying) 2015-06-12 Andras Varga * Cleanup: implement/follow iterator API changes (increment/decrement operators, operator* and operator->, deprecation of operator(); see include/omnetpp/ChangeLog for details) 2015-06-08 Andras Varga * Cleanup: More camelization and variable renaming 2015-06-11 Andras Varga * if(dynamic_cast) refactoring: change code like if (dynamic_cast(object) != nullptr) { cComponent *component = (cComponent *)object; ... } To: if (cComponent *component = dynamic_cast(object)) { ... } 2015-06-16 Andras Varga * FES made replaceable (see details in include/omnetpp/ChangeLog) 2015-06-15 Andras Varga * Follow deprecation of cQueue: length() and empty() 2015-06-09 Andras Varga * Follow removal of deprecated methods and typedefs (see include/omnetpp/ ChangeLog) 2015-06-09 Andras Varga * Remove deprecated cModule::getModuleByRelativePath() 2015-06-15 Andras Varga * cPSquare: remove old inactive code; cosmetics 2015-06-08 Andras Varga * Cleanup: code formatting 2015-05-22 Andras Varga * Modernizing: added the 'override' keyword (C++11) to overridden methods; it becomes blank when using with an older compiler. 2015-05-21 Rudolf Hornig * Modernizing: replaced NULLs by 'nullptr' (C++11); it is defined as 0 when using an older compiler. 2015-05-12 Andras Varga * Cleanup: data members, arguments and local vars changed to camelCase 2015-05-12 Andras Varga * Follow cException method renaming and related changes (see include/ omnetpp/ChangeLog) 2015-05-11 Andras Varga * Follow method renaming in statistic classes (see include/omnetpp/ChangeLog) 2015-05-11 Andras Varga * Follow data member renaming and camelization 2015-05-08 Andras Varga * Removed deprecated opp_error(), opp_terminate(), opp_warning() functions 2015-04-24 Andras Varga * Follow change: cStatistic now subclasses from cRandom, and random() methods renamed to draw() (a random() still exists but is deprecated and delegates to draw()) 2015-04-20 Andras Varga * Cleanup: use C++ names of C headers (e.g. instead of ) 2015-04-15 Andras Varga * Implement and follow signature change of random variate generation functions like exponential(). int rng argument became cRNG *rng and moved to first place. * Removed genk_intrand(), genk_dblrand(). 2015-04-14 Andras Varga * Cleanup: Eliminating the "simulation" macro: replaced occurrences by calls to the getSimulation() function. Goal: long-term, there should be enough getSimulation() methods around so that the global function can be thrown out. Ultimately, we'd like to get rid of the activeSimulation global var too. 2015-04-10 Andras Varga * Cleanup: Eliminating the "simulation" macro: added accessor methods. - cComponent::getSimulation() - cComponent::getSystemModule() - cScheduler::getSimulation() Note: simulation.getModuleByPath() calls in modules can simply be replaced by the module's getModuleByPath() method. 2015-04-14 Andras Varga * Cleanup: Eliminating the "ev" macro; its occurrences have been replaced by calls to a getEnvir() standalone function. 2015-04-09 Andras Varga * Added cComponent::hasGUI() to replace ev.isGUI() calls 2015-04-12 Andras Varga * Cleanup: copyright years updated 2015-04-11 Andras Varga * Cleanup: standardize and qualify header guards with the OMNETPP prefix 2015-04-08 Andras Varga * Modernizing: - Use a fixed include path (-Iinclude -Isrc) for all source folders under src/, and qualify cross-folder #includes with the folder name (e.g. change #include "stringutil.h" to #include "common/stringutil.h"). This increases readbility and reduces the chance of including a wrong header. - In source files, sort #include statements by folder. 2015-04-01 Andras Varga * Follow change: parsimPack() became const 2015-04-04 Andras Varga * Namespace-related improvements: - cObjectFactory::get() and find() extended with namespace lookup - signals type checking and createOne() to fall back to the "omnetpp" namespace 2015-03-12 Andras Varga * Default of "**.log-level" changed from DEBUG to TRACE 2015-03-12 Andras Varga * cPathFigure fix: closePath() broke the path (figure was not displayed any longer) 2015-03-04 ------ omnetpp-5.0b1 released ------ 2014-12-12 Andras Varga * cResultRecorder: ensure that finish() can only be called once (fixes #799) 2014-09-17 Andras Varga * Canvas API implementation finished. See include/ ChangeLog for details. 2014-08-18 Zoltan Bojthe * cEnum: added resolve(): similar to lookup(), but throws error if string is not found 2014-08-01 Andras Varga * cEnum: added bulkInsert() 2014-04-16 Andras Varga * cSimulation, cComponent, cModule: implemented component IDs: cSimulation now stores cComponent* not cModule*, so that cChannels have IDs too. 2013-11-21 Andras Varga Follow code cleanup, see include/ ChangeLog for details. 2013-09-26 Andras Varga * Implementation of the new logging API, see include/ChangeLog. Existing ev<< and ev.printf() logging statements were converted to EV<<. 2013-09-17 Andras Varga * cpacket.cc split from cmessage.cc; removed WITHOUT_CPACKET (a compatibility macro to help code migration from OMNeT++ 3.x to 4.0) 2013-04-24 Andras Varga * cancelEvent(): extra assertion: "cannot cancel another module's self-message" 2013-04-03 Andras Varga cTopology refactoring (use std::vector, etc.) 2013-03-19 Andras Varga * cDatarateChannel: forceTransmissionFinishTime() now emits channelBusySignal 2013-02-05 Andras Varga * cSimulation: changed fingerprint computation, so that the result becomes insensitive to module IDs, and sensitive to module path, message kind/length, message class name, control info class name, etc. Old computation mode can be restored with by defining USE_OMNETPP4x_- FINGERPRINTS (both when compiling OMNeT++ and models). 2013-01-28 Andras Varga * Implemented cEvent; see related ChangeLog entry in include/. Changes affect cSimulation, cMessage, cMessageHeap, cScheduler and subclasses, the parsim classes, etc. 2013-01-28 Andras Varga * Implemented simulation lifecycle listeners; see the ChangeLog in include/. * cSimulation: startRun()/endRun() removed, using lifecycle listeners instead 2012-11-05 Andras Varga * EXPERIMENTAL: In preparation for a remote simulation front-end GUI, added a mechanism for checking whether an object's state has changed since the last GUI refresh. For the bigger picture, see Cmdenv that contains the code that serves requests from the remote GUI. See include/ChangeLog for details. The code is currently surrounded with #ifdef SIMFRONTEND_SUPPORT, turned off by default. 2014-11-27 ------ omnetpp-4.6 released ------ 2014-12-01 Andras Varga * Fix #769 cVarHistogram produces wrong results with custom (i.e. manually specified) cells * Fix #794 NED: pattern assignments of channel parameters doesn't work * Fix #793 NED: local parameters cannot be used to initialize an inherited parameter * Fix #782 CQN examples are not running 2014-10-07 Andras Varga * cStdDev: fix: getMean(), getMin(), getMax() now return NaN if count==0 2014-06-30 ------ omnetpp-4.5 released ------ 2014-04-15 Andras Varga * Implementation of cMessagePrinter and Register_MessagePrinter() 2014-02-03 Andras Varga * Removed cCompoundModule. See include/ChangeLog for context. 2014-02-13 ------ omnetpp-4.4.1 released ------ 2014-02-11 Andras Varga * signal checking: fix #714: class name resolution for @signal type attr should take @namespace into account 2014-02-13 ------ omnetpp-4.4.1 released ------ 2013-12-20 ------ omnetpp-4.4 released ------ 2014-01-07 Andras Varga * use EXECUTE_ON_SHUTDOWN() to invoke cGlobalRegistration objects' clear() methods, cNEDLoader::clear(), and cNEDLoader::clear() just before the program exits. 2013-12-20 Andras Varga * Just-in-Time debugging support: cRuntimeError to invoke cEnvir's attachToDebugger() if debugger-attach-on-error is enabled 2013-12-17 Rudolf Hornig * Removed a compatibility macro required for INET 2.0 to compile with OMNeT++ 4.3; INET 2.1 and later do not need it. (If you want to compile INET 2.0 with OMNeT++ 4.4, you need change getFieldArraySize() method calls in the source to getArraySize()). 2013-11-17 Andras Varga cResultRecorder: support $-variables in the @statistic title - $name: name of the statistic - $component: component fullpath - $mode: recording mode - $namePart[0-9]+: given part of statistic name, when split along colons (:); numbering starts with 1 The last one is useful with @statisticTemplate; e.g. if the statistic name is "tcpConn:host1>host4(3):bytesSent", and the title is "bytes sent in connection $namePart2", it will become "bytes sent in connection host1>host4(3)" 2013-10-03 Andras Varga * cResultRecorder: added support for programmatically setting up result filters and recorders on signals. This is made possible by adding new args to init(): cProperty* attrsProperty, opp_string_map *manualAttrs; this allows result recorders to be used without a corresponding @statistic attribute, e.g. they can be added to signals programmatically * cEnvir: added support for @statistic-style result recording on dynamically registered signals (e.g. "conn-" where n is an integer). Instead of @statistic, use @statisticTemplate property in the NED file, and for each new signal call a new cEnvir method: addResultRecorders(cComponent *component, simsignal_t signal, const char *statisticName, cProperty *statisticTemplateProperty); 2013-11-22 Andras Varga * cSimpleModule, cSimulation: changes to support Tkenv's "Debug next event" feature. Both handleMessage() and activity() are supported. 2013-10-31 Rudolf Hornig * Fixed warnings when compiling with clang and -std=c++11 -Wall 2013-10-24 Andras Varga * Added optional checking of emitted signals against signal declarations in the NED file. Example signal declaration: @signal[numPackets](type="long") What it does: - only signals declared with @signal may be emitted - if @signal contains a "type=", data type is also checked. Check is turned off by default; it can be turned on with the check-signals = true configuration option. It is planned that in the 5.0 version signal checking will be turned on by default. See related changes in include/ChangeLog. 2013-10-24 Andras Varga * Fix: implementation of cPatternMatcher::containsWildcards() was missing 2013-10-01 Andras Varga * Added result filter 'removeRepeats' 2013-09-26 Andras Varga * Fix: cPacketQueue's clear() didn't zero the bit length [reported by Guglielmo Morandin] 2013-09-12 ------ omnetpp-4.3.1 released ------ 2013-07-29 Rudolf Hornig * Increased the maximum number of NED function parameters from 4 to 10. 2013-04-02 ------ omnetpp-4.3 released ------ 2013-02-08 ------ omnetpp-4.3rc1 released ------ 2013-01-29 Andras Varga * cModule: implemented the new getModuleByPath() method, and slightly updated the deprecated getModuleByRelativePath() and cSimulation's getModuleByPath(). 2012-01-31 Andras Varga * Signals implementation now allows static initialization of simsignal_t variables. (See include/ChangeLog for more details) 2012-01-18 Zoltan Bojthe * Added calculateWeightedSingleShortestPathsTo() to cTopology 2012-01-18 Andras Varga * Added hasEncapsulatedPacket() to cPacket 2012-01-14 Andras Varga * Added the implementation of cPatternMatcher and cMatchExpression 2012-03-13 ------ omnetpp-4.2.2 released ------ 2012-01-17 ------ omnetpp-4.2.1 released ------ 2011-12-08 Andras Varga * nedfunctions.cc: implemented "any select(int index,...)" 2011-10-28 ------ omnetpp-4.2 released ------ 2011-11-05 Zoltan Bojthe * Activities are now using the swapcontext() POSIX call to implement coroutines (if available on the platform). Newer Linux distros use 'fortified' gcc, so the older coroutine library using setjmp()/longjmp() does not work any more. 2011-10-24 Andras Varga * ccomponent.h: asserted that registerSignal() cannot be invoked from static initialization code. 2011-09-11 ------ omnetpp-4.2rc1 released ------ 2011-08-30 Andras Varga cmessageheap.cc: insert(): fix: must not use circbuf optimization if there's already a message in the heap scheduled earlier for the same simulation time, otherwise the insertion order of similar messages (same delivery time and priority) will not be kept. 2011-07-28 Andras Varga * csimplemodule.cc: fix: throwing "not owner of message" from send()/ sendDirect()/scheduleAt() crashed if simulation.getContextModule() returned NULL (does not occur in event handling code). 2011-06-25 Andras Varga * The internal class cMathFunction was renamed to cNEDMathFunction, to follow similar renaming of corresponding registration macros (Define_Function --> Define_NED_Math_Function). * Result filter/recorder stuff moved here from src/envir, so that users can contribute their own result filters and recorders. See include/ChangeLog for more info. 2011-06-14 Andras Varga * cDynamicExpression::Value, also shared by cNEDFunction, has been factored out to a cNEDValue class. 2011-05-17 Andras Varga * cexception.cc: fix #301: cException::init() wrote 1 byte past the end of buffer[BUFLEN]. 2011-05-05 ------ omnetpp-4.2b2 released ------ 2011-04-15 Andras Varga * nedfunctions.cc: implemented the xml() NED function. It accepts a string argument, and parses it as XML. 2011-04-13 Andras Varga * nedfunctions.cc: added firstAvailable() NED function. It accepts a number of strings (varargs), interprets them as NED type names (either short names or fully qualified names), and returns the first one that exists and is also "available" (i.e. the C++ implementation class exists, see cComponentType::isAvailable()) 2011-04-05 Andras Varga * NED functions (cNEDFunction class, Define_NED_Function() and Define_NED_Function2() macros): implemented varargs support. If the signature ends in ", ..." then the function will accept any number of additional arguments of any types. (At runtime, the implementation has access to both the actual number and types of args). When passing extra args, optional arguments (those marked with '?' in the signature) must all be specified, i.e. varargs can only come when all declared args are present. 2011-02-23 ------ omnetpp-4.2b1 released ------ 2010-10-20 Andras Varga * cQueue fix: op= could result in a different order of objects than the original (if objects were not originally ordered according to the compareFunc) 2010-07-29 Andras Varga * fixed a number of parallel simulation related bugs: - bug #193 issue 1: parallel simulation did not work with inout gates (cGates were not replaced with cProxyGates on partition boundary) - bug #193 issue 2: partitioning didn't work with scalar modules (cause: for scalar modules, ev.isModuleLocal() was incorrectly invoked with index==0 instead of -1) - bug #193 issue 3: parallel simulation didn't work with scalar gates on partition boundary (cause: scalar gates were not handled properly by connectRemoteGates(): they were mashalled with index==0 which peer interpreted as element[0] in gate vector) - bug #194: Tkenv didn't animate messages send out of a parsim partition, nor messages deleted by a channel (cause: missing cEnvir call from cSimpleModule) 2010-06-11 ------ omnetpp-4.1 released ------ 2010-06-09 Andras Varga * eliminated warning while compiling sim_std_m.cc 2010-05-31 ------ omnetpp-4.1rc2 released ------ 2010-05-10 Rudolf Hornig * cDynamicExpression: assigning an integer parameter to a double parameter lost the unit during conversion, resulting in a 'cannot convert none to unit XXX' error message. 2010-05-09 Andras Varga * cPar: isNumeric() now returns false for boolean parameters. This is done for consistency, as calling doubleValue() and longValue() has already resulted in a "cannot cast non-numeric type" exception in the 4.0 version. 2010-05-03 Andras Varga * std_sim.msg: "contents[]" is now displayed as "defaultList[]"; group label "general" renamed to "fields" * cSimulation doesn't need to be cOwnedObject, cNamedObject is enough; this prevents "undisposed object cSimulation" message when simulation is killed via Ctrl+C. * disabled "Warning: cStaticFlag flag still set while shutting down" message, as it was always printed when exiting Tkenv via Ctrl+C. Can still be enabled when debugging an app that embeds simulation. 2010-04-30 Rudolf Hornig * added simTime() NED function to return the current simulation time in NED expessions. 2010-04-27 Andras Varga * removed Enter_Method() from callInitialize() and scheduleStart(), as flashing "method call" arrows made it impossible to run in Tkenv models that generates lots of modules dynamically. 2010-04-23 Andras Varga * fix of bug #43: exponential(), normal(), truncnormal() and geometric() could produce +INF, due to log(dblrand()) in their code where dblrand() can produce zero. Solution: use 1.0-dblrand() instead, i.e. (0,1] instead of [0,1). Side effect: fingerprint change for all simulations that use those distributions as input. 2010-04-20 ------ omnetpp-4.1b4 released ------ 2010-03-29 Andras Varga * histogram classes (cHistogram, cLongHistogram, cDoubleHistogram): - fix: setNumFirstVals() took no effect if no setRange..() method was called - save/load/pack/unpack used slots in firstvals[] only - support for dup() - in integer mode, use whole numbers as cell boundaries (not halfs); the lower bound of a cell is inclusive, the upper limit is exclusive just as with doubles - default number of cells changed (30 in integer mode, 200 in dbl mode) - in result files, an integer histogram is now denoted with the line "attr type int" instead of "attr isDiscrete 1". 2010-03-14 ------ omnetpp-4.1b3 released ------ 2010-03-11 Andras Varga * cComponent::recordParametersAsScalars(): recording a boolean parameter caused an error [reported by Alberto Cortes] 2010-03-10 Andras Varga * The transform() methods of histogram classes now throw an exception if the histogram was already transformed. Clients may call isTrans- formed() to determine whether transform() needs to or may be called. 2010-02-27 Andras Varga * created cHistogram class by merging cDoubleHistogram and cLongHistogram functionality. 2010-01-26 Andras Varga * fix: cProperties::getNames() and getIndicesFor() were broken 2010-01-23 Andras Varga * implemented signals mechanism. See include/ChangeLog for details 2010-01-22 Andras Varga * componenttype.cc: fix: crash if module object ctor throws exception * cdynamicexpression.cc: change: operands of the '%' (integer modulo) NED operator must be dimensionless (otherwise the result of truncation depends on the choice of the measurement units) 2009-12-17 Andras Varga * fixed bug #116: cPacketQueue::remove() incorrect behavior when called with a packet that was not in the queue 2009-10-14 Andras Varga * dynamic network builder: cComponentType::create() sets NED parameters as well from the similarly named submodule section of the parent compound module's NED file 2009-07-26 Andras Varga * bugfix: cpar.cc: parse() and some other cPar methods did not cause handleParameterChanged() to be invoked on the owner module [ViRe] 2009-07-26 Andras Varga * bugfix: opp_typename(): gcc demangling of pointer type names (Foo*) were not handled (they are needed for correct error messages in check_and_cast<>()). 2009-07-25 Andras Varga * cmessageheap.cc: FES performance improvement. cMessageHeap was changed to more efficiently handle the insertion and removal of events scheduled for the current simulation time. Such events are actually quite common due to plain (zero delay, zero datarate) connections between modules. The idea is to handle these events separately, without touching the normal FES data structure (binary heap). Such messages (i.e. with arrivalTime==simTime() and priority==0) are added at the tail of a circular buffer, an O(1) operation. removeFirst() also checks the circular buffer first: if the buffer is not empty, it removes and returns the head element from it (also O(1)); it only goes to the heap if the buffer is empty. This way the O(log n) heap insertion and removal operations are eliminated for these messages and are replaced with a small O(1) cost; the overall performance gain can be quite significant if the FES contains a lot of events (a few thousand or more). The extra overhead for non-matching messages is nominal. The circular buffer is reallocated when it gets full. The observed performance gain was ~5% for a wireless INET model with an average FES length of ~500 events; a higher gain can be expected with larger models where FES handling dominates the runtime. For small models (FES size ~10) the performance gain is about 1%. * cmessageheap.cc: minor performance improvement: implemented operator> for cMessage instead of operator<=. This results in some performance gain for debug builds (not in optimized builds though where the compiler performs inlining and other optimizations). 2009-06-25 Andras Varga * ccomponenttype.cc, cdynamiccomponenttype.cc: made it possible to use a custom C++ class for compound modules as well (@class() property) 2009-06-22 Andras Varga * geometric(): assert that parameter p is in range [0,1) 2009-03-12 ------ omnetpp-4.0 released ------ 2009-03-25 Andras Varga * bugfix: cArray::clear() crashed if there was a hole (NULL element) in the array; the bug got introduced in 4.0 [reported by Roland Bless] 2009-02-27 ------ omnetpp-4.0rc2 released ------ 2009-02-24 Andras Varga * cStringPool: commented out dump() call in the destructor 2009-02-07 Andras Varga * cNEDFunction and Define_NED_Function(): changed signature string to a C-like syntax. * added description field to both cNEDFunctions and cMathFunctions * removed obsolete NED functions (genk_*: genk_uniform, genk_normal, genk_exponential, etc) * debug-on-errors: changes to the printed message 2009-02-04 Andras Varga * nedsupport.cc: fix: NED: a channel type could not refer to local parameters ("this.param" caused an error) 2009-01-10 Andras Varga * csimulation.cc: simulation.init() gets called automatically, via EXECUTE_ON_STARTUP() * csimulation.cc: calls to scheduler->startRun()/endRun() merged into cSimulation::startRun()/endRun() * csimulation.cc: scheduler object now gets deleted by cSimulation, not externally by Envir 2008-12-14 Andras Varga * sim_std.msg: fixed bug #33 2008-12-12 ------ omnetpp-4.0rc1 released ------ 2008-11-26 Andras Varga * library renamed to oppsim 2008-02-25 Andras Varga * see include/ChangeLog for the summary of changes done for omnetpp-4.0, in the period 2006..2008. 2006-10-21 ------ omnetpp-3.3 released ------ 2006-10-19 Andras Varga * csimplemodule.cc: bugfix: worked around Visual C++ bug that causes exception handling to mess up when SwitchToFiber() is called within a catch block. See Microsoft forum patch: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=835791&SiteID=1&mode=1 2006-09-28 Andras Varga * cmessage.cc: fix in refcounting code: when decrementing refcount for encapsulated msg, its ownerp should be NULL'ed out if it originally pointed to this message. This bug caused Tkenv to crash when the encapsulated message's inspector was open (as it tried to print fullPath()). 2006-03-19 Andras Varga * csimul.cc: added implementation of guessNextEvent() etc. Removed updating simTime() from doOneEvent() which interfered with some parallel simulation algorithms (caused false "causality violation" errors). 2006-03-15 Andras Varga * distrib.cc: gamma_d() was bogus for the alpha<1 case [reported by Patrick McDonnell]. For alpha>1, use Marsaglia2000 instead of Cheng-Feast79. 2006-02-27 Andras Varga * cmersennetwister.cc, clcg32.cc: initialize() updated for parallel simulation 2006-01-12 ------ omnetpp-3.2p1 released ------ 2005-10-19 ------ omnetpp-3.2 released ------ 2005-10-05 Andras Varga * cgate.cc: performance: made fullname creation on-demand 2005-09-15 Andras Varga * csimplemodule.cc: added method cancelAndDelete(cMessage *msg). 2005-09-14 Andras Varga * cpolymorphic.cc, etc: dup() moved up to cPolymorphic, and return type changed to cPolymorphic. See include/ChangeLog. * cmodule.cc, csimplemodule.cc, etc: module constructor signature change, see comment in include/ChangeLog 2005-09-12 Andras Varga * cxmlelement.cc, minixpath.cc: fixed getElementByPath() bug introduced 2005-08-09. * cdefaultlist.cc: destructor to use ev.undisposedObject(). 2005-08-09 Andras Varga * cxmlelement.cc: bugfixes in the mini-XPath interpreter (leading '//' was handled incorrectly), and stripped minixpath.cc/h from it. 2005-08-07 Andras Varga * cxmlelement.cc: the builtin mini-XPath interpreter turned into a class (MiniXPath), and it now understands parameters ($PARAM) inside predicates; parameter values come from a cXMLElement::ParamResolver object. * cmessage.cc: implemented reference counting of encapsulated messages. See include/ChangeLog for more comments. 2005-07-25 Andras Varga * coutvect.cc: implemented recordWithTimestamp() functions. * cpar.cc: added call to omodp->handleParameterChange() to cModulePar each time the parameter's value changes. * cpar.cc: removed beforeChange()/afterChange() calls from setInput() and setPrompt(), because these methods don't change the stored value. * several files: adopted to cCommBuffer change (packObject(), unpackObject() moved into the class) * cstat.cc: cStdDev::info() now prints mean, stddev, min, max as well 2005-07-24 Andras Varga * cdispstr.cc: added setTagArg() method for numeric (long) argument. * cpar.cc: added isConstant() member to cPar * cmessage.cc: arrivedOn() impl change, see include/ChangeLog * cxmlelement.cc: added getFirstChildWithTagName(const char *tagname) and getNextSiblingByTagName(const char *tagname) to cXMLElement * ctypes.cc: cModuleType::createScheduleInit(): NULL is not allowed as parent module 2005-07-23 Andras Varga * cwatch.cc: WATCH implementation changed * added cstlwatch.cc 2005-04-27 Andras Varga * cobject.cc: fixed bug in cObject copy ctor. Problem hasn't surfaced earlier because no subclass used this ctor (they use op=) [reported by Shanti] 2005-04-21 Andras Varga * util.cc: implemented simtimeToStrShort(). * cmessage.cc: changed cMessage::info() to display time *until* arrivaltime as well 2005-04-05 Andras Varga * cstringtokenizer.cc: fix: prepared cStringTokenizer for receiving NULL as input/delimiter string. [reported by Tom Parker] 2005-03-31 ------ omnetpp-3.1 released ------ 2005-03-22 Andras Varga * cpar.cc: updated for changed cEnvir::getParameter() return type, see include/ChangeLog and src/envir/ChangeLog. 2005-03-19 Andras Varga * cdispstr.cc: fixed incorrect handling of terminating stray backlash during parsing 2005-03-18 Andras Varga * added cstrtokenizer.cc 2005-03-17 Andras Varga * cscheduler.cc: implemented executionResumed() in cRealtimeScheduler 2005-03-15 Andras Varga * cexception.cc: implemented cRuntimeError. * several files: changed throw new cException to throw new cRuntimeError. * new omnetpp.ini entry: [General] debug-on-errors = true/false (default: false) If turned on, errors will cause the program to break into the C++ debugger. More previsely, cRuntimeError's constructor will do __asm int 3 (debugger interrupt) on Windows, and raise(SIGABRT) on other platforms (Linux, etc). This makes it possible to investigate the context (stack frames, variables etc) of a runtime error. * cmessage.cc: setControlInfo(), removeControlInfo(), destructor: control info isn't supposed to be a cObject, but if it is, call take() and drop() on it. [reported by Kurtis Kredo II] 2005-03-07 Andras Varga * chist.cc: changed to eliminate warnings about converting double to int 2005-02-06 Andras Varga * csimplemodule.cc: send()/sendDelayed() fix: check if output gate is connected. If we didn't throw error there, msg would be delivered back to the sender module as a self-message. 2005-01-12 Andras Varga csimplemodule.cc, csimul.cc: changed the way scheduled events or sent messages for deleted or finished (see cSimpleModule::end()) modules are handled. Before, these messages were deleted by the cSimpleModule destructor, but this made it very long to clean up large models. Now, messages are not deleted in the dtor, but left in the FES -- they will be discarded in cSimulation::selectNextModule() when they're met. 2005-01-10 Andras Varga * cscheduler.cc: added cRealTimeScheduler implementation 2005-01-07 Andras Varga * cdispstr.cc: getTagArg(): fixed to never return NULL (returns "" instead) 2005-01-02 Andras Varga * cstruct.cc: fix: cStructDescriptor ctor crashed if NULL pointer was passed to it 2004-12-29 ------ omnetpp-3.0 released ------ 2004-12-27 Andras Varga * csimplemodule.cc: fix: in Windows, creation of activity() simple modules crashed if coroutine (win32 Fiber) could not be created. 2004-12-22 Andras Varga * chist.cc: cLongHistogram changes to enable num_cells set up adaptively. See class doc for more info. 2004-12-22 Andras Varga * csimplemodule.cc: "scheduleAt(): not owner of message" error message (and similar messages from send() and sendDirect()) changed to something hopefully more intuitive for users. One of the following messages will be displayed: - "scheduleAt(): message (class)msgname is currently scheduled, use cancelEvent() before rescheduling"; - "scheduleAt(): cannot schedule message (class)msgname: it is currently scheduled as self-message for ANOTHER module"; - "scheduleAt(): cannot schedule message (class)msgname: it is "currently in scheduled-events, being underway between two modules"; - "scheduleAt(): cannot schedule message (class)msgname: it is currently contained/owned by (...)...". 2004-12-19 Andras Varga * cstruct.cc: added baseclassname, baseclassdesc 2004-12-16 Andras Varga * cgate.cc, cmodule.cc: removed ev.getDisplayString() and support for display strings in omnetpp.ini (section [DisplayStrings]) * optimizations 2004-12-10 Andras Varga * csimulation.cc: implemented getUniqueNumber() 2004-12-08 Andras Varga * cpar.cc: read(): invoke new ev.getParameterUseDefault() function 2004-11-27 Andras Varga * nearly all .cc files: forEach() methods ported to cVisitor, see include/ChangeLog 2004-11-23 Andras Varga * cchannel.cc: parameter "disabled" of cSimpleChannel made to work * cgate.cc: info() string improved * cmodule.cc: displayStringAsParent() renamed to backgroundDisplay- String() * cchannel.cc: cSimpleChannel renamed to cBasicChannel 2004-11-23 ------ omnetpp-3.0b1 released ------ 2004-11-08 Andras Varga * cmodule.cc: fix: checkInternalConnections() reported error on zero- size gate vectors too 2004-11-03 ------ omnetpp-3.0a9 released ------ 2004-10-27 Andras Varga * checked in MersenneTwister.h v1.0 (15 May 2003) from Richard J.Wagner rjwagner@writeme.com; code is under the BSD license. http://www-personal.engin.umich.edu/~wagnerr/MersenneTwister.html * added cRNG implementations clcg32.cc/h (wraps old OMNeT++ RNG), cmersennetwister.cc/h (wraps Mersenne Twister, MersenneTwister.h) * ctype.cc: added call to ev.getRNGMappingFor(mod) in cModuleType's create() method. 2004-10-25 Andras Varga * all files: info() and fullPath() signature change (see include/ChangeLog) 2004-10-10 Andras Varga * csimul.cc: fix: added preliminary setting of simtime to end of doOneEvent() -- this fixes bug in Tkenv "run until sim.time" function, and sim.time display when single-stepping (it used to display time of last event, should be time of next event) 2004-10-04 ------ omnetpp-3.0a8 released ------ 2004-09-24 ------ omnetpp-3.0a7 released ------ 2004-09-15 Andras Varga * ctopo.cc: implemented 2 new extractByModuleType() functions, see include/ChangeLog. * cmodule.cc: support for zero-sized module gates. A gate vector is zero size right after creation, and if there's no gatesize declared in NED (and there's no manual setGateSize() call) it'll remain zero size. A zero-sized gate vector is represented by a single gate object whose size() method returns zero, and cannot be connected. 2004-08-11 Andras Varga * cchannel.cc: added check for negative delays 2004-07-22 ------ omnetpp-3.0a6 released ------ 2004-07-15 Andras Varga * csimul.cc: deleteNetwork(): moved flushing event queue after deleting modules (because module destructors may contain delete cancelEvent(msg) calls) 2004-07-10 Andras Varga * csimul.cc,cmodule.cc,util.cc: added cSimulation::contextType() stuff 2004-07-05 Andras Varga * csimplemodule.cc: recordScalar() functions for text and cStatistic data removed. A cStatistic object can be recorded into the scalar file by calling its recordScalar() method (below). * cstat.cc: added recordScalar() method. 2004-06-24 Andras Varga * cpar.cc: implemented support for type M (XML element) in cPar. 2004-06-22 Andras Varga * added cxmlelement.cc 2004-06-07 ------ omnetpp-3.0a5 released ------ 2004-05-15 ------ omnetpp-3.0a4 released ------ 2004-04-16 Andras Varga * cpar.cc, cenum.cc: fixed two possible bugs after Johnny's valgrinding 2004-04-13 Andras Varga * cmessage.cc: implemented new cMessage methods setControlInfo(), removeControlInfo(), controlInfo(). 2004-04-04 Andras Varga * simplemodule.cc: cancelEvent(): don't throw error if message is not currently scheduled, just return. 2004-03-22 ------ omnetpp-3.0a3 released ------ 2004-03-03 ------ omnetpp-3.0a2 released ------ 2004-02-23 Andras Varga * cmodule.cc: added changeParentTo() to cModule. 2004-02-22 Andras Varga * cmodule.cc: added gateSize() to cModule. 2004-02-21 Andras Varga * cmodule.cc: setGateSize() made more tolerant; this is needed for "gate++" NED feature (see nedxml/ChangeLog) * cpar.cc: turned type character into English type names in cPar error messages, e.g. "Cannot cast from type `D' to `S'" became "Cannot cast from type double (D) to string (S)'". 2004-02-20 Andras Varga * ctype.cc, cchannel.cc, cgate.cc: introduced cChannelType which replaces cLinkType. See include/ChangeLog for more info. 2004-02-12 Andras Varga * cmodule.cc, cgate.cc, cchannel.cc: gave a bool return value to deliver(), "false" meaning that message object should be deleted. 2004-02-11 Andras Varga * csimul.cc, cscheduler.cc: semantic change of getNextEvent()'s and selectNextModule()'s return value (see include/ChangeLog) 2004-02-10 Andras Varga * cexception.cc: added storage of module class name (NED type name) 2004-02-09 Andras Varga * ctypes.cc: added methods to cModuleInterface so that it's possible to dynamically assemble it (needed by networkbuilder) 2004-02-07 Andras Varga * ctypes.cc: added createOneIfClassIsKnown(const char *classname) * cstruct.cc: fix createDescriptorFor() to prepare for missing descriptor object 2004-02-06 Andras Varga * cgate.cc: implemented cGate::disconnect(); revised cGate::connectTo() * cchannel.cc: added setDelay(double), setError(double), setDatarate(double) to cSimpleChannel 2004-02-04 ------ omnetpp-3.0pre1 released ------ 2004-01-09 Andras Varga * cmodule.cc: implemented bubble() 2004-01-05 Andras Varga * HEAVY CHANGES throughout the code, see include/ChangeLog entry with same date. * cDisplayStringParser: - cDisplayStringParser renamed to cDisplayString - backslash parsing improved (now recognizes backslash sequences \t, \n, \r, \f, \b, \x0A with same meaning as in C/C++) - notify() and assemble() only if needed (there is some change) 2003-11-30 Andras Varga * all files: info() no longer contains object name and class 2003-11-22 Andras Varga * carray.cc: fixed bug in cBag which caused crash under certain rare circumstances [reported by Nicolas Betbeder-Matibet] 2003-11-13 Andras Varga * distrib.cc: added typecast for MSVC 7.0 compiler [reported by Bob Scheffler] 2003-11-13 Andras Varga * Checked in parallel simulation code that was developed March-May 2003, during my stay at Monash University. Changes: 2003-04-20 Andras Varga * cmodule.cc: setGateSize(): added check for negative vector size 2003-03-30 Andras Varga * Makefile.vc uses implicit rules 2003-03-25 Andras Varga * cmodule.cc: method isSimple() moved to base class cModule where it uses dynamic_cast. * ctypes.cc: cModuleType::create() methods reorganized (see include/ChangeLog) 2003-03-23 Andras Varga * split cmodule.cc: cSimpleModule put into new file csimplemodule.cc * cobject.cc: type of namestr member changed from char* to opp_string * added cscheduler.cc, changed csimul.cc: cSimulation::nextModule() now relies on a scheduler object, subclassed from cScheduler. 2003-03-20 Andras Varga * nearly all files: implementations of netPack()/netUnpack() moved here from MPI/PVM directories. These functions now use the cCommBuffer interface, so they're no longer specific to the communications library (ie.MPI.PVM,..) 2003-11-09 Andras Varga * csimul.cc: added optional support for dynamic loading of NED files. If WITH_NETBUILDER was defined (e.g. via -D compiler option) when compiling the sim. kernel, one can use the cSimulation::loadNedFile() function to pull in compound modules, channels and network definitions from NED files at runtime. If the sim. kernel was compiled without WITH_NETBUILDER, the cSimulation::loadNedFile() throws an exception when called. cSimulation::loadNedFile() works by invoking code in src/netbuilder, which in turn relies on the nedxml library. Thus, when WITH_NETBUILDER is used, simulation executables must be linked with the nedxml library (and thus also with an XML parser, if nedxml was compiled to support XML input). When compiling without WITH_NETBUILDER, nedxml and also the stuff in src/netbuilder can be left out from the link. 2003-11-01 Andras Varga * cdispstr.cc: cDisplayString::setTagArg() now adds the tag if it doesn't exist yet 2003-10-21 Andras Varga * csimul.h: fixed simulation.moduleByPath(): it didn't work when name of system module (the toplevel module) was included in the path [reported by Andreas Koepke] 2003-10-02 Andras Varga * util.h: added implementation of cContextSwitcher internal class, needed by the new Enter_Method() and Enter_Method_Silent() macros. * ccoroutine.cc: bugfix: DeleteFiber(lpFiber) crashes if lpFiber==0 on Win2003 Server (maybe elsewhere too). [reported by Donald Von] 2003-09-22 Andras Varga * cmodule.cc: sendDirect() rules slightly modified, see header file. 2003-06-16 ------ omnetpp-2.3 released ------ 2003-06-16 Andras Varga * cexception.cc: handle exceptions during initialization: if cException ctor is invoked before main() has started, we print the error message and call exit(1). 2003-06-14 Andras Varga * cmodule.cc: cModule's addGate(), addPar() return type changed from void to cGate*/cPar*. 2003-04-15 Andras Varga * cmodule.cc: fixed bug introduced in 2.3b1 in deleteModule() which caused deleting another module (i.e. mod->deleteModule()) to crash. 2003-03-15 ------ omnetpp-2.3b2 released ------ 2003-03-15 Andras Varga * cchannel.cc, cgate.cc: refined channel attributes handling, isBusy(), transmissionFinishes(). 2003-03-10 Andras Varga * ctype.cc: fixed bug (introduced in 2.3b1) in cLinkType constructor which eventually caused NED channels not to work. 2003-02-15 ------ omnetpp-2.3b1 released ------ 2003-02-15 Andras Varga * chist.cc: fix: clearResult() now doesn't reset num_cells. * To be done in the future: observation count and histogram cell values should be made unsigned long, and when obs. count would overflow, issue a warning and ignore further collect() calls. Also TBD: check for integer overflows in cKSplit and cPSquare. 2003-02-14 Andras Varga * cpar.cc: getAsText(): better handling of long string values 2003-02-11 Andras Varga * distrib.cc: bugfix in beta() * cexception.h: added missing includes string.h and stdarg.h 2003-02-10 Andras Varga * chist.cc: cEqdHistogramBase: collectTransformed() and pdf() made safer (floating-point rounding errors could cause addressing out of cellv[] array) 2003-01-30 Andras Varga * added handling of new MathFunc4Args where needed 2003-01-23 Andras Varga * NOTE about Fibers, the Win32 API used to implement activity() on Windows. The number of fibers (that is, the number of modules using activity() in a network) is limited by the available memory and the available address space according to the following. Each fiber has its own stack, by default 1MB (this is the "reserved" stack space -- i.e. reserved in the address space, but not the full 1MB is actually "committed", i.e. has physical memory assigned to it). This means that a 2GB address space will run out after 2048 fibers, which is way too few. (In practice, you won't even be able to create this many fibers, because physical memory is also a limiting factor). Therefore, the 1MB reserved stack size (RSS) must be set to a smaller value: the coroutine stack size requested for the module, plus extra-stack-for-envir, the sum of the two typically around 32K. Unfortunately, the CreateFiber() Win32 API doesn't allow the RSS to be specified. The more advanced CreateFiberEx() API which accepts RSS as parameter is only available from Windows XP!!!! The alternative is the stacksize parameter stored in the EXE header, which can be set via the STACKSIZE .def file parameter, via the /stack linker option, or on an existing execuable using the editbin /stack utility. This parameter specifies a common RSS for the main program stack, fiber and thread stacks. 64K should be enough. This is the way simulation executable should be created: linked with the /stack:65536 option, or the /stack:65536 parameter applied using editbin later. For example, after applying the editbin /stacksize:65536 command to dyna.exe, I was able to successfully run the Dyna sample with 8000 Client modules on my Win2K PC with 256M RAM (that means about 12000 modules at runtime, including about 4000 dynamically created modules.) 2003-01-22 Andras Varga * ctypes.cc: increased type safety of Register_Function() and cFunctionType. 2003-01-20 Andras Varga * removed obsolete file cstk.cc 2003-01-19 Andras Varga * distrib.cc (new): contains implementations of distributions contributed by Werner Sandmann (TU Bonn): continuous distributions gamma_d(), beta(), erlang_k(), chi_square(), student_t(), cauchy(), triang(),lognormal(), weibull(), pareto_shifted(), and discrete distributions bernoulli(), binomial(), geometric(), negbinomial(), hypergeometric(), poisson() * random.cc (new), distrib.cc, util.cc: From util.cc, existing distributions (uniform, normal, exponential, etc) were moved to distrib.cc, and random number generator functions were moved to new file random.cc. 2003-01-14 Andras Varga * cwatch.cc: added support for 'bool' * cmessage.cc: foreach(): include encapsulated msg in traversal * cmodule.h: implemented cSimpleModule::waitAndEnqueue(); putAsideQueue (deprecated) prevented from being displayed in Tkenv. 2002-12-21 Andras Varga * cwatch.cc: for 'char *' and 'cObject *' types, cWatch::info() displays pointer value 2002-12-19 Andras Varga * always use instead of * module id notation in info() strings changed from '#nnn' to 'id=nnn' 2002-12-07 Andras Varga * cmessage.cc: info() now includes names of src/dest modules too; useful when displayed in Tkenv scheduled events or message window 2002-12-02 Andras Varga * cmessage.cc: par() methods to throw cException when object cannot be cast to cPar using dynamic_cast(). 2002-11-14 Andras Varga * cmodule.cc: cSimpleModule::end() and deleteModule() are now driven by exceptions. This also means that activity() and handleMessage() execution immediately ends after the end() or deleteModule() call. (This fixes the bug that in previous versions, handleMessage() run through even after these calls.) * csimul.cc: cSimulation::doOneStep() restructured 2002-10-27 Andras Varga * object.cc: className() implemented using typeid (C++ RTTI) * chead.cc, ctypes.cc: inspectorfactory stuff moved to Tkenv from here * CRASH on Cygwin (gcc 2.95.3-5): if we transfer out (ie. by calling transferToMain()) from a try{..} block inside a coroutine, the program will crash during exiting (ie sometime on leaving main()). This is kind of bad, because that's the way activity() can be handled inside the simulation kernel, in cSimpleModule::activate()... To produce the bug, link with Tkenv any simulation that uses activity() (I tried with Fifo1 and Token). Do one (or more) events in Tkenv, then exit. Tkenv will crash right after printing "End run of OMNeT++". Then try the same without doing an event, or with pure handleMessage() simulation (ie Fifo2): neither will crash. Strangely enough, there is also no immediate crash if you do "Rebuild network" in Tkenv several times, crash is always delayed until program exit. To test it's really caused by the try block, modify cSimpleModule:: activate(void *p), around cmodule.cc#575: try { smod->activity(); Insert simulation.transferToMain() just before the try block and try to reproduce the bug (one step in Tkenv, then exit). Simulation won't work, but no crash. Then move simulation.transferToMain() just inside the try block: simulation will (not) work same way as before, but crashes on exit. I only saw this on Cygwin: MSVC and gcc on Linux are OK. Web search told me that exception handling in Cygwin isn't thread-safe, hence the crash. According to some, recompiling *GCC* with --disable-shared and --enable-threads should cure this. I didn't test, converted to MinGW instead. 2002-10-20 Andras Varga * cgate.cc: added isConnectedOutside() and isConnectedInside() methods. 2002-10-19 Andras Varga * cmodule.cc, ctypes.cc, csimul.cc: refactoring around buildInside(), cNetworkType and Define_Network(), see include/ChangeLog. * cexception.cc, cmodule.cc, csimul.cc: introduced new cTermination- Exception, cEndModuleException classes 2002-10-09 Andras Varga * refactoring (see include/ChangeLog), cosmetics 2002-10-07 Andras Varga * cobject.cc, ctypes.cc, added onstartup.cc: refactoring: global registration lists now use EXECUTE_ON_STARTUP macro, see include/ChangeLog for more info. 2002-10-04 Andras Varga * error handling with exceptions has been refined. * csimul.cc: incEventCount() removed, incrementing event count was moved into doOneEvent() * csimul.h: several methods removed from cSimulation and moved into the Envir library: timeLimit(), simTimeLimit(), startClock(), stopClock(), resetClock(), checkTimes(). 2002-09-07 Andras Varga * added cchannel.cc, modified carray.cc, cgate.cc, cmessage.cc, cmodule.cc, csimul.cc, mpimod.cc, mpipack.cc, netpack.cc, pvmmod.cc, pvmpack.cc: introduced channel objects -- see include/ChangeLog for more details 2002-07-08 Andras Varga * coutvect.cc (cOutVector methods): register vector as early as possible. This is needed by the Akaroa output vector manager because Akaroa needs to know the total number of parameters before recording the first value. (This change has the side effect that empty vectors also get declared in the output vector file, which is redundant.) 2002-07-04 Andras Varga * cdispstr.h added: utility class cDisplayString 2002-07-03 Andras Varga * csimul.cc (doOneEvent()): bugfix: added missing ev.messageDelivered() call that could cause a "phantom" message being animated in Tkenv with handleMessage()-based simple modules 2002-06-27 Andras Varga * cexception.cc/h added; most opp_error() calls replaced with throw new cException(...). Exceptions are caught in cSimpleModule::activate() (for activity()-based modules) and in cSimulation::doOneEvent() (for handleMessage()-based modules), and converted to 'conventional' opp_error(). * TBD: rethink error handling wrt exceptions! 2002-06-24 Andras Varga * ccoroutine.h/cc: use Fiber API on Windows 2002-06-17 Andras Varga * cpar.cc: new feature: cPar can use compiled expressions subclassed from cDoubleExpression (new class). This is needed for code generated by the new, nedxml-based nedc. 2002-05-28 Frank Paehlke * cdensity.cc, chist.cc, cksplit.cc, cmodule.cc, cobject.cc, cpar.cc, cpsquare.cc, csimul.cc, cstat.cc, ctypes.cc, cvarhist.cc: do not include iostream.h et.al. directly (already included by header files) * cmessage.cc (decapsulate): added check for encapmsg==0 before accessing encapmsg->len 2002-05-16 Ulrich Kaage * mpi/mpimod.h (class cNetGate): fixed className() declaration (class cMpiMod): dito. * pvm/pvmmod.h (class cNetGate): fixed className() declaration (class cPvmMod): dito. 2002-05-04 ------ omnetpp-2.2 released ------ 2002-04-07 Ulrich Kaage * pvm/pvmpack.cc (upack_object): compile fix: cast from (void*) to (cObject*) in call to createOne() 2002-03-05 Andras Varga * cgate.cc (setDisplayString): connection display string changes now take effect immediately. Implementation: notify parent module's inspector. (This is should not be the final solution though; it would be better to add displayStringChanged() methods to cEnvir...) 2002-03-04 Andras Varga * cObject::free(cObject *) renamed to dealloc() throughout to avoid misunderstandings * coutvect.cc: vector registration made on-demand to allow initial setName() calls * cobject.cc, cmodule.cc, cgate.cc, cpar.cc, csimul.cc: fullPath2() renamed to fullPath(); see include/ChangeLog for details. fullName() methods in cGate and cModule also changed (no longer use static buffer). 2002-03-03 Andras Varga * several delete operators replaced with delete []. [suggestion by Johnny Lai] 2002-03-03 Andras Varga * ctypes.cc: cClassRegister can now be used to create instances of non-cObject classes too; as part of this change, createOne() return value changed from cObject* to void*. (See also include/ChangeLog) * csimul.cc, coutvect.cc: management of various output files (output vector file, output scalar file, snapshot file) was moved from cSimulation to the user interface library (behind the ev facade). Implementation of cOutVector changed completely. The cOutFileMgr class was removed altogether. (See also include/ChangeLog) * cpar.cc: valueChanges() renamed to beforeChange(); corresponding afterChange() method added. Removed parameter change logging code. (See also include/ChangeLog) 2002-02-24 Andras Varga * cmodule.cc: bugfix: pause() was allowed for handleMessage() modules too. 2002-02-22 Ulrich Kaage * cllist.cc (operator=): Same bugs as with cQueue (see items 2002-02-21 and 2001-10-25). Same bugfixes applied [reported by #JIA KE# ] 2002-02-21 Ulrich Kaage * cqueue.cc (operator=): Bugfix: iteration order changed from head->tail to tail->head. Since unsorted insertion is performed at the destination queue's head, this preserves element order. Fix provided by Jos� Afonso 2002-02-11 Ulrich Kaage * cmodule.cc (moduleByRelativePath): use explicit constructor instead of copy constructor for pathbuf (gcc-3 patch) * csimul.cc (moduleByPath): ditto 2002-01-24 Ulrich Kaage * cenum.cc (insert): Bugfix: iterating to the next larger allocation table size failed. New table size was always 0 (insert): check that enum strings have different keys. Otherwise abort (insert): use opp_error instead of fprintf for error messages 2002-01-23 Andras Varga * cmodule.cc: bugfix: send..() and scheduleAt() crashed if message owner was set to NULL. * carray.cc: get() methods of cArray and cBag no longer give a warning if the slot is empty, but simply return NULL pointer. Warnings remained only in the remove() methods. 2001-11-06 Andras Varga * csimul.cc: bugfix: startRun() unnecessarily disabled warnings 2001-10-28 Andras Varga * util.cc: opp_strprettytrunc() added; indexedname() renamed to opp_mkindexedname() (old name still exists as macro) * cobject.cc, cmodule.cc, csimul.cc, cgate.cc, cpar.cc: added fullPath2(buffer,buflen) which produces the result in an external buffer; cObject::fullPath() now relies on fullPath2(). 2001-10-25 Ulrich Kaage * cqueue.cc (operator=): Bugfix for stop condition in iteration loop 2001-09-14 Andras Varga * utils.cc: added opp_nextrand(long& seed) * cmodule.cc: display string methods reorganized 2001-09-06 Andras Varga * cleanup around object copying (see include/ChangeLog for details) 2001-09-01 Andras Varga * _CONST patches made permanent: _CONST --> const, CONSTCAST() --> const_cast<>() replacements * Makefile.bc: cenum.cc, cstruct.cc added 2001-08-30 Andras Varga * MPI targets added to Makefile.vc too 2001-08-11 Andras Varga * added _CONSTs to all copy constructors, operator=()'s and dup()'s 2001-08-06 Ulrich Kaage * cnetmod.cc (isLocalMachineIn): Compile-Fix: changed const to _CONST in argument list. 2001-08-05 Andras Varga * added a few dozen new _CONSTs; affects nearly all files 2001-07-29 Andras Varga * added a bunch of _CONSTs (see changelog entry in include/) 2001-07-11 Andras Varga * mpi/* added, Makefile.in: Eric Wu's Tru64/MPI port 2001-07-02 Andras Varga * cenum.cc,cstruct.cc: fixed, added to makefile.in and makefile.vc. Dependencies to be updated in both makefiles! Code still untested. 2001-06-28 Andras Varga * cstruct.cc added: classes to support self-describing data structures, to be used for implementing message subclassing. UNTESTED. To be added to the makefile. * cenum.cc added: classes to support string mapping of enums. UNTESTED. To be added to the makefile. 2001-06-20 Ulrich Kaage * Makefile.in (depend): added -I../../include * carray.cc (): const patches added functions: const void *cBag::get(int m) const const cObject *cArray::get(int m) const const cObject *cArray::get(const char *objname) const * cgate.cc (): const patches * cmessage.cc (): const patches * cmodule.cc (): const patches added functions: cGate *cModule::gate(const char *s, int sn) const * cobject.cc (): const patches * cpar.cc (): const patches 2001-03-10 Andras Varga * ------ omnetpp-2.1 released ------ * Borland C++ support removed: I deleted the project files (*.ide). I added equivalent Makefile.bc files (generated from the BC IDE), but they are completely unsupported at the moment. If there's interest, it's possible that later I'll add makefiles for the free command-line bc5.5 compiler. 2001-02-27 Andras Varga * fixed bug which prevented compiling with PVM * ------ omnetpp-2.0p1 released ------ 2001-02-06 Andras Varga * fix: Makefile.vc: 'clean' target didn't delete object files in std/ and pvm/ * ------ omnetpp-2.0 released ------ 2001-02-05 Andras Varga * ev<< and ev>> now supports cPar objects too [from Nicky van Foreest] * old BC3.1 support removed from cenvir.h 2001-01-24 Andras Varga * bugfix: cArray and cBag didn't work properly after clear() * bugfix: makefile and makefile.vc didn't handle PVM properly [reported by Ahmet Sekercioglu] 2001-01-16 Andras Varga * added OMNETPP_VERSION to defs.h (0x0200 for OMNeT++ 2.0) 2001-01-15 Andras Varga * bugfix: cQueue::insertBefore() and cQueue::insertAfter() didn't take the ownership of the inserted object [reported by Ulrich Kaage] 2001-01-03 Andras Varga * number of cQueue methods made virtual to enable customizing cQueue (e.g. adding statistics for maintaining average queue length, etc.) [suggested by Holger Karl] * added static counters to the cMessage class (total_msgs, live_msgs); these variables are incremented/decremented by the cMessage constructor and destructor, and displayed in Tkenv. They can be very handy at checking for memory leaks. * changed the place where cSimpleModule's timeoutmsg is created: from the constructor to scheduleStart() which is also mandatorily called for activity() modules. Reason: "Total msgs" count in Tkenv incorrectly displayed zero at the beginning of the simulation, while the activation/timeout msg objects already existed) 2000-06-04 Andras Varga * ------ omnetpp-2.0b5 released ------ * fix: cPar::setfunction() improved and made const-correct (for gcc 2.95.2) * warnings eliminated from cllist.cc & coutvect.cc 2000-05-21 Andras Varga * ------ omnetpp-2.0b4 released ------ * added message sending functions which take cGate* pointers [suggested by Mark Rahner]: int send(cMessage *msg, cGate *outputgate); int sendDelayed(cMessage *msg, double delay, cGate *outputgate); int sendDirect(cMessage *msg, double delay, cGate *inputgate); (Mark's original suggestion was to create a single generalized send(cMessage *msg, double delay, cGate *gate) function which would combine the functionality of all other send()/sendDelayed()/sendDirect() variants, and mark other functions as 'deprecated'. The gate passed to send() could be that of another module [~sendDirect()] and either an input or an output gate; the delay argument would be interpreted as propagation delay until the msg reaches that gate. I didn't implement it for now because I felt such a very general function would cause confusion for simulation programmers, but I'd like to hear more opinions about this...) * multi-stage initialization support added. Modules have two new functions which can be redefined by the user: void initialize(int stage); int numInitStages(); At the beginning of the simulation, initialize(0) is called for all modules, then initialize(1), initialize(2), etc. For each module, numInitStages() must be redefined to return the number of init stages required, e.g. for a two-stage init, numInitStages() should return 2, and initialize(int stage) must be implemented to handle the stage=0 and stage=1 cases. callInitialize() now performs the full multi-stage initialization for that module and all its submodules. Multi-stage initialization defaults to the good old single-stage initialize() function (without args): the default numInitStages() returns 1, and the default initialize(int stage) simply calls initialize(). 2000-05-19 Andras Varga * fixed a bug in cSimulation::snapshot() which caused segfault if snapshot() was called with no 'label' parameter [reported by Gy. Pongor] * fixed a bug which caused double printing of the distribution data in histogram classes when snapshot() was called 2000-05-07 Andras Varga * Makefile.vc improvements [from Balazs Kelemen] 2000-05-06 Andras Varga * further char * --> const char * changes * displayString() added to cMessage. By default it returns an empty string; users have to subclass cMessage and redefine displayString() to get messages with custom appearance in Tkenv. (Not implemented yet in Tkenv!) 2000-05-05 Andras Varga * setDisplayString() now works in Tkenv (sim/cmodule.cc also affected) * setDisplayString() got a new argument, bool immediate. It specifies whether the display string change should take effect immediately, or only after processing the current event (default is immediate=true). If several display string changes are going to be done within one event, then immediate=false is useful because it reduces the number of necessary redraws. Immediate=false also uses less stack. But its drawback is that a setDisplayString() followed by a send() would actually be displayed in reverse order (message animation first), because message animations are performed immediately (actually within the send() call). * once we have setDisplayString(), seems like we'll need a display string parser/assembler object to be able to easily change specific values within the display string without bothering the rest of it. Maybe for the some next version; but if you want to contribute one, go ahead :-) 2000-04-19 Andras Varga * bugfix: when using datarate and propagation delay at the same output gate, the gate's transmissionFinishes() function returned incorrect value: one had to substract the propagation delay to get the correct number. Fixed in cGate::deliver(cMessage *msg): transmission delay calculation should be done _before_ propagation delay. * in util.h, fastconcat() renamed to opp_concat(); compatibility #define added 2000-04-10 Andras Varga * TRUE/FALSE (defines) replaced by true/false (C++ keywords) * operator=(cXXX& other) functions now include this line: if (this==&other) return *this; * indentation canonized (4 spaces) in most files (where I had the patience) * remove(cObject *) added to cArray * cArray error handling improved * Improved on functions for traversing module hierarchy. [suggestion by Niko] These functions were removed from cSimulation: int find(const char *modulename,int index=-1, int parentmod_id=-1); cModule *module(const char *modulename,int index=-1,int parentmod_id=-1); bool isUnique(const char *s); // not needed int find(cModule *mod); // was equivalent to mod->id() The first two have been replaced by functions in cModule: int findSubmodule(const char *submodname, int idx=-1); // moduleID (or -1) cModule *submodule(const char *submodname, int idx=-1); New function in cModule: cModule *moduleByRelativePath(const char *path); moduleByRelativePath() is similar to cSimulation::moduleByPath(), except that it starts the search at that module (e.g. mymod->moduleByRelativePath( "sub.subsub") returns the "subsub" submodule of the "sub" submodule of mymod). * in printf() statements, all "%lf","%lg","%le" were replaced by "%f","%g","%e" * in cmodule.h, the old NEW and DELETE macros (for raw memory allocation) were renamed to opp_new and opp_free. (Beware when using opp_free: it does NOT call the destructor of the passed object!) 2000-04-06 Andras Varga * Changes to enable linking a Windows DLL from the library. Note that the sim dll and envir.dll mutually depend on each other, so first we must build an import library from one to be able to link dlls from them. Thus, first we create envir.ilib [ilib=import library], then we can link sim_std.dll, and using sim_std.ilib we can link envir.dll... On Unix we don't have this problem: .so files are not linked against other libs (they are treated more like a collection of object files), and the dynamic loader acts practically as a linker and collects the symbols at runtime from the different .so files. * Remaining problem on Win32: user interface DLL cannot be loaded dynamically (e.g. with [General]/load-libs= ini file setting); the LoadLibrary() call returns error code. The problem is [probably] with the static objects in the DLL whose constructors are called [probably] during LoadLibrary() from DllMain(); these constructors want to write a global variable located outside the DLL. This was no problem on Unix but seems like Windows doesn't like it. To be verified that the error is really caused by this and not something else!!! 2000-03-28 Andras Varga * SIM_API macro added to public classes and functions to export them on Windows 2000-03-26 Andras Varga * 'char *' pointers made const-correct (lots of 'char *' --> 'const char *' replacements throughout the code) -- this will affect the UI libraries too * header files indentation uniformized; other little cleanups, e.g. some method parameter names made mode descriptive 2000-03-12 Andras Varga * pvm files really fixed. Debugging done by Gabor Lencse. * sum() and sqrSum() members added to statistics classes (cStdDev& subclasses) * cPar fix: boolValue(), longValue() and doubleValue() made rather liberal: now they all allow conversion from all of B,L and the double types D,T,X,F. This is necessary because of the way parameter assignments in NED are handled. For example, bool and long expressions (e.g. "i==0 || i==n") are compiled into cPar X expressions which will _need_ to be converted to bool/long after evaluation. * isNumeric() added to cPar 2000-02-03 Andras Varga * some pvm-related bugs fixed. 2000-01-25 Andras Varga * ------ omnetpp-2.0b3 released ------ * cArray functions changed to take and return cArray* instead of cArray&. This affects add(), addAt(), remove(), get() and op[]. 2000-01-17 Andras Varga * The +,-,*,/,... operators which take cPar plus a numeric type (long/double) were removed from cpar.h. This affects some existing code: expressions like msg->par("count")+1 which used to compile now cause error ("too many possible conversions") and must be disabiguated by adding explicit casts like this: (int)msg->par("count")+1. Assigments (like: cPar p = 1; int i=p;) still work fine and don't need to be changed. The reason is that the ANSI C++ overload resolution rules have changed a few years ago, and now that compilers begin to be more compliant, it is difficult (~impossible) to write operator*/+-() functions with which code will compile well under both the old and the new resolution rules (which are likely to coexist for a few years to come). Ambiguity comes because cPar supports many conversions (double, int, long, unsigned int, unsigned long, char * [char* + int is also legal!], void *, etc.) I feel that it is better(results in cleaner code) to use explicit type casts in expressions with cPar. This issue came up while porting to MSVC 6.0, see MSVC error C2666. 2000-01-15 Andras Varga * the 'explicit' keyword was added to a number of constructors, most notably cPar(char *name). The reason was that constructs like cPar p = "foo"; did NOT compile as one would expect (i.e. to a cPar() construction followed by an assignment), but to a cPar p("foo") constructor call, which is quite different! ("foo" becomes the object's NAME instead of its value.) The explicit keyword is supported to prevent this from happening. * minor change: cSimulation::setErrorCode() added (was needed in Tkenv's startup code) 2000-01-04 Andras Varga * cPar::setStringValue() now accepts NULL (and treats it as "") 1999-12-19 Andras Varga * cPar interface cleaned up: o overloaded setValue(..) functions were renamed to setStringValue(..), setLongValue(..), setBoolValue(..), etc., and the type character was deleted from their arg list. This was done to be consistent with the getter functions which already had the names stringValue(), longValue() etc., and to make client code more readable by eliminating "magic constants" (the type characters). This shouldn't affect much existing code, most users prefer assignment operator to these functions. o redirection handling functions were changed to: setRedirection(cPar*), isRedirected(), cPar* redirection(), cancelRedirection(). This results in more readable client code. These functions are hardly used in any user code. o the number of constructors was reduced to 3 by deleting the ones which set an initial long,string,etc. value. Prior to this cPar had 16 constructors which made subclassing very cumbersome. Functionality is not lost because the user can write code like cPar par("par") = 5L; Existing client code like msg->addPar( *new cPar("dest", 'L', dest ); can be rewritten like msg->addPar( *new cPar("dest") = dest ); or better like msg->addPar("dest") = dest; Note that the two new and better forms have been available for a long time, so the change should not affect much existing code. o conversons to/from bool were not fully supported * convenience function hasPar(char*) added to cMessage * convenience functions hasPar(char*) and hasGate(char*,int) added to cModule * cQueue and cLinkedList interfaces changed: insertHead(a) --> insert(a) (the name was misleading: cQueue can act as priority queue and inserted elements aren't necessarily put at the head) peekTail() --> tail() peekHead() --> head() (shorter names are preferred) get(a) --> remove(a) (the "get" word was misleading as it didn't imply that the element is actually removed from the queue) getTail() --> pop() ("get was misleading, see above; "pop" is used in other libs such as STL or Java for this operation) getHead() removed (it can be expressed as q.remove(q.head())) Compatibility #defines added to defs.h for insertHead(a), peekTail(), peekHead(), getTail(). 1999-12-18 Andras Varga * renamed isA() to className() in cObject and derived classes. A compatibility #define was temporarily added to defs.h to ease migration. * in cMessage, isbad() renamed to hasBitError(), isgood() removed, and setError() renamed to setBitError() * macro names in module interface declarations (Interface...End) changed to reduce chance of name clashes. This is internal to OMNeT++ and does not affect user code. 1999-12-05 Andras Varga * Makefile.vc added 1999-12-04 Andras Varga * compiled with MSVC. Minor changes: changed int to bool, struct to class in some places. sim_std.dsp added. NOTE: one has to rename all .cc files to .cpp for compiling (ren *.cc *.cpp)! 1999-11-09 Andras Varga * iso c++ compatibility hack: in expressions like return s?s:"" the "" needs a cast to char* (to cast away constness). Added a CONST_CAST() macro until the source is made fully const-correct, hopefully in the near future. 1999-10-06 Andras Varga * ------ omnetpp-2.0b2 released ------ * isSelfMessage() member function added to cMessage. It tells if the message was sent (using a send..() function) or posted by a scheduleAt() call. * a new void* pointer was added to cMessage. The pointer is set/returned by the setContextPointer(void *p) and contextPointer() functions, and it can be used for any purpose by the simulation programmer. It is not used by the simulation kernel, and it is treated as a mere pointer (no memory mgmt is done on it). Intended purpose: a module which schedules several self-messages (timers) will need to identify a self-message when it arrives back to the module, ie. the module will have to determine which timer went off and what to do then. The context pointer can be made to point at a data structure kept by the module which can carry enough "context" information about the event. * Remaining -Wall warnings: "%lf", "%lg", "%le" in printf format strings. 1999-09-23 Andras Varga * callInitialize() and scheduleStart() swapped in cSimulation's startRun() to support send()/scheduleAt() in initialize() to modules with activity(). * same change made to createInitStart(), and it was renamed to createScheduleInit() to reflect the new order of what it does. 1999-09-20 Andras Varga * bug fixed in cWeightedStdDev::collect2(): cStdDev::collect() was called with val instead of weight*val. * bug fixed with misplaced ev.messageDelivered() calls in the receiveNewOn() function * cOutVector::record() corrected: it should update the inspector even if it doesn't write to file 1999-09-07 Andras Varga * ------ omnetpp-2.0b released ------ * initialize() and finish() moved to cModule, so you can define them also for compound modules * callInitialize() and callFinish() are also in cModule; they are defined in compound modules to recursively call themselves for submodules. callInitialize() for the compound module is called _before_, callFinish() is called _after_ the call on submodules. 1999-09-06 Andras Varga * a couple of unsigned<-->signed changes (mostly in the statistics classes) to reduce the number of "gcc -Wall" warnings 1999-09-05 Andras Varga * cSimpleModule's initialize(), activity(), handleMessage(), finish() made protected members so that they cannot be called directly by user code. * callInitialize() was added to cSimpleModule to enable calling initialize() from user code; callInitialize() was also added for cModule and cCompoundModule so that it can be used polimorphically. * added cModuleType::createInitStart(char *namestr, cModule *parentmod) convenience function to get a module up and running in one step. Does create()+buildInside()+callInitialize()+scheduleStart(now). Should work for both simple and compound modules. Not applicable if the module: - has parameters to be set - gate vector sizes to be set - gates to be connected before initialize() Now a simple module can be created on the fly by simply saying: mod = modtype->createAndInit("name",this); mod->scheduleStart( simTime() ); 1999-09-01 Andras Varga * behavior of scheduleStart() changed: now it can be called (and does nothing) for modules using handleMessage(). The benefit is that this way code that creates simple modules dynamically doesn't have to know whether the module is using activity() or handleMessage(); the same code (which contains a call to scheduleStart()) can be used for both. * activate() [the boot procedure for simple module activity()] now checks if the message that starts the module is really a starter message (and not some other msg). This way, bugs caused by leaving out scheduleStart() for dynamically created modules can be detected. * wait() now makes sure it is called for a module using activity() and not handleMessage(). * cModuleType now caches the cModuleInterface pointer. (Before it looked up the interface each time, based on the interface name.) 1999-08-30 Andras Varga * bool isScheduled() member added to cMessage: can be used to examine whether the message is in the Future Event Set * cancelEvent() behaviour changed: now it causes an error if the message is not in the Future Event Set. One should write code like this: if (msg->isScheduled()) delete cancelEvent(msg); else // ??? Or rather: if (msg->isScheduled()) delete cancelEvent(msg); else if (putAsideQueue.contains(msg)) delete putAsideQueue.get(msg); else // ??? * cQueue::isEnqueued(cObject *) renamed to cQueue::contains(cObject *) * cLinkedList::isInList(void *) renamed to cLinkedList::contains(void *) 1999-08-02 Andras Varga * fixed the bug with randseed() [it was an error to call it without an argument] and split randseed(long seed=0) into 2 functions: randseed() and randseed(long seed). * fixed the bug in intrand(r) and genk_intrand(r) that caused division by zero if called with r==0; now r<=0 values cause runtime error * INTRAND_MAX corrected to 2**31-2 1999-07-10 Andras Varga * fixed bug in cQueue and cLinkedList (didn't always increment item count on insertion) * fixed bug in cPar::info(): didn't handle boolean (B) type 1999-05-21 Andras Varga * all sources checked in under CVS * makefile.in modified for use with GNU Autoconf; also renamed to Makefile.in * version.log renamed to ChangeLog * removed support for DOS with BC3.1 1999-02-07 Andras Varga * stable version 1999-01-26 Andras Varga * some cleanup 1999-01-26 Andras Varga * calls to simulation.error() replaced by opp_error() to avoid having to #include csimul.cc (and half the sim. kernel with it) in each file; similar for opp_warning() and opp_terminate(). opp_terminate() is similar to opp_error(), only it does not include the word "error" in the message. * requires updated Envir and user interface libraries 1999-01-26 Andras Varga * recordScalar() for recording strings added 1999-01-25 Andras Varga * inspector factories added 1999-01-03 Andras Varga * stable version 1999-01-01 Andras Varga (1-3) * refinements on the coroutine library; stackSize() added to cCoroutine * refinements on cPacket * restart() of c[Simple]Module removed (was not used) * optimizations around timeoutmsg and receive() * module state codes reduced to sREADY and sENDED * protocol.h added * misc bugfixes 1998-12-30 Andras Varga * makefile renamed to makefile.in 1998-12-27 Andras Varga * fixes on 170a * missing bc3make.bat added back (although omnetpp is probably _way_ too big for BC 3.1 and DOS real mode to handle...) 1998-12-27 Andras Varga Fixes: * ltoa() eliminated * vsscanf() replaced by opp_vsscanf() * defs.h and funcs.cc split to defs.h, util.h+cc, errmsg.h+cc * serious bug with stddev() corrected * writes to output vector file and parameter change file are now checked * string class renamed to opp_string to prevent name clashes with other class libs (e.g. STL) * cSimulation::doOneEvent() function introduced * runningmod_deleter's stack increased from 8K to 16K * now cancelEvent won't hang if the message was not actually scheduled Improvements: * coroutine library now detects stack overflows and able to tell actually used stack size (stackUsage()) * new alternative message handling mechanism: handleMessage() * new file fsm.h: finite state machine for handleMessage() * reserved negative message kind values * cPacket class added * MK_INFO and MK_PACKET message kind values defined for cPackets * wait() and receive() with timeout made faster (now reuses timeout message) 1998-08-22 Andras Varga * cOutvector::collect() improved 1998-08-21 Andras Varga * cStat::collect(double,double) renamed to collect2() (conflicted with collect(double)) 1998-08-19 Andras Varga * some error messages improved 1998-08-17 Andras Varga * too many 'simulation cancelled' error msg fixed 1998-08-14 Andras Varga * linker bug with cWatch fixed 1998-08-12 Andras Varga * project file for Borland C++ 5.0 added (sim_std.ide) * some code beautifying * cenvir.h moved here from the envir package 1998-07-24 Andras Varga * ASSERT() bug fixed * display strings can be taken from ini file -- compatible with envir120 up 1998-07-21 Andras Varga * cOutVector support for 'probes' * bug fixed in pvm/pvmmod.cc 1998-07-15 Andras Varga * eFINISH error code added; other small fixes * WATCH() made dynamic (new cWatch(...)) instead of auto to increase applicability. Old-style watch is retained as LWATCH(). 1998-07-10 Andras Varga * cGate::info() corrected * cPar::info() corrected (now doesn't silently truncate string value) * cMessage::findPar() added * check for gate connectedness added to cModule::setGateSize() * modules and gates: vectors of size 1 and scalars made distinct 1998-07-02 Andras Varga * improved error messages of send() variants; other small fixes 1998-06-26 Andras Varga * small fixes, adjustments 1998-06-23 Andras Varga * added bool cSimulation::normalTermination() which examines error code 1998-06-23 Andras Varga * new: cSimpleModule::error(): generates `user error' * cSimulation::callFinish() added * cSimulation's cModule& get() deleted, cModule *module(..) can be used instead * cSimulation's findModuleByPath()-->moduleByPath() * small fixes 1998-06-19 Andras Varga * cMessage::creationTime() added * mystr...() functions renamed to opp_str...() (for compatibility, mystr... names are #defined to opp_str...) * ASSERT() added (similar to the assert() macro, also disappears with NDEBUG) * scalar file behavior corrected (only writes file if there's something to write) * cPar: new type void* added ('P'), old 'P' type (cObject *) was renamed to 'O'. Funcs: cObject *objectValue(), void *pointerValue() Memory management of void*: configPointer(...) func, similar to cLinkedList's method. 1998-06-19 Andras Varga * Now deleteModule() can also delete the currently executing module. The only remaining restriction is that a compound module cannot be deleted from one of its submodules. 1998-06-17 Andras Varga * bugfixes on 161k * cMessage::addPar(..) functions' return value changed to cPar& * setDisplayStringNotify() functions added to cGate and cModule 1998-06-11 Andras Varga * class cTopology added * now gate vectors are guaranteed to be contiguous in the gatev array; gate lookup made a lot faster. Note that there can be holes in the gate vector. * cMessage::addLen(long l) added 1998-06-09 Andras Varga * class cLinkedList added 1998-06-09 Andras Varga * cModule::recordScalar(name,value) and recordStats(name,statistic) added * cSimpleModule::finish() bug fixed * cPar::equalsTo(cPar *par) added 1998-06-09 Andras Varga * return type of cModule::gate(...) changed from cGate& to cGate* * return type of cModule::moduleType(...) changed from cModuleType& to cModuleType* * cSimulation::find(cModule&) changed to cSimulation::find(cModule*) * cMessage::addPar(char *parname) and cMessage::addPar(cPar *par) added * class cWeightedStdDev added 1998-06-04 Andras Varga * bugfixes on histogram classes * cKSplit::rangeExtension() member function added * cMessage::encapsulate(msg), decapsulate(), encapsulatedMsg() member functions added 1998-06-01 Andras Varga * cDensityEstBase added; it greatly simplifies all density estimation classes! * all density estimation classes rewritten with cDensityEstBase * cVarHistogram added * underflow/overflow cells removed (but underflow/overflow counts still maintained) * cKSplit cleaned up a little * saveToFile()/loadFromFile() file formats cleaned up and loading made safer. Occasional runtime errors may occur due to fprintf'ing uninitialised double vars. 1998-05-11 Andras Varga * small improvement on the ksplit files 1998-04-26 Andras Varga * makefile can now create shared objects (libsim_std.so, libsim_pvm.so) 1998-04-24 Andras Varga * 2 bugs fixed 1998-04-14 Andras Varga * cModule: setDisplayString(type,str) and displayString(type) added. type: dispSUBMOD or dispENCLOSINGMOD cGate: setDisplayString(str) and displayString() correspond to the display string of the connection starting from that gate. The values of these strings will come from GNED through NED's "display:" phrases, and they will hold information about how the module should be displayed in Tkenv or other GUI animation/interactive simulation tool. The exact format of the strings are documented in GNED's version.log. * cModule: gatev, paramv made public (because of the inspectors...) 1998-02-15 Andras Varga * cSimpleModule::finish() function added -- user can redefine it and it will be called at the end of the simulation run * makefile made compatible with new configure script * 'lib' prepended to library names under Unix - now they can le linked with *lsim_std or -lsim_pvm option * pvm3.h deleted from package 1998-02-08 Andras Varga * some Define_Functions()'s added to support jar102-compiled expressions * char type, &|! sXElem operators removed from cPar, # sXElem op. renamed to !. 1997-12-29 Andras Varga * 'cHead members' moved from cSimpleModule to cModule * cModuleType::create() modified so that it automatically puts member objects of module classes to the members list, so there's no need to do setOwner(&members) calls from the constructor. (However, they do no harm if they are there.) * module IDs made unique during whole simulation: old IDs are no longer reused. 1997-12-29 Andras Varga * strToSimtime0() function added * cPar::setFromText() rewritten: better & more consistent error handling, more informative error messages supports writing time units in ini files: Net.Gen.stop_at = 1h 30m Net.Gen.ia_time = uniform(10s,15s) * comments added to ctypes.cc 1997-12-13 Andras Varga * renamings for clarity: cModule: subscript() --> id() setSubscript() --> setId() cGate: ownerGate --> id() setlink --> setLink() cMessage: sentFromModule() --> senderModuleId() sentFromGate() --> senderGateId() arrivedInModule() --> arrivalModuleId() arrivedOnGate() --> arrivalGateId() new functions: cGate *senderGate(), cGate *arrivalGate() 1997-12-13 Andras Varga * cModuleType split into cModuleInterface and cModuleType; * Module..End declaration no longer needed for simple module. * joined Define_Simple_Module and Define_Compound_Module macros to Define_Module macro. * Compatible with jar98 and up 1997-11-23 Andras Varga * bugs in cKSplit's copy constructor and ksplitInsert() fixed * LG's "Bad msg kind" bug fixed in selectNextModule() * selectNextModule() rewritten * table of error messages modified * "not owner of message" error msg improved * error message for inconsistent module declarations made more informative * cosmetics on pvmmod.cc 1997-10-12 Andras Varga * cKSplit::isa() corrected to isA(); fixed point shift increased to 10000 * stat. classes: cell()'s return value changed from 'unsigned int' to 'double' * cKSplit::transform() added * corrected cells() in all classes to return 0 if not transformed yet 1994-10-06 Andras Varga * small fixes * To Do: cKSplit: netPack,netUnpack,saveToFile,loadFromFile; clean up the rest 1997-10-06 Andras Varga * cKSplit added * contains a new version of cPSquare * cleaned up & renamed several member functions and classes * arg.list to snapshot() changed * arg.list of constructor of histogram classes (cDoubleHistogram, cLongHistogram, cHistogramBase) changed. OLD USER CODE WILL STILL COMPILE BUT WONT'T WORK! 1997-10-02 Andras Varga * cleaned up & renamed several member functions and classes Changed class names: cObj --> cObject cMod --> cModule cSimpleMod --> cSimpleModule cCompoundMod --> cCompoundModule cMsg --> cMessage cMsgHeap --> cMessageHeap cPiSquare --> cPSquare cModPar --> cModulePar cSimpleStatistic --> cStdDev cIter --> cIterator cSubmodIter --> cSubModIterator cQueueIter --> cQueueIterator cMsgHeapIter --> cMessageHeapIterator cTDResult --> cTransientDetection cRAResult --> cAccuracyDetection cTDAlg1 --> cTDExpandingWindows cRAAlg1 --> cADByStddev 1997-08-17 Andras Varga * cMsg::info() changed; now it prints "(starter msg)" for msgs that start simple modules at the beg. of simulation 1997-08-17 Andras Varga * carray.cc/h split to: carray.cc/h, cqueue.cc/h, chead.cc/h, cwatch.cc/h * ev.extrastack() support * compatibility: envir101 or later 1997-08-17 Andras Varga * cQueue interface changed: bool isenqueued(cObj *obj) void inserthead(cObj *obj) void insertbefore(cObj *p, cObj *obj), void insertafter(cObj *p, cObj *obj); cObj *peektail(), cObj *peekhead() cObj *get(cObj *obj), cObj *gettail(), gethead() 1997-08-17 Andras Varga * insertordr added to cMsg and cMsgHeap. This way messages with the same times and priorities can be retreived from the message queue in their insertion order. * netif_check_freq added to cSimulation and nextmodule() * cObj::lastchildp removed 1997-08-15 Andras Varga * cMsgHeap class added and installed as FES (new files cmsgheap.h/cc, changes in cmod.cc, csimul.h/cc) * a bug introduced in #143 into cArray::foreach() fixed 1997-08-13 Andras Varga * two bugs fixed in cHistogramBase::operator=() * cancelsyncpoint() function added 1997-08-09 Andras Varga * bug removed from process_netmsg_blocking() 1997-08-08 Andras Varga * remaining active waits removed * added process_netmsgs() calls to cSimulation::setupnetwork() * small improvements on PVM stuff * renamed functions: signal_startofrun() --> send_runnumber() wait_startofrun() --> receive_runnumber() * compatible with: envir100 1997-08-07 Andras Varga * DEBUG_PVM #define added to pvmmod.cc * active wait removed from block_on_syncpoint * several small improvements on PVM stuff 1997-08-07 Andras Varga * cleaned-up version of #144; must be tested still 1997-08-06 Andras Varga * In defs.h, MAXTIME changed from 1eXXX to HUGE_VAL Changed cNetSimpleMod's base class from cSimpleMod to cMod Renamed: cNetSimpleMod --> cNetMod, cPvmSimpleMod --> cPvmMod Synchronization mechanism added to PVM stuff. * new user function: cSimpleMod::syncpoint(t,gate) -- blocks destination segment until a cMsg sent at t (or later) through specified gate arrives. * several new functions and changes to cNetMod and cPvmMod to implement the above * cSimulation::nextmodule() rewritten NOT finished, NOT tested!!! 1997-08-05 Andras Varga * new function upack_object added to pvmpack.cc; * net_pack()/net_upack() functions improved 1997-08-04 Andras Varga * PVM stuff: all segments of a distributed simulation stops correctly now. Affected files: pvmmod.cc: cPVMSimpleMod's stopallsegments(), request_stopsimulation(), process_pvm_msg() csimul.cc: cSimulation's error(), printmsg(), warnings() functions eSTOPSIMRCVD error message added 1997-07-20 Andras Varga * Changes in PVM stuff: - debugged by Gabor Lencse: fixes in csimul.cc and pvm/pvmmod.cc - SINGLE_HOST #define added to pvmmod.cc: if turned on, OMNeT++ runs all segments of a distributed simulation on the local host, to facilitate debugging. (Needs PVM running though!) - stopping a distributed simulation doesn't work yet 1997-07-10 Andras Varga * makefile modified to work with Cygnus gcc on Win95/NT 1997-07-06 Andras Varga * ctype.h/cc changed: consistency check of different module interfaces * handling of CONST module parameters placed in cModType 1997-07-01 Andras Varga * simtimeToStr() function modified 1997-06-30 Andras Varga * cPar::gettext() bug fixed (didn't work with 'I' (indirection) type) * loop in cQueue::foreach() changed direction (now: tail --> head) * simtimeToStr() function rewritten 1997-06-26 Andras Varga * cMsg::info() changed 1997-06-23 Andras Varga * cleaned up things in chist.cc 1997-06-20 Andras Varga * a bug in the coroutine package fixed * cSimpleStatistic::getstddev() changed * cMsg::info changed 1997-05-22 Andras Varga * carray.cc/h: cBag::addat(int, void*) cBag::cBag(..., int esiz=4, ...) * chist.cc/h: virtual cHistogramBase::deletefirstvals() and other things ... virtual cHistogramBase::recreatefirstvals() virtual cHistogramBase::putinFirstVal(int, double) 1997-05-13 Andras Varga * unsigned long cHistogramBase::getcell{under|over}() added 1997-05-09 Andras Varga * double cHistogramBase::pdf(double x) probability density function 1997-04-22 Andras Varga * event_num, geteventnumber(), incr_eventnumber() added to cSimulation * realtimewait() removed (commented out) * nextmodule() changed so that it does not have any side effects (except for generating error messages) * name of cMod::stepmode changed to cMod::pause_in_sendmsg which is closer to what it does * compatibility: at least envir90, tkenv30, tvenv79 1997-04-18 Andras Varga * histograms: underflowcell_rmin and overflowcell_rmax added to pvmpack.cc too 1997-04-17 Andras Varga * friend class TOutVectorWindow added to cOutVector * histograms: underflowcell_rmin and overflowcell_rmax introduced (sizes of underflow/overflow cells are now multiples of cellsize) 1997-04-12 Andras Varga * more TInspector friend classes added to cMod * meaningful cGate::info() implemented * DUMMY_INSPECTOR macro corrected 1997-04-06 Andras Varga * iterators (cIter, cQIter, cSubmodIter): added XXX *op() to be used instead of XXX& op[0]. Old one kept for compatibility * cOutVect: inspector support added (as a callback function) * ev.messagedelivered( msg ) added to getnewmsg() * STARTUPERROR_MODE return value added to is_started_as_master() * compatible with: envir88, tkenv21, tvenv77 1997-04-01 Andras Varga * added args to cObj::inspector(): inspector(int type, void *data) change affects Tvenv & Tkenv * fixed a bug in cPvmSimpleMod's start_segments() 1997-03-25 Andras Varga * bugfixes in cstat, chist and cpsquare * exit() call after floating point exception was removed 1997-03-25 Andras Varga * cPiSquare: basepoints(),counter() fixed; pdfx(), cdfx() corrected * cpvmmod.cc changed * (histogram interval upper limit...) * cSimulation::deletenetwork() should do nothing if no network exists 1997-03-24 Andras Varga Bugfixes * (histogram interval upper limit...) * cSimulation::deletenetwork() should do nothing if no network exists 1997-03-24 Andras Varga * range_ext_direction added to cHistogramBase -1: extend downwards +1: extend upwards 0: symmetric extension (as it was before) (also updated in pvm/pvmpack.cc) * cHistogramBase::fwrite()/fread bug fixes 1997-03-24 Andras Varga * eliminated some warnings (implicit double->int conversions etc) * pvmmod.cc improved: added further informative messages to slave mode * chist.cc added to makefile 1997-03-21 Andras Varga * is_started_as_master() function added * pvmmod.cc improved * compatible with envir86 1997-03-21 Andras Varga * cGate::writecontents() added * cGate::isconnected() corrected (now checks if module is local or not) * histogram basepoints() bug fixed * bool isslaveprocess() added to cnetmod.h/.cc, pvmmod.cc 1997-03-18 Andras Varga * cLongHistogram::transform() improved 1997-03-18 Andras Varga * random() written in histograms * class string bug fixed 1997-03-17 Andras Varga * bugfixes in histogram 1997-03-17 Andras Varga * cLongHistogram::transform() rewritten 1997-03-17 Andras Varga * separate cstat.h/cc and chist.h/cc files 1997-03-16 Andras Varga * bugfixes 1997-03-15 Andras Varga * cPvmSimpleMod and cSimulation.setupnetwork() modified 1997-03-15 Andras Varga Module parameter logging bug fixed. Histogram classes: * pvmpack.cc updated * changed names: categorynr --> num_cells precoll_samples_num --> num_firstvals * basepts(), basepoint(k) finished PiSquare also updated (because cStatistic interface has changed in #120) * PiSquare's basepoint(), counter() are not correct!!! 1997-03-14 Andras Varga The range of the Histogram will be NOT recalculated * steps were taken towards this solution.... * cell_under/cell_over is saved/loaded, * cDoubleHistogram::collectTransformed() is rewritten and may be moved to cHistogramBase if everything seems to be OK. (only transform() should be different) 1997-03-14 Andras Varga The hierarchy of the statistics collecting classes is completely rewritten * cStatistic : abstract class * cSimpleStatistic replaces both cLongStat and cDoubleStat and is like cDoubleStat was * cHistogramBase : abstract class, contains all the common parts of cLongHistogram and cDoubleHistogram 1997-03-13 Andras Varga improvements on histograms: * precollect_sample_num introduced * cellwidth -> cellsize * 1/rangecoeff -> cellsize 1997-03-13 Andras Varga improvements on histograms: * both histograms have a range_ext_factor * all range calculation and extension (if a sample falls out) are rewritten * histogram calculates the c...Stat values if they are missing. (see #109d) 1997-03-11 Andras Varga * improvement on statistics classes 1997-03-10 Andras Varga * Define_Simple_Module_Like() macro added 1997-03-10 Andras Varga * cLongStat::fwrite/fwrite added * cLongHistogram::fwrite/fread added * some bugfixes in cDoubleHistogram::fwrite/fread done 1997-03-09 Andras Varga * Bug fixes 1997-03-08 Andras Varga * cModType adds missing "default" machine parameter * put cGate into separate header and cc files * added: cGate::transm_finishes, busy(), restart() etc. 1997-03-07 Andras Varga * minor improvements * PVM stuff updated; cPiSquare::pvm_pack()/upack() added 1997-03-06 Andras Varga 1997-03-05 Andras Varga * cPiSquare::fwrite(FILE *f) added * cPiSquare::fread(FILE *f) added 1997-03-05 Andras Varga * cDoubleStat::fwrite(FILE *f) added * cDoubleStat::fread(FILE *f) added * cDoubleHistogram::fwrite/fread functions use the functions above * cDoubleHistogram may read two different formats: cDoubleStat included or not included. But it still does NOT calculate the statistical values! * some functions of cStatBase were made to be pure virtual 1997-03-05 Andras Varga * cPiSquare sources added * makelib corrected 1997-03-04 Andras Varga * cResult renamed to sStatBase * cDoubleDistrResult renamed to cDoubleHistogram * cLintDistrResult renamed to cLongHistogram * cLintResult, cDoubleResult were commented out * cDoubleStatResult renamed to cDoubleStat * cLintResult renamed to cLongStat * cDoubleHistogram::fwrite(FILE *f) added * cDoubleHistogram::fread(FILE *f) added 1997-03-03 Andras Varga * cVarShell renamed to cWatch 1997-03-03 Andras Varga * multiple random number generators (genk_xxx functions) added * added check for seed=0 1997-02-28 Andras Varga * info() member functions fixed 1997-02-28 Andras Varga * minor changes 1997-02-28 Andras Varga * cSimulation: cleaned up network setup/delete stuff newnetwork() --renamed--> setupnetwork(cNetworkType n, int run_number) clear() --renamed--> deletenetwork() restart() --renamed--> startrun() endrun(): new function setsize(n), setrun(n): removed getrun() --renamed--> getrunnumber() getnetwork() --renamed--> getnetworktype() * cOutFileMgr: bugfixes 1997-02-27 Andras Varga * bugfixes on #103 * intuniform() distribution added 1997-02-20 Andras Varga * bugfixes on #102 1997-02-13 Andras Varga * cPar cleaned up: o types U,N,E,B,I removed o truncate flag removed o list of allowed type removed o last value preserving removed o parchanges removed o modpar flag removed o in constructor, type string changed to type char o constructor no longer takes prompt as arg o valuechanged() ---renamed to---> valuechanges() o less default conversions (they caused confusion) o settext() simplified * features added to cPar: o MathFunc w/ 0,1,2,3 constant args added (new: F type) o indirection type (I) o sXElem changed (for example, referto() was removed) * cModPar: o made to be a cPar descendant o "new" feature: module parameter logging (works thru valuechanges()) * cVal, valuelist, findval() etc. removed * cMod: o iscompound(), cpd flag removed o issimple() now works through being virtual o precomp flag, isprecomp() removed (no one used it) o added: ancestorpar( char *s ); * cCompMod renamed to cCompoundMod * cMsg function names changed o setprior() --> setpriority() o setlen() --> setlength() o seterr() --> seterror() New field: timestamp void settimestamp( [simtime_t t] ); simtime_t timestamp(); * cSimulation: o new fields cOutFileMgr parchangefilemgr, bool logparchanges o outfilemgr --renamed--> outvectfilemgr * cOutFileMgr: o interface changed o new: '##'-to-run-number substitution in file names o deletefile() added * oObj::restore(), cHead::restore() functions deleted (were only used by cVal) * cObj constructor more optimized, cobj.h commented * IMPORTANT: operator=() no longer copies object name!!!! It should be done separately if needed. Copy constructor DOES copy the name. 1997-02-12 Andras Varga * data rate support added * sendmsgdelayed() added 1996-12-08 Andras Varga * `members' added to cSimpleMod * modified cLinkType * error fixed in cGate::setlink() 1996-12-06 Andras Varga * changed: cGate, cLinkType, connect() 1996-12-06 Andras Varga * bug fixed which caused double delay on links * deliver() moved from cMod to cGate