mv compiler to compiler/
This commit is contained in:
parent
db534b3ac2
commit
9e5f7d5631
1686 changed files with 941 additions and 1051 deletions
37
compiler/rustc_data_structures/src/ptr_key.rs
Normal file
37
compiler/rustc_data_structures/src/ptr_key.rs
Normal file
|
@ -0,0 +1,37 @@
|
|||
use std::ops::Deref;
|
||||
use std::{hash, ptr};
|
||||
|
||||
/// A wrapper around reference that compares and hashes like a pointer.
|
||||
/// Can be used as a key in sets/maps indexed by pointers to avoid `unsafe`.
|
||||
#[derive(Debug)]
|
||||
pub struct PtrKey<'a, T>(pub &'a T);
|
||||
|
||||
impl<'a, T> Clone for PtrKey<'a, T> {
|
||||
fn clone(&self) -> Self {
|
||||
*self
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> Copy for PtrKey<'a, T> {}
|
||||
|
||||
impl<'a, T> PartialEq for PtrKey<'a, T> {
|
||||
fn eq(&self, rhs: &Self) -> bool {
|
||||
ptr::eq(self.0, rhs.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> Eq for PtrKey<'a, T> {}
|
||||
|
||||
impl<'a, T> hash::Hash for PtrKey<'a, T> {
|
||||
fn hash<H: hash::Hasher>(&self, hasher: &mut H) {
|
||||
(self.0 as *const T).hash(hasher)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> Deref for PtrKey<'a, T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.0
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue