diff options
| author | Linus Färnstrand <faern@faern.net> | 2018-12-04 02:29:57 +0100 |
|---|---|---|
| committer | Linus Färnstrand <faern@faern.net> | 2018-12-13 15:25:14 +0100 |
| commit | 13f0463a195832f10f0f22105ad14e6d6b2eff59 (patch) | |
| tree | aa93f5e194b0d3a8d74072cee40bdc0b8cbaa5a6 /src/libstd/sys/windows | |
| parent | 9fe5cb5342244a716055fa0162e795deabd4985c (diff) | |
| download | rust-13f0463a195832f10f0f22105ad14e6d6b2eff59.tar.gz rust-13f0463a195832f10f0f22105ad14e6d6b2eff59.zip | |
Add checked_add method to Instant time type
Diffstat (limited to 'src/libstd/sys/windows')
| -rw-r--r-- | src/libstd/sys/windows/time.rs | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src/libstd/sys/windows/time.rs b/src/libstd/sys/windows/time.rs index c809a0b98ac..cad36627bf3 100644 --- a/src/libstd/sys/windows/time.rs +++ b/src/libstd/sys/windows/time.rs @@ -68,17 +68,15 @@ impl Instant { Duration::new(nanos / NANOS_PER_SEC, (nanos % NANOS_PER_SEC) as u32) } - pub fn add_duration(&self, other: &Duration) -> Instant { + pub fn checked_add_duration(&self, other: &Duration) -> Option<Instant> { let freq = frequency() as u64; - let t = other.as_secs().checked_mul(freq).and_then(|i| { - (self.t as u64).checked_add(i) - }).and_then(|i| { - i.checked_add(mul_div_u64(other.subsec_nanos() as u64, freq, - NANOS_PER_SEC)) - }).expect("overflow when adding duration to time"); - Instant { + let t = other.as_secs() + .checked_mul(freq)? + .checked_add(mul_div_u64(other.subsec_nanos() as u64, freq, NANOS_PER_SEC))? + .checked_add(self.t as u64)?; + Some(Instant { t: t as c::LARGE_INTEGER, - } + }) } pub fn sub_duration(&self, other: &Duration) -> Instant { @@ -86,8 +84,7 @@ impl Instant { let t = other.as_secs().checked_mul(freq).and_then(|i| { (self.t as u64).checked_sub(i) }).and_then(|i| { - i.checked_sub(mul_div_u64(other.subsec_nanos() as u64, freq, - NANOS_PER_SEC)) + i.checked_sub(mul_div_u64(other.subsec_nanos() as u64, freq, NANOS_PER_SEC)) }).expect("overflow when subtracting duration from time"); Instant { t: t as c::LARGE_INTEGER, @@ -127,10 +124,6 @@ impl SystemTime { } } - pub fn add_duration(&self, other: &Duration) -> SystemTime { - self.checked_add_duration(other).expect("overflow when adding duration to time") - } - pub fn checked_add_duration(&self, other: &Duration) -> Option<SystemTime> { checked_dur2intervals(other) .and_then(|d| self.intervals().checked_add(d)) @@ -184,11 +177,12 @@ impl Hash for SystemTime { } } -fn checked_dur2intervals(d: &Duration) -> Option<i64> { - d.as_secs() - .checked_mul(INTERVALS_PER_SEC) - .and_then(|i| i.checked_add(d.subsec_nanos() as u64 / 100)) - .and_then(|i| i.try_into().ok()) +fn checked_dur2intervals(dur: &Duration) -> Option<i64> { + dur.as_secs() + .checked_mul(INTERVALS_PER_SEC)? + .checked_add(dur.subsec_nanos() as u64 / 100)? + .try_into() + .ok() } fn dur2intervals(d: &Duration) -> i64 { |
