[−][src]Trait rustc_ap_rustc_data_structures::stable_hasher::HashStable
Something that implements HashStable<CTX> can be hashed in a way that is
stable across multiple compilation sessions.
Note that HashStable imposes rather more strict requirements than usual
hash functions:
-
Stable hashes are sometimes used as identifiers. Therefore they must conform to the corresponding
PartialEqimplementations:x == yimplieshash_stable(x) == hash_stable(y), andx != yimplieshash_stable(x) != hash_stable(y).
That second condition is usually not required for hash functions (e.g.
Hash). In practice this means thathash_stablemust feed any information into the hasher that aPartialEqcomparision takes into account. See #49300 for an example where violating this invariant has caused trouble in the past. -
hash_stable()must be independent of the current compilation session. E.g. they must not hash memory addresses or other things that are "randomly" assigned per compilation session. -
hash_stable()must be independent of the host architecture. TheStableHashertakes care of endianness andisize/usizeplatform differences.
Required methods
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)
Implementations on Foreign Types
impl<CTX> HashStable<CTX> for i8[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for i16[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for i32[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for i64[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for isize[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for u8[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for u16[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for u32[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for u64[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for usize[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for u128[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for i128[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for char[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for ()[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for NonZeroU32[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for f32[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for f64[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for Ordering[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T1: HashStable<CTX>, CTX> HashStable<CTX> for (T1,)[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T1: HashStable<CTX>, T2: HashStable<CTX>, CTX> HashStable<CTX> for (T1, T2)[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T1, T2, T3, CTX> HashStable<CTX> for (T1, T2, T3) where
T1: HashStable<CTX>,
T2: HashStable<CTX>,
T3: HashStable<CTX>, [src]
T1: HashStable<CTX>,
T2: HashStable<CTX>,
T3: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T1, T2, T3, T4, CTX> HashStable<CTX> for (T1, T2, T3, T4) where
T1: HashStable<CTX>,
T2: HashStable<CTX>,
T3: HashStable<CTX>,
T4: HashStable<CTX>, [src]
T1: HashStable<CTX>,
T2: HashStable<CTX>,
T3: HashStable<CTX>,
T4: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T: HashStable<CTX>, CTX> HashStable<CTX> for [T][src]
default fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T: HashStable<CTX>, CTX> HashStable<CTX> for Vec<T>[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<K, V, R, CTX> HashStable<CTX> for IndexMap<K, V, R> where
K: HashStable<CTX> + Eq + Hash,
V: HashStable<CTX>,
R: BuildHasher, [src]
K: HashStable<CTX> + Eq + Hash,
V: HashStable<CTX>,
R: BuildHasher,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<K, R, CTX> HashStable<CTX> for IndexSet<K, R> where
K: HashStable<CTX> + Eq + Hash,
R: BuildHasher, [src]
K: HashStable<CTX> + Eq + Hash,
R: BuildHasher,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<A, CTX> HashStable<CTX> for SmallVec<[A; 1]> where
A: HashStable<CTX>, [src]
A: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T: ?Sized + HashStable<CTX>, CTX> HashStable<CTX> for Box<T>[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T: ?Sized + HashStable<CTX>, CTX> HashStable<CTX> for Arc<T>[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for str[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for String[src]
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for bool[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T, CTX> HashStable<CTX> for Option<T> where
T: HashStable<CTX>, [src]
T: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T1, T2, CTX> HashStable<CTX> for Result<T1, T2> where
T1: HashStable<CTX>,
T2: HashStable<CTX>, [src]
T1: HashStable<CTX>,
T2: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<'a, T: ?Sized, CTX> HashStable<CTX> for &'a T where
T: HashStable<CTX>, [src]
T: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T, CTX> HashStable<CTX> for Discriminant<T>[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for Path[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX> HashStable<CTX> for PathBuf[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<K, V, R, HCX> HashStable<HCX> for HashMap<K, V, R> where
K: ToStableHashKey<HCX> + Eq + Hash,
V: HashStable<HCX>,
R: BuildHasher, [src]
K: ToStableHashKey<HCX> + Eq + Hash,
V: HashStable<HCX>,
R: BuildHasher,
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)
impl<K, R, HCX> HashStable<HCX> for HashSet<K, R> where
K: ToStableHashKey<HCX> + Eq + Hash,
R: BuildHasher, [src]
K: ToStableHashKey<HCX> + Eq + Hash,
R: BuildHasher,
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)
impl<K, V, HCX> HashStable<HCX> for BTreeMap<K, V> where
K: ToStableHashKey<HCX>,
V: HashStable<HCX>, [src]
K: ToStableHashKey<HCX>,
V: HashStable<HCX>,
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)
impl<K, HCX> HashStable<HCX> for BTreeSet<K> where
K: ToStableHashKey<HCX>, [src]
K: ToStableHashKey<HCX>,
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)
Implementors
impl<CTX> HashStable<CTX> for Fingerprint[src]
fn hash_stable<W: StableHasherResult>(
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
_: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<CTX, T> HashStable<CTX> for TransitiveRelation<T> where
T: HashStable<CTX> + Eq + Debug + Clone + Hash, [src]
T: HashStable<CTX> + Eq + Debug + Clone + Hash,
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<I: Idx, CTX> HashStable<CTX> for BitSet<I>[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<I: Idx, T, CTX> HashStable<CTX> for IndexVec<I, T> where
T: HashStable<CTX>, [src]
T: HashStable<CTX>,
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<R: Idx, C: Idx, CTX> HashStable<CTX> for BitMatrix<R, C>[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T> HashStable<T> for Svh[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut T,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut T,
hasher: &mut StableHasher<W>
)
impl<T, HCX> HashStable<HCX> for StableVec<T> where
T: HashStable<HCX> + ToStableHashKey<HCX>, [src]
T: HashStable<HCX> + ToStableHashKey<HCX>,
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut HCX,
hasher: &mut StableHasher<W>
)
impl<T: HashStable<CTX>, CTX> HashStable<CTX> for ThinVec<T>[src]
fn hash_stable<W: StableHasherResult>(
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
hcx: &mut CTX,
hasher: &mut StableHasher<W>
)
impl<T: ?Sized + HashStable<CTX>, CTX> HashStable<CTX> for Rc<T>[src]
fn hash_stable<W: StableHasherResult>(
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)[src]
&self,
ctx: &mut CTX,
hasher: &mut StableHasher<W>
)