NanoTime¶
Utilities for handling time periods at nanosecond resolution.
-
namespace
NanoTime
¶ Enums
Functions
-
const char *
unitToLongString
(Unit unit)¶ Get a long string identifying the given time units, e.g. “seconds”.
-
template<uint64_t
time
, UnitunitsFrom
, UnitunitsTo
, typenameR
= std::ratio_divide<UnitTickRatio<unitsTo>, UnitTickRatio<unitsFrom>>>
constexpr uint64_tconvert
()¶ Function template to convert a constant time quantity from one unit to another.
- Note
example:
uint32_t micros = convert<50, Milliseconds, Microseconds>();
- Template Parameters
time
: The time to convertunitsFrom
: Units fortime
parameterunitsTo
: Units for return value
- Return Value
TimeType
: Converted time
-
template<typename
TimeType
>
TimeTypeconvert
(const TimeType &time, Unit unitsFrom, Unit unitsTo)¶ Function template to convert a time quantity from one unit to another.
- Template Parameters
TimeType
: Variable type to use for calculation
- Parameters
time
: The time to convertunitsFrom
: Units fortime
parameterunitsTo
: Units for return value
- Return Value
TimeType
: Converted time, returns TimeType(-1) if calculation overflowed
-
template<typename
T
>
Time<T>time
(Unit unit, T value)¶ Helper function to create a Time and deduce the type.
-
template<Unit
unitsFrom
, UnitunitsTo
, typenameTimeType
>
TimeTypeconvert
(const TimeType &time)¶ Function template to convert a time quantity from one unit to another.
- Template Parameters
unitsFrom
: Units fortime
parameterunitsTo
: Units for return valueTimeType
: Variable type to use for calculation
- Parameters
time
: The time to convert
- Return Value
TimeType
: Converted time, returns TimeType(-1) if calculation overflowed
Variables
-
constexpr BasicRatio32 NanoTime::unitTicks[UnitMax+1]= { {1000000000, 1}, {1000000, 1}, {1000, 1}, {1, 1}, {1, 60}, {1, 60 * 60}, {1, 24 * 60 * 60}, }
List of clock ticks for each supported unit of time.
-
template<typename
ClockDef
, uint32_tfrequency_
, typenameTickType_
, TickType_maxTicks_
>
structClock
¶ - #include <NanoTime.h>
Class template representing a physical Clock with fixed timing characteristics.
- Note
Physical clocks are implemented using this as a base. The provided frequency accounts for any prescaler setting in force. Fixing this at compile time helps to avoid expensive runtime calculations and permits static range checks.
- See
Use
TimeSource
to work with a Clock in specific time units- Template Parameters
Subclassed by NanoTime::TimeSource< Clock, unit_, TimeType >
-
struct
Frequency
¶ - #include <NanoTime.h>
Class to represent a frequency.
-
template<typename
Clock_
, typenameT
>
structTicks
¶ - #include <NanoTime.h>
Class to handle a tick value associated with a clock.
-
template<class
Clock_
, uint64_tticks_
>
structTicksConst
¶ - #include <NanoTime.h>
Class template representing a fixed clock tick count.
- Note
Includes compile-time range checking
- Template Parameters
Source_
:ticks_
:
-
template<typename
T
>
structTime
¶ - #include <NanoTime.h>
Class to handle a simple time value with associated unit.
-
template<class
Clock_
, Unitunit_
, uint64_ttime_
>
structTimeConst
¶ - #include <NanoTime.h>
Class template to represent a fixed time value for a specific Clock.
- Note
Includes compile-time range checking. Time is taken as reference for conversions.
- Template Parameters
Clock_
:unit_
:time_
:
-
template<class
Clock_
, Unitunit_
, typenameTimeType_
>
structTimeSource
: public Clock_¶ - #include <NanoTime.h>
Class template for accessing a Clock in specific time units.
- Note
Includes compile-time range checking. Time is taken as reference for conversions.
- Template Parameters
Clock_
:units_
:TimeType_
: Limits range of calculations
-
struct
TimeValue
¶ - #include <NanoTime.h>
A time time broken into its constituent elements.
- Note
Useful for analysing and printing time values
-
template<Unit
unit
>
structUnitTickRatio
¶ - #include <NanoTime.h>
Class template to define tick std::ratio type.
- Note
This would be preferable:
template <Unit unit> using UnitTickRatio = std::ratio<unitTicks[unit].num, unitTicks[unit].den>;
But GCC 4.8 doesn’t like it (lvalue required as unary ‘&’ operand)- Template Parameters
unit
:
- Return Value
std::ratio
: Ticks per second
-
const char *