[other] Minor optimization in times

This commit is contained in:
Oscar Nihlgård
2019-07-11 11:19:34 +02:00
parent fd24a8923e
commit 974362c98f

View File

@@ -511,17 +511,20 @@ template convert(dur: Duration, unit: static[FixedTimeUnit]): int64 =
# The correction is required due to how durations are normalized.
# For example,` initDuration(nanoseconds = -1)` is stored as
# { seconds = -1, nanoseconds = 999999999 }.
let correction = dur.seconds < 0 and dur.nanosecond > 0
when unit >= Seconds:
convert(Seconds, unit, dur.seconds + ord(correction))
when unit == Nanoseconds:
dur.seconds * 1_000_000_000 + dur.nanosecond
else:
if correction:
convert(Seconds, unit, dur.seconds + 1) -
convert(Nanoseconds, unit,
convert(Seconds, Nanoseconds, 1) - dur.nanosecond)
let correction = dur.seconds < 0 and dur.nanosecond > 0
when unit >= Seconds:
convert(Seconds, unit, dur.seconds + ord(correction))
else:
convert(Seconds, unit, dur.seconds) +
convert(Nanoseconds, unit, dur.nanosecond)
if correction:
convert(Seconds, unit, dur.seconds + 1) -
convert(Nanoseconds, unit,
convert(Seconds, Nanoseconds, 1) - dur.nanosecond)
else:
convert(Seconds, unit, dur.seconds) +
convert(Nanoseconds, unit, dur.nanosecond)
proc inWeeks*(dur: Duration): int64 =
## Convert the duration to the number of whole weeks.