121 std::string::size_type n = s.find_first_not_of(
"+-0123456789.eE");
122 if (n != std::string::npos)
124 std::istringstream
iss;
125 iss.str(s.substr(0, n));
128 std::string
trailer = s.substr(n, std::string::npos);
177 std::istringstream
iss;
222 int shift = UNIT_POWER[
i] - UNIT_POWER[(int)unit];
224 if (UNIT_COEFF[
i] > UNIT_COEFF[(
int)unit])
226 quotient = UNIT_COEFF[
i] / UNIT_COEFF[(int)unit];
229 else if (UNIT_COEFF[
i] < UNIT_COEFF[(
int)unit])
231 quotient = UNIT_COEFF[(int)unit] / UNIT_COEFF[
i];
234 NS_LOG_DEBUG(
"SetResolution for unit " << (
int)unit <<
" loop iteration " <<
i
235 <<
" has shift " << shift <<
" has quotient "
239 if ((std::pow(10, std::fabs(shift)) *
quotient) >
240 static_cast<double>(std::numeric_limits<int64_t>::max()))
242 NS_LOG_DEBUG(
"SetResolution for unit " << (
int)unit <<
" loop iteration " <<
i
243 <<
" marked as INVALID");
247 auto factor =
static_cast<int64_t
>(std::pow(10, std::fabs(shift)) *
quotient);
248 double realFactor = std::pow(10, (
double)shift) *
static_cast<double>(UNIT_COEFF[
i]) /
249 UNIT_COEFF[(
int)unit];
347 "Time object " << time <<
" registered " <<
g_markingTimes->count(time)
348 <<
" times (should be 1).");
353 NS_LOG_WARN(
"unexpected result erasing " << time <<
"!");
372 "No MarkedTimes registry. "
373 "Time::SetResolution () called more than once?");
378 if (!(
tp->m_data == std::numeric_limits<int64_t>::min() ||
379 tp->m_data == std::numeric_limits<int64_t>::max()))
424 auto value =
static_cast<long double>(
timeU.m_time.GetTimeStep());
477 label =
"unreachable";
481 double v =
timeU.m_time.ToDouble(unit);
489 std::ios_base::fmtflags
ff = os.flags();
491 os << std::showpos << std::right << v << label;
494 if (!(
ff & std::ios_base::showpos))
496 os << std::noshowpos;
498 if (
ff & std::ios_base::left)
502 else if (
ff & std::ios_base::internal)
528 Checker(
const Time minValue,
const Time maxValue)
529 : m_minValue(minValue),
537 const auto v =
dynamic_cast<const TimeValue*
>(&value);
542 return v->
Get() >= m_minValue && v->Get() <= m_maxValue;
545 std::string GetValueTypeName()
const override
548 return "ns3::TimeValue";
551 bool HasUnderlyingTypeInformation()
const override
557 std::string GetUnderlyingTypeInformation()
const override
560 std::ostringstream oss;
562 <<
" " << m_minValue <<
":" << m_maxValue;
575 const auto src =
dynamic_cast<const TimeValue*
>(&source);
576 auto dst =
dynamic_cast<TimeValue*
>(&destination);
577 if (src ==
nullptr || dst ==
nullptr)
587 }* checker =
new Checker(min, max);
NS_ABORT_x macro definitions.
Represent the type of an attribute.
Hold a value for an Attribute.
Smart pointer class similar to boost::intrusive_ptr.
Simulation virtual time values and global simulation resolution.
static void ClearMarkedTimes()
Remove all MarkedTimes.
static Resolution & SetDefaultNsResolution()
Set the default resolution.
TimeWithUnit As(const Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
static void ConvertTimes(const Unit unit)
Convert existing Times to the new unit.
static Unit GetResolution()
static bool StaticInit()
Function to force static initialization of Time.
static void Clear(Time *const time)
Remove a Time instance from the MarkedTimes, called by ~Time().
Unit
The unit to use to interpret a number representing time.
@ AUTO
auto-scale output when using Time::As()
@ LAST
marker for last normal value
Time()
Default constructor, with value 0.
static MarkedTimes * g_markingTimes
Record of outstanding Time objects which will need conversion when the resolution is set.
int64_t m_data
Virtual time value, in the current unit.
static Resolution * PeekResolution()
Get the current Resolution.
static void Mark(Time *const time)
Record a Time instance with the MarkedTimes.
static void SetResolution(Unit resolution)
static Time FromDouble(double value, Unit unit)
Create a Time equal to value in unit unit.
std::set< Time * > MarkedTimes
Record all instances of Time, so we can rescale them when the resolution changes.
AttributeValue implementation for Time.
A Time with attached unit, to facilitate output in that unit.
High precision numerical type, implementing Q64.64 fixed precision.
static int64x64_t Invert(const uint64_t v)
Compute the inverse of an integer value.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeChecker > MakeTimeChecker()
Helper to make an unbounded Time checker.
#define ATTRIBUTE_VALUE_IMPLEMENT(type)
Define the class methods belonging to attribute value class typeValue for class type.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
#define NS_LOG_COMPONENT_DEFINE_MASK(name, mask)
Define a logging component with a mask.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
const long double * UNIT_VALUE
Value of each unit, in terms of the smallest defined unit.
const int32_t UNIT_COEFF[Time::LAST]
Scaling coefficient, relative to smallest unit.
const int8_t UNIT_POWER[Time::LAST]
Scaling coefficients, exponents, and look up table for unit.
long double * InitUnitValue()
Initializer for UNIT_VALUE.
long double Scale(Time::Unit u)
Scale a unit to the smallest unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
static unsigned int value(char c)
std::istream & operator>>(std::istream &is, Angles &a)
Ptr< T > Copy(Ptr< T > object)
Return a deep copy of a Ptr.
@ LOG_PREFIX_TIME
Prefix all trace prints with simulation time.
static std::mutex g_markingMutex
The static mutex for critical sections around modification of Time::g_markingTimes.
Declaration of classes ns3::Time and ns3::TimeWithUnit, and the TimeValue implementation classes.
Current time unit, and conversion info.
Time::Unit unit
Current time unit.