1#[derive(Copy, Clone, Eq, PartialOrd, Ord)]
8pub struct Hash64(u64);
9
10impl re_byte_size::SizeBytes for Hash64 {
11 #[inline]
12 fn heap_size_bytes(&self) -> u64 {
13 0
14 }
15}
16
17impl Hash64 {
18 pub const ZERO: Self = Self(0);
19
20 pub fn hash(value: impl std::hash::Hash) -> Self {
21 Self(hash(value))
22 }
23
24 #[inline]
26 pub fn from_u64(i: u64) -> Self {
27 Self(i)
28 }
29
30 #[inline]
31 pub fn hash64(&self) -> u64 {
32 self.0
33 }
34}
35
36impl std::hash::Hash for Hash64 {
37 #[inline]
38 fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
39 state.write_u64(self.0);
40 }
41}
42
43impl std::cmp::PartialEq for Hash64 {
44 #[inline]
45 fn eq(&self, other: &Self) -> bool {
46 self.0 == other.0
47 }
48}
49
50impl nohash_hasher::IsEnabled for Hash64 {}
51
52impl std::fmt::Debug for Hash64 {
53 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
54 f.write_str(&format!("Hash64({:016X})", self.0))
55 }
56}
57
58pub const HASH_RANDOM_STATE: ahash::RandomState = ahash::RandomState::with_seeds(0, 1, 2, 3);
61
62#[inline]
64fn hash(value: impl std::hash::Hash) -> u64 {
65 HASH_RANDOM_STATE.hash_one(value)
67}