From 974362c98f6adc4f3dd3be3c5ba0d684f2cfa489 Mon Sep 17 00:00:00 2001 From: Oscar NihlgÄrd Date: Thu, 11 Jul 2019 11:19:34 +0200 Subject: [other] Minor optimization in times --- lib/pure/times.nim | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/pure/times.nim b/lib/pure/times.nim index 9d0ce8677..9b1ac8d3b 100644 --- a/lib/pure/times.nim +++ b/lib/pure/times.nim @@ -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. -- cgit 1.4.1-2-gfad0