class Quartz::TimePoint
- Quartz::TimePoint
- Reference
- Object
Overview
The TimePoint data type represents points in simulated time, and is
intended to be used internally.
Its main purpose is to describe event times as offsets from a common
reference point. It may be perturbed by a Duration value.
It is implemented as an arbitrary-precision integer, and provides only relevant methods.
The modeller should only manipulate Duration values.
TODO:
- handle sign.
- one zero representation.
- make immutable
- transform mod operations by bit masking (e.g. (n & (BASE-1)))
Included Modules
- Comparable(Quartz::TimePoint)
Defined in:
quartz/time_point.crConstructors
-
.new(n : Int = 0, precision : Scale = Scale::BASE)
Creates a new
TimePointvalue, initialized at the given precision from the given integer n, which may or not be zero. -
.new(magnitude : Array(Int16), precision : Scale)
Creates a new
TimePoint, whose value depends on the given *magnitude, initialized at the given precision. -
.new(*numbers : Int, precision : Scale = Scale::BASE)
Creates a new
TimePoint, whose value is given by numbers, initialized at the given precision.
Instance Method Summary
- #+(duration : Duration) : TimePoint
- #-(duration : Duration) : TimePoint
-
#-(other : TimePoint) : Duration
Measure the difference between
selfand another instance ofself. -
#<=>(other : TimePoint)
Comparison operator
-
#[](scale : Scale) : Int16
Returns the integer corresponding to the indicated precision, or zero if not in bounds.
-
#[](i : Int) : Int16
Returns the integer at the corresponding index following the little-endian representation (0 is the least significant).
-
#[]?(scale : Scale) : Int16?
Returns the integer corresponding to the indicated precision, or
nil. -
#[]?(i : Int) : Int16?
Returns the integer at the corresponding index following the little-endian representation (0 is the least significant).
-
#advance(by duration : Duration, truncate : Bool = true) : TimePoint
Multiscale advancement - Adds the given
Durationtoself. -
#at(index : Int, &block : -> Int16)
Returns the element at the given index, if in bounds, otherwise executes the given block and returns its value.
-
#at(scale : Scale, &)
Returns the element at the given precision, if in bounds, otherwise executes the given block and returns its value.
-
#clone
Returns a copy of
selfwith all instance variables cloned. -
#coarse_to!(precision : Scale)
Discards all digits less significant than given precision.
-
#dup
Returns a shallow copy of
self. -
#duration_from_phase(phase : Duration) : Duration
Converts a planned phase (offset from the current epoch) to a planned duration relative to
self. -
#epoch_phase(precision : Scale) : Int64
Returns the epoch phase, which represents the number of time quanta which separates
selffrom the beginning of the current epoch. -
#gap(other : TimePoint) : Duration
Measure the difference between
selfand another instance ofself. -
#phase_from_duration(duration : Duration) : Duration
Converts a planned duration to a planned phase.
-
#precision : Scale
Returns the precision associated with the least significant number.
-
#refined_duration(duration : Duration, refined : Scale) : Duration
Refines a planned
Durationto match another planned duration precision, relative toself. -
#size
Returns the order of magnitude of
self, based on its#precisionand the number of stored integers on a base-1000 scale. -
#to_big_i
Convert this
TimePointto aBigInt. -
#to_f
Convert
selfto aFloat64. - #to_i
-
#to_i32
Convert this
TimePointto anInt32. -
#to_i64
Convert this
TimePointto anInt64. - #to_s(io)
-
#zero?
Whether
selfis a zero time point value.
Instance methods inherited from class Reference
==(other : Quartz::Any)
==
Instance methods inherited from class Object
===(other : Quartz::Any)
===
Constructor Detail
Creates a new TimePoint value, initialized at the given precision from
the given integer n, which may or not be zero.
Creates a new TimePoint, whose value depends on the given *magnitude,
initialized at the given precision.
The magnitude must be ordered and organized from the least-significant number to the least-signifiant number.
Creates a new TimePoint, whose value is given by numbers, initialized at
the given precision.
The numbers must be ordered and organized from the most-significant number to the least-significant number.
Instance Method Detail
Returns a new TimePoint to which the given Duration is added.
Doesn't truncate result to the duration precision.
Returns a new TimePoint to which the given Duration is subtracted.
Doesn't truncate result to the duration precision.
Measure the difference between self and another instance of self.
The difference is expressed by a Duration value.
If the exact difference between the time points cannot be represented, an
infinite Duration is returned.
See also #gap.
Returns the integer corresponding to the indicated precision, or zero if not in bounds.
Returns the integer at the corresponding index following the little-endian representation (0 is the least significant).
Raises if the given index is not in bounds.
Returns the integer corresponding to the indicated precision, or nil.
Returns the integer at the corresponding index following the little-endian representation (0 is the least significant).
Returns nil if given index is not in bounds.
Multiscale advancement - Adds the given Duration to self.
If the advancement duration is zero, returns self. Advances according to
the duration value otherwise.
If the truncate parameter is set to true, the time point is truncated
at the precision level of the duration (e.g. all digits less significant are
discarded). Otherwise, yields exact results.
Returns the element at the given index, if in bounds, otherwise executes the given block and returns its value.
Returns the element at the given precision, if in bounds, otherwise executes the given block and returns its value.
Discards all digits less significant than given precision.
Converts a planned phase (offset from the current epoch) to a planned
duration relative to self.
Returns the epoch phase, which represents the number of time quanta which
separates self from the beginning of the current epoch.
Measure the difference between self and another instance of self.
The difference is expressed by a Duration value.
If the exact difference between the time points cannot be represented, an approximation is returned.
See also #-.
Converts a planned duration to a planned phase.
The planned phase represents an offset from the current epoch relative to
self.
Returns the precision associated with the least significant number.
Refines a planned Duration to match another planned duration precision,
relative to self.
Note: The implementation diverge from the paper algoithm.
Returns the order of magnitude of self, based on its #precision
and the number of stored integers on a base-1000 scale.
Convert self to a Float64. Express values in a base precision, e.g.
Scale::BASE.
Note: this conversion can lose information about the overall magnitude of
self.
Convert this TimePoint to an Int32.
Note: this conversion can lose information about the overall magnitude of
self as well as return a result with the opposite sign.
Convert this TimePoint to an Int64. Express values relative to
its #precision.
Note: this conversion can lose information about the overall magnitude of
self as well as return a result with the opposite sign.