Implement Idx for OwnerId.

This commit is contained in:
Camille GILLOT 2022-10-31 16:06:56 +00:00
parent 024207ab43
commit 07f1948043
2 changed files with 15 additions and 1 deletions

View File

@ -1,4 +1,4 @@
use crate::def_id::{DefId, LocalDefId, CRATE_DEF_ID}; use crate::def_id::{DefId, DefIndex, LocalDefId, CRATE_DEF_ID};
use rustc_data_structures::stable_hasher::{HashStable, StableHasher, ToStableHashKey}; use rustc_data_structures::stable_hasher::{HashStable, StableHasher, ToStableHashKey};
use rustc_span::{def_id::DefPathHash, HashStableContext}; use rustc_span::{def_id::DefPathHash, HashStableContext};
use std::fmt; use std::fmt;
@ -22,6 +22,18 @@ pub fn to_def_id(self) -> DefId {
} }
} }
impl rustc_index::vec::Idx for OwnerId {
#[inline]
fn new(idx: usize) -> Self {
OwnerId { def_id: LocalDefId { local_def_index: DefIndex::from_usize(idx) } }
}
#[inline]
fn index(self) -> usize {
self.def_id.local_def_index.as_usize()
}
}
impl<CTX: HashStableContext> HashStable<CTX> for OwnerId { impl<CTX: HashStableContext> HashStable<CTX> for OwnerId {
#[inline] #[inline]
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) { fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {

View File

@ -17,10 +17,12 @@ pub trait Idx: Copy + 'static + Eq + PartialEq + Debug + Hash {
fn index(self) -> usize; fn index(self) -> usize;
#[inline]
fn increment_by(&mut self, amount: usize) { fn increment_by(&mut self, amount: usize) {
*self = self.plus(amount); *self = self.plus(amount);
} }
#[inline]
fn plus(self, amount: usize) -> Self { fn plus(self, amount: usize) -> Self {
Self::new(self.index() + amount) Self::new(self.index() + amount)
} }