diff options
| author | kennytm <kennytm@gmail.com> | 2017-12-20 21:21:58 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-12-20 21:21:58 +0800 |
| commit | 5e98112af4e8b4068bcee6a54e28031fc92d6a3f (patch) | |
| tree | 5d79493d556f052fb6954cc08a593e272b2faea2 /src/libstd | |
| parent | f35bb15fc6fc764af9d97b240b133343b82a7e24 (diff) | |
| parent | 1d5ead453dd96c1040a12cbb3b0180027af165c9 (diff) | |
| download | rust-5e98112af4e8b4068bcee6a54e28031fc92d6a3f.tar.gz rust-5e98112af4e8b4068bcee6a54e28031fc92d6a3f.zip | |
Rollup merge of #46828 - vi:hash_for_systemtime_instant, r=dtolnay
Add Hash impl for SystemTime and Instant Closes #46670. Not sure how to actually test non-Linux platforms. `rustc --target=i686-pc-windows-gnu --crate-name std --crate-type rlib src/libstd/lib.rs -o q.rlib` works a bit, but for Redox I'm not sure what to do. r? @dtolnay
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/sys/redox/time.rs | 12 | ||||
| -rw-r--r-- | src/libstd/sys/unix/time.rs | 16 | ||||
| -rw-r--r-- | src/libstd/sys/wasm/time.rs | 4 | ||||
| -rw-r--r-- | src/libstd/sys/windows/time.rs | 9 | ||||
| -rw-r--r-- | src/libstd/time/mod.rs | 4 |
5 files changed, 34 insertions, 11 deletions
diff --git a/src/libstd/sys/redox/time.rs b/src/libstd/sys/redox/time.rs index 6c071afd42d..cf798500b7f 100644 --- a/src/libstd/sys/redox/time.rs +++ b/src/libstd/sys/redox/time.rs @@ -13,6 +13,7 @@ use fmt; use sys::{cvt, syscall}; use time::Duration; use convert::TryInto; +use core::hash::{Hash, Hasher}; const NSEC_PER_SEC: u64 = 1_000_000_000; @@ -110,12 +111,19 @@ impl Ord for Timespec { } } -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +impl Hash for Timespec { + fn hash<H : Hasher>(&self, state: &mut H) { + self.t.tv_sec.hash(state); + self.t.tv_nsec.hash(state); + } +} + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct Instant { t: Timespec, } -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SystemTime { t: Timespec, } diff --git a/src/libstd/sys/unix/time.rs b/src/libstd/sys/unix/time.rs index 837cd7292e2..83127935909 100644 --- a/src/libstd/sys/unix/time.rs +++ b/src/libstd/sys/unix/time.rs @@ -11,6 +11,7 @@ use cmp::Ordering; use libc; use time::Duration; +use core::hash::{Hash, Hasher}; pub use self::inner::{Instant, SystemTime, UNIX_EPOCH}; use convert::TryInto; @@ -111,6 +112,13 @@ impl Ord for Timespec { } } +impl Hash for Timespec { + fn hash<H : Hasher>(&self, state: &mut H) { + self.t.tv_sec.hash(state); + self.t.tv_nsec.hash(state); + } +} + #[cfg(any(target_os = "macos", target_os = "ios"))] mod inner { use fmt; @@ -123,12 +131,12 @@ mod inner { use super::NSEC_PER_SEC; use super::Timespec; - #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] pub struct Instant { t: u64 } - #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SystemTime { t: Timespec, } @@ -255,12 +263,12 @@ mod inner { use super::Timespec; - #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct Instant { t: Timespec, } - #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SystemTime { t: Timespec, } diff --git a/src/libstd/sys/wasm/time.rs b/src/libstd/sys/wasm/time.rs index 7907720e4da..c269def98f6 100644 --- a/src/libstd/sys/wasm/time.rs +++ b/src/libstd/sys/wasm/time.rs @@ -11,10 +11,10 @@ use fmt; use time::Duration; -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] pub struct Instant; -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SystemTime; pub const UNIX_EPOCH: SystemTime = SystemTime; diff --git a/src/libstd/sys/windows/time.rs b/src/libstd/sys/windows/time.rs index 1be29b5139a..07e64d386a1 100644 --- a/src/libstd/sys/windows/time.rs +++ b/src/libstd/sys/windows/time.rs @@ -17,11 +17,12 @@ use sys::cvt; use sys_common::mul_div_u64; use time::Duration; use convert::TryInto; +use core::hash::{Hash, Hasher}; const NANOS_PER_SEC: u64 = 1_000_000_000; const INTERVALS_PER_SEC: u64 = NANOS_PER_SEC / 100; -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug)] +#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Hash)] pub struct Instant { t: c::LARGE_INTEGER, } @@ -173,6 +174,12 @@ impl From<c::FILETIME> for SystemTime { } } +impl Hash for SystemTime { + fn hash<H : Hasher>(&self, state: &mut H) { + self.intervals().hash(state) + } +} + fn dur2intervals(d: &Duration) -> i64 { d.as_secs() .checked_mul(INTERVALS_PER_SEC) diff --git a/src/libstd/time/mod.rs b/src/libstd/time/mod.rs index d4993ded843..6ce3b3e8a00 100644 --- a/src/libstd/time/mod.rs +++ b/src/libstd/time/mod.rs @@ -66,7 +66,7 @@ mod duration; /// println!("{}", now.elapsed().as_secs()); /// } /// ``` -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] #[stable(feature = "time2", since = "1.8.0")] pub struct Instant(time::Instant); @@ -118,7 +118,7 @@ pub struct Instant(time::Instant); /// } /// } /// ``` -#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] #[stable(feature = "time2", since = "1.8.0")] pub struct SystemTime(time::SystemTime); |
