OMNeT++ Simulation Library
6.0.3
|
#include <simtime.h>
int64_t-based, base-10 fixed-point simulation time.
Precision is determined by a scale exponent, which is global (shared by all SimTime instances), and falls in the range -18..0. For example, a scale exponent of -6 means microsecond precision.
Conversions and arithmetic operations are provided specifically for double and cPar, and via template functions for integer types. Performance note: conversion from double uses the scale stored as double, and conversion from integer types uses the scale stored as int64_t; the former eliminates an int64_t-to-double conversion, and the latter allows the compiler to optimize expressions like if (time>0)
to a trivial integer operation, without floating-point or int64_t multiplication.
The underlying raw 64-bit integer is also made accessible.
Public Member Functions | |
Constructors | |
SimTime () | |
SimTime (double d) | |
SimTime (cPar &d) | |
SimTime (int64_t value, SimTimeUnit unit) | |
SimTime (const SimTime &x) | |
Static Public Attributes | |
static const SimTime | ZERO |
Arithmetic operations | |
SimTime & | operator= (const SimTime &x)=default |
SimTime & | operator= (const cPar &d) |
SimTime & | operator= (double d) |
SimTime & | operator= (short d) |
SimTime & | operator= (int d) |
SimTime & | operator= (long d) |
SimTime & | operator= (long long d) |
SimTime & | operator= (unsigned short d) |
SimTime & | operator= (unsigned int d) |
SimTime & | operator= (unsigned long d) |
SimTime & | operator= (unsigned long long d) |
bool | operator== (const SimTime &x) const |
bool | operator!= (const SimTime &x) const |
bool | operator< (const SimTime &x) const |
bool | operator> (const SimTime &x) const |
bool | operator<= (const SimTime &x) const |
bool | operator>= (const SimTime &x) const |
SimTime | operator- () const |
const SimTime & | operator+= (const SimTime &x) |
const SimTime & | operator-= (const SimTime &x) |
const SimTime & | operator*= (double d) |
const SimTime & | operator*= (short d) |
const SimTime & | operator*= (int d) |
const SimTime & | operator*= (long d) |
const SimTime & | operator*= (long long d) |
const SimTime & | operator*= (unsigned short d) |
const SimTime & | operator*= (unsigned int d) |
const SimTime & | operator*= (unsigned long d) |
const SimTime & | operator*= (unsigned long long d) |
const SimTime & | operator*= (const cPar &p) |
const SimTime & | operator/= (double d) |
const SimTime & | operator/= (short d) |
const SimTime & | operator/= (int d) |
const SimTime & | operator/= (long d) |
const SimTime & | operator/= (long long d) |
const SimTime & | operator/= (unsigned short d) |
const SimTime & | operator/= (unsigned int d) |
const SimTime & | operator/= (unsigned long d) |
const SimTime & | operator/= (unsigned long long d) |
const SimTime & | operator/= (const cPar &p) |
const friend SimTime | operator+ (const SimTime &x, const SimTime &y) |
const friend SimTime | operator- (const SimTime &x, const SimTime &y) |
const friend SimTime | operator* (const SimTime &x, double d) |
const friend SimTime | operator* (const SimTime &x, short d) |
const friend SimTime | operator* (const SimTime &x, int d) |
const friend SimTime | operator* (const SimTime &x, long d) |
const friend SimTime | operator* (const SimTime &x, long long d) |
const friend SimTime | operator* (const SimTime &x, unsigned short d) |
const friend SimTime | operator* (const SimTime &x, unsigned int d) |
const friend SimTime | operator* (const SimTime &x, unsigned long d) |
const friend SimTime | operator* (const SimTime &x, unsigned long long d) |
const friend SimTime | operator* (const SimTime &x, const cPar &p) |
const friend SimTime | operator* (double d, const SimTime &x) |
const friend SimTime | operator* (short d, const SimTime &x) |
const friend SimTime | operator* (int d, const SimTime &x) |
const friend SimTime | operator* (long d, const SimTime &x) |
const friend SimTime | operator* (long long d, const SimTime &x) |
const friend SimTime | operator* (unsigned short d, const SimTime &x) |
const friend SimTime | operator* (unsigned int d, const SimTime &x) |
const friend SimTime | operator* (unsigned long d, const SimTime &x) |
const friend SimTime | operator* (unsigned long long d, const SimTime &x) |
const friend SimTime | operator* (const cPar &p, const SimTime &x) |
const friend SimTime | operator/ (const SimTime &x, double d) |
const friend SimTime | operator/ (const SimTime &x, short d) |
const friend SimTime | operator/ (const SimTime &x, int d) |
const friend SimTime | operator/ (const SimTime &x, long d) |
const friend SimTime | operator/ (const SimTime &x, long long d) |
const friend SimTime | operator/ (const SimTime &x, unsigned short d) |
const friend SimTime | operator/ (const SimTime &x, unsigned int d) |
const friend SimTime | operator/ (const SimTime &x, unsigned long d) |
const friend SimTime | operator/ (const SimTime &x, unsigned long long d) |
const friend SimTime | operator/ (const SimTime &x, const cPar &p) |
double | operator/ (const SimTime &x, const SimTime &y) |
double | operator/ (double x, const SimTime &y) |
double | operator/ (short x, const SimTime &y) |
double | operator/ (int x, const SimTime &y) |
double | operator/ (long x, const SimTime &y) |
SIM_API double | operator/ (long long x, const SimTime &y) |
double | operator/ (unsigned short x, const SimTime &y) |
double | operator/ (unsigned int x, const SimTime &y) |
double | operator/ (unsigned long x, const SimTime &y) |
SIM_API double | operator/ (unsigned long long x, const SimTime &y) |
SIM_API double | operator/ (const cPar &p, const SimTime &x) |
Misc operations and utilities | |
bool | isZero () const |
double | dbl () const |
int64_t | inUnit (SimTimeUnit unit) const |
SimTime | trunc (SimTimeUnit unit) const |
SimTime | remainderForUnit (SimTimeUnit unit) const |
void | split (SimTimeUnit unit, int64_t &outValue, SimTime &outRemainder) const |
std::string | str () const |
char * | str (char *buf) const |
std::string | ustr () const |
std::string | ustr (SimTimeUnit unit) const |
int64_t | raw () const |
const SimTime & | setRaw (int64_t l) |
static SimTime | fromRaw (int64_t l) |
static const SimTime | getMaxTime () |
static int64_t | getScale () |
static int | getScaleExp () |
static void | setScaleExp (int e) |
static const SimTime | parse (const char *s) |
static const SimTime | parse (const char *s, const char *&endp) |
static char * | ttoa (char *buf, int64_t t, int scaleexp, char *&endp) |
|
inline |
Constructor initializes to zero.
|
inline |
Initialize simulation time from a double-precision number. This constructor is recommended if the value is the result of some computation done in double
. For integer-based computations and time constants, the SimTime(int64_t x, int exponent)
constructor is usually a better choice, because it does not have rounding errors caused by double-to-integer conversion.
Initialize simulation time from a module or channel parameter. It uses conversion to double
. It currently does not check the measurement unit of the parameter (@unit NED property), although this may change in future releases.
SimTime | ( | int64_t | value, |
SimTimeUnit | unit | ||
) |
Initialize simulation time from value specified in the given units. This constructor allows one to specify precise constants, without conversion errors incurred by the double
constructor. An error will be thrown if the resulting value cannot be represented (overflow) or it cannot be represented precisely (precision loss) with the current resolution (i.e. scale exponent). Note that the unit parameter actually represents a base-10 exponent, so the constructor will also work correctly for values not in the SimTimeUnit enum.
Examples: Simtime(15, SIMTIME_US) -> 15us Simtime(-3, SIMTIME_S) -> -1s Simtime(5, (SimTimeUnit)2) -> 500s;
|
inline |
Returns true if this simulation time is zero, false otherwise. This is more efficient than comparing the variable to a (double) 0.0, and shorter than comparing against SimTime::ZERO.
Referenced by cPacket::isReceptionEnd().
|
inline |
Converts simulation time (in seconds) to a double. Note that conversion to and from double may lose precision. We do not provide implicit conversion to double as it would conflict with other overloaded operators, and would cause ambiguities during compilation.
Referenced by cStatistic::collect(), cStatistic::collectWeighted(), omnetpp::exponential(), cComponent::exponential(), omnetpp::normal(), cComponent::normal(), cOutVector::record(), cComponent::recordScalar(), cOutVector::recordWithTimestamp(), omnetpp::truncnormal(), cComponent::truncnormal(), omnetpp::uniform(), and cComponent::uniform().
int64_t inUnit | ( | SimTimeUnit | unit | ) | const |
Converts the simulation time to the given time unit, discarding the fractional part (i.e. rounding towards zero). If the return type is not wide enough to hold the result, an error will be thrown.
Examples: 1.7ms in us --> 1700; 3.8ms in ms --> 3; -3.8ms in ms --> -3; 999ms in s --> 0
|
inline |
Returns a new simulation time that is truncated (rounded towards zero) to the precision of the specified time unit.
Examples: 3750ms truncated to s --> 3; -3750ms truncated to s --> -3
|
inline |
Returns a simtime that is the difference between the simulation time and its truncated value (see trunc()).
That is, t == t.trunc(unit) + t.remainderforUnit(unit) for any unit.
void split | ( | SimTimeUnit | unit, |
int64_t & | outValue, | ||
SimTime & | outRemainder | ||
) | const |
Convenience method: splits the simulation time into a whole and a fractional part with regard to a time unit. t.split(exponent, outValue, outRemainder)
is equivalent to:
outValue = t.inUnit(unit); outRemainder = t.remainderForUnit(unit);
|
inline |
Converts the time to a numeric string. The number expresses the simulation time precisely (including all significant digits), in seconds. The measurement unit (seconds) is not part of the string.
References SimTime::str().
Referenced by SimTime::str().
|
inline |
Converts to a string in the same way as str() does. Use this variant over str() where performance is critical. The result is placed somewhere in the given buffer (pointer is returned), but for performance reasons, not necessarily at the buffer's beginning. Please read the documentation of ttoa() for the minimum required buffer size.
References SimTime::ttoa().
std::string ustr | ( | ) | const |
Converts the time to a numeric string with unit in the same format as ustr(SimTimeUnit) does, but chooses the time unit automatically. The function tries to choose the "natural" time unit, e.g. 0.0033 is returned as "3.3ms".
std::string ustr | ( | SimTimeUnit | unit | ) | const |
Converts the time to a numeric string in the given time unit. The unit can be "s", "ms", "us", "ns", "ps", "fs", or "as". The result represents the simulation time precisely (includes all significant digits), and the unit is appended.
|
inline |
Returns the underlying 64-bit integer.
Referenced by omnetpp::ceil(), omnetpp::div(), omnetpp::fabs(), omnetpp::floor(), and omnetpp::fmod().
|
inlinestatic |
Creates a SimTime by setting its underlying 64-bit integer.
|
inline |
Directly sets the underlying 64-bit integer.
Referenced by omnetpp::ceil(), omnetpp::floor(), omnetpp::fmod(), and SimTime::getMaxTime().
|
inlinestatic |
Returns the largest simulation time that can be represented using the present scale exponent.
References SimTime::setRaw().
|
inlinestatic |
Returns the time resolution as the number of units per second, e.g. for microsecond resolution it returns 1000000.
Referenced by omnetpp::ceil(), and omnetpp::floor().
|
inlinestatic |
Returns the scale exponent, which is an integer in the range -18..0. For example, for microsecond resolution it returns -6.
|
static |
Sets the scale exponent, and thus the resolution of time. Accepted values are -18..0; for example, setScaleExp(-6) selects microsecond resolution. Normally, the scale exponent is set from the configuration file (omnetpp.ini) on simulation startup.
The scale exponent can only be set ONCE, and cannot be changed afterwards. Any attempt to change it after it got initialized will result in a runtime error. Reason: the simtime exponent is a global variable, and changing it would silently change the value of existing SimTime variables.
|
static |
Converts the given string to simulation time. Throws an error if there is an error during conversion. Accepted format is: <number> or (<number><unit>)+.
|
static |
Converts a prefix of the given string to simulation time, up to the first character that cannot occur in simulation time strings: not (digit or letter or "." or "+" or "-" or whitespace). Throws an error if there is an error during conversion of the prefix. If the prefix is empty (whitespace only), then 0 is returned, and endp is set equal to s; otherwise, endp is set to point to the first character that was not converted.
|
static |
Utility function to convert a 64-bit fixed point number into a string buffer. scaleexp must be in the -18..0 range, and the buffer must be at least 64 bytes long. A pointer to the result string will be returned. A pointer to the terminating '\0' will be returned in endp.
ATTENTION: For performance reasons, the returned pointer will point somewhere into the buffer, but NOT necessarily at the beginning.
Referenced by SimTime::str().
|
static |
Represents the zero simulation time. Using SimTime::ZERO may be faster than writing SimTime() or conversion from 0.0, because the constructor call may be spared.