core/time: Add Duration methods for zero
This patch adds two methods to `Duration`. The first, `Duration::zero`, provides a `const` constructor for getting an zero-length duration. This is also what `Default` provides (this was clarified in the docs), though `default` is not `const`. The second, `Duration::is_zero`, returns true if a `Duration` spans no time (i.e., because its components are all zero). Previously, the way to do this was either to compare both `as_secs` and `subsec_nanos` to 0, to compare against `Duration::new(0, 0)`, or to use the `u128` method `as_nanos`, none of which were particularly elegant.
This commit is contained in:
parent
033013cab3
commit
3ff5879f8d
@ -31,7 +31,7 @@
|
||||
/// the number of nanoseconds.
|
||||
///
|
||||
/// `Duration`s implement many common traits, including [`Add`], [`Sub`], and other
|
||||
/// [`ops`] traits.
|
||||
/// [`ops`] traits. It implements `Default` by returning a zero-length `Duration`.
|
||||
///
|
||||
/// [`Add`]: ../../std/ops/trait.Add.html
|
||||
/// [`Sub`]: ../../std/ops/trait.Sub.html
|
||||
@ -223,6 +223,47 @@ pub const fn from_nanos(nanos: u64) -> Duration {
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a new `Duration` that spans no time.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::time::Duration;
|
||||
///
|
||||
/// let duration = Duration::zero();
|
||||
/// assert!(duration.is_zero());
|
||||
///
|
||||
/// const IMMEDIATELY: Duration = Duration::zero();
|
||||
/// assert!(IMMEDIATELY.is_zero());
|
||||
/// ```
|
||||
#[unstable(feature = "duration_zero", issue = "none")]
|
||||
#[inline]
|
||||
pub const fn zero() -> Duration {
|
||||
Duration { secs: 0, nanos: 0 }
|
||||
}
|
||||
|
||||
/// Returns true if this `Duration` spans no time.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::time::Duration;
|
||||
///
|
||||
/// assert!(Duration::zero().is_zero());
|
||||
/// assert!(Duration::new(0, 0).is_zero());
|
||||
/// assert!(Duration::from_nanos(0).is_zero());
|
||||
/// assert!(Duration::from_secs(0).is_zero());
|
||||
///
|
||||
/// assert!(!Duration::new(1, 1).is_zero());
|
||||
/// assert!(!Duration::from_nanos(1).is_zero());
|
||||
/// assert!(!Duration::from_secs(1).is_zero());
|
||||
/// ```
|
||||
#[unstable(feature = "duration_zero", issue = "none")]
|
||||
#[inline]
|
||||
pub const fn is_zero(&self) -> bool {
|
||||
self.secs == 0 && self.nanos == 0
|
||||
}
|
||||
|
||||
/// Returns the number of _whole_ seconds contained by this `Duration`.
|
||||
///
|
||||
/// The returned value does not include the fractional (nanosecond) part of the
|
||||
|
Loading…
Reference in New Issue
Block a user