Use on-disk-hash-table format for DefPathHashMap in hir::definitions.
This commit is contained in:
37
compiler/rustc_hir/src/def_path_hash_map.rs
Normal file
37
compiler/rustc_hir/src/def_path_hash_map.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use rustc_data_structures::fingerprint::Fingerprint;
|
||||
use rustc_span::def_id::{DefIndex, DefPathHash};
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct Config;
|
||||
|
||||
impl odht::Config for Config {
|
||||
type Key = DefPathHash;
|
||||
type Value = DefIndex;
|
||||
|
||||
type EncodedKey = [u8; 16];
|
||||
type EncodedValue = [u8; 4];
|
||||
|
||||
type H = odht::UnHashFn;
|
||||
|
||||
#[inline]
|
||||
fn encode_key(k: &DefPathHash) -> [u8; 16] {
|
||||
k.0.to_le_bytes()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn encode_value(v: &DefIndex) -> [u8; 4] {
|
||||
v.as_u32().to_le_bytes()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn decode_key(k: &[u8; 16]) -> DefPathHash {
|
||||
DefPathHash(Fingerprint::from_le_bytes(*k))
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn decode_value(v: &[u8; 4]) -> DefIndex {
|
||||
DefIndex::from_u32(u32::from_le_bytes(*v))
|
||||
}
|
||||
}
|
||||
|
||||
pub type DefPathHashMap = odht::HashTableOwned<Config>;
|
||||
Reference in New Issue
Block a user