From 43baa2c0419709c13f7764212596f94d9900ba36 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sun, 22 Apr 2018 15:39:28 -0400 Subject: [PATCH 1/7] Add as_nanos function to duration --- src/libcore/time.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index e22fe450bb1f6..8ebdbbd837090 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -263,6 +263,22 @@ impl Duration { #[inline] pub fn subsec_nanos(&self) -> u32 { self.nanos } + /// Returns the total number of nanoseconds contained by this `Duration`. + /// + /// # Examples + /// + /// ``` + /// use std::time::Duration; + /// + /// let duration = Duration::new(5, 730023852); + /// assert_eq!(duration.as_nanos(), 5730023852); + /// ``` + #[unstable(feature = "duration_nanos", issue = "0")] + #[inline] + pub fn as_nanos(&self) -> u128 { + self.secs as u128 * 1000_000_000 + self.nanos as u128 + } + /// Checked `Duration` addition. Computes `self + other`, returning [`None`] /// if overflow occurred. /// From 57b2067b115ad062cd75232e5c824cb8bbd34478 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sun, 22 Apr 2018 15:43:52 -0400 Subject: [PATCH 2/7] Use NANOS_PER_SEC constant --- src/libcore/time.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index 8ebdbbd837090..807a152a2aa64 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -276,7 +276,7 @@ impl Duration { #[unstable(feature = "duration_nanos", issue = "0")] #[inline] pub fn as_nanos(&self) -> u128 { - self.secs as u128 * 1000_000_000 + self.nanos as u128 + self.secs as u128 * NANOS_PER_SEC as u128 + self.nanos as u128 } /// Checked `Duration` addition. Computes `self + other`, returning [`None`] From dc9e27d7488bcd28b7cc8ecf6c5ae349752faaf0 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sun, 22 Apr 2018 15:52:32 -0400 Subject: [PATCH 3/7] Add issue number --- src/libcore/time.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index 807a152a2aa64..4c9c3b30b51ce 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -273,7 +273,7 @@ impl Duration { /// let duration = Duration::new(5, 730023852); /// assert_eq!(duration.as_nanos(), 5730023852); /// ``` - #[unstable(feature = "duration_nanos", issue = "0")] + #[unstable(feature = "duration_nanos", issue = "50167")] #[inline] pub fn as_nanos(&self) -> u128 { self.secs as u128 * NANOS_PER_SEC as u128 + self.nanos as u128 From b66ab1ad61b887cde9370b83149d4ec7789729fb Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sun, 22 Apr 2018 17:19:35 -0400 Subject: [PATCH 4/7] Doctest of feature requires that feature --- src/libcore/time.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index 4c9c3b30b51ce..b2971e391cd76 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -268,6 +268,7 @@ impl Duration { /// # Examples /// /// ``` + /// # #![feature(duration_nanos)] /// use std::time::Duration; /// /// let duration = Duration::new(5, 730023852); From 799eda4128ad4517782de261a62d4284268de050 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Tue, 24 Apr 2018 15:17:06 -0400 Subject: [PATCH 5/7] Issue number should be for tracking issue not PR --- src/libcore/time.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index b2971e391cd76..f49917f848a07 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -274,7 +274,7 @@ impl Duration { /// let duration = Duration::new(5, 730023852); /// assert_eq!(duration.as_nanos(), 5730023852); /// ``` - #[unstable(feature = "duration_nanos", issue = "50167")] + #[unstable(feature = "duration_nanos", issue = "50202")] #[inline] pub fn as_nanos(&self) -> u128 { self.secs as u128 * NANOS_PER_SEC as u128 + self.nanos as u128 From 99f5136f9e2df5d60b371e9e19d2f6efe0d2e59e Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sat, 19 May 2018 15:18:07 -0400 Subject: [PATCH 6/7] Add as_micros and as_millis methods --- src/libcore/time.rs | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index f49917f848a07..f43d2db51e72e 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -263,18 +263,52 @@ impl Duration { #[inline] pub fn subsec_nanos(&self) -> u32 { self.nanos } + /// Returns the total number of milliseconds contained by this `Duration`. + /// + /// # Examples + /// + /// ``` + /// # #![feature(duration_as_u128)] + /// use std::time::Duration; + /// + /// let duration = Duration::new(5, 730023852); + /// assert_eq!(duration.as_millis(), 5730); + /// ``` + #[unstable(feature = "duration_as_u128", issue = "50202")] + #[inline] + pub fn as_millis(&self) -> u128 { + self.secs as u128 * MILLIS_PER_SEC as u128 + self.nanos as u128 / NANOS_PER_MILLI as u128 + } + + /// Returns the total number of microseconds contained by this `Duration`. + /// + /// # Examples + /// + /// ``` + /// # #![feature(duration_as_u128)] + /// use std::time::Duration; + /// + /// let duration = Duration::new(5, 730023852); + /// assert_eq!(duration.as_micros(), 5730023); + /// ``` + #[unstable(feature = "duration_as_u128", issue = "50202")] + #[inline] + pub fn as_micros(&self) -> u128 { + self.secs as u128 * MICROS_PER_SEC as u128 + self.nanos as u128 / NANOS_PER_MICRO as u128 + } + /// Returns the total number of nanoseconds contained by this `Duration`. /// /// # Examples /// /// ``` - /// # #![feature(duration_nanos)] + /// # #![feature(duration_as_u128)] /// use std::time::Duration; /// /// let duration = Duration::new(5, 730023852); /// assert_eq!(duration.as_nanos(), 5730023852); /// ``` - #[unstable(feature = "duration_nanos", issue = "50202")] + #[unstable(feature = "duration_as_u128", issue = "50202")] #[inline] pub fn as_nanos(&self) -> u128 { self.secs as u128 * NANOS_PER_SEC as u128 + self.nanos as u128 From fc895665c9a6ba9bc0be7844cb7162797b557a34 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Mon, 28 May 2018 19:01:50 -0400 Subject: [PATCH 7/7] Avoid 128-bit arithmetic where possible --- src/libcore/time.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/time.rs b/src/libcore/time.rs index f43d2db51e72e..72b03cd0965f5 100644 --- a/src/libcore/time.rs +++ b/src/libcore/time.rs @@ -277,7 +277,7 @@ impl Duration { #[unstable(feature = "duration_as_u128", issue = "50202")] #[inline] pub fn as_millis(&self) -> u128 { - self.secs as u128 * MILLIS_PER_SEC as u128 + self.nanos as u128 / NANOS_PER_MILLI as u128 + self.secs as u128 * MILLIS_PER_SEC as u128 + (self.nanos / NANOS_PER_MILLI) as u128 } /// Returns the total number of microseconds contained by this `Duration`. @@ -294,7 +294,7 @@ impl Duration { #[unstable(feature = "duration_as_u128", issue = "50202")] #[inline] pub fn as_micros(&self) -> u128 { - self.secs as u128 * MICROS_PER_SEC as u128 + self.nanos as u128 / NANOS_PER_MICRO as u128 + self.secs as u128 * MICROS_PER_SEC as u128 + (self.nanos / NANOS_PER_MICRO) as u128 } /// Returns the total number of nanoseconds contained by this `Duration`.