Auto merge of #120486 - reitermarkus:use-generic-nonzero, r=dtolnay
Use generic `NonZero` internally. Tracking issue: https://github.com/rust-lang/rust/issues/120257
This commit is contained in:
commit
1be468815c
144 changed files with 636 additions and 628 deletions
|
@ -20,6 +20,7 @@
|
|||
#![feature(cfg_match)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(extend_one)]
|
||||
#![feature(generic_nonzero)]
|
||||
#![feature(hash_raw_entry)]
|
||||
#![feature(hasher_prefixfree_extras)]
|
||||
#![feature(lazy_cell)]
|
||||
|
|
|
@ -6,6 +6,7 @@ use std::fmt;
|
|||
use std::hash::{BuildHasher, Hash, Hasher};
|
||||
use std::marker::PhantomData;
|
||||
use std::mem;
|
||||
use std::num::NonZero;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
@ -338,14 +339,14 @@ impl<CTX, T> HashStable<CTX> for PhantomData<T> {
|
|||
fn hash_stable(&self, _ctx: &mut CTX, _hasher: &mut StableHasher) {}
|
||||
}
|
||||
|
||||
impl<CTX> HashStable<CTX> for ::std::num::NonZeroU32 {
|
||||
impl<CTX> HashStable<CTX> for NonZero<u32> {
|
||||
#[inline]
|
||||
fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) {
|
||||
self.get().hash_stable(ctx, hasher)
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX> HashStable<CTX> for ::std::num::NonZeroUsize {
|
||||
impl<CTX> HashStable<CTX> for NonZero<usize> {
|
||||
#[inline]
|
||||
fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher) {
|
||||
self.get().hash_stable(ctx, hasher)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use parking_lot::Mutex;
|
||||
use std::cell::Cell;
|
||||
use std::cell::OnceCell;
|
||||
use std::num::NonZeroUsize;
|
||||
use std::num::NonZero;
|
||||
use std::ops::Deref;
|
||||
use std::ptr;
|
||||
use std::sync::Arc;
|
||||
|
@ -31,7 +31,7 @@ impl RegistryId {
|
|||
}
|
||||
|
||||
struct RegistryData {
|
||||
thread_limit: NonZeroUsize,
|
||||
thread_limit: NonZero<usize>,
|
||||
threads: Mutex<usize>,
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ thread_local! {
|
|||
|
||||
impl Registry {
|
||||
/// Creates a registry which can hold up to `thread_limit` threads.
|
||||
pub fn new(thread_limit: NonZeroUsize) -> Self {
|
||||
pub fn new(thread_limit: NonZero<usize>) -> Self {
|
||||
Registry(Arc::new(RegistryData { thread_limit, threads: Mutex::new(0) }))
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ use std::fmt;
|
|||
use std::hash::{Hash, Hasher};
|
||||
use std::marker::PhantomData;
|
||||
use std::mem::ManuallyDrop;
|
||||
use std::num::NonZeroUsize;
|
||||
use std::num::NonZero;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::ptr::NonNull;
|
||||
|
||||
|
@ -134,7 +134,7 @@ where
|
|||
|
||||
ptr.map_addr(|addr| {
|
||||
// Safety:
|
||||
// - The pointer is `NonNull` => it's address is `NonZeroUsize`
|
||||
// - The pointer is `NonNull` => it's address is `NonZero<usize>`
|
||||
// - `P::BITS` least significant bits are always zero (`Pointer` contract)
|
||||
// - `T::BITS <= P::BITS` (from `Self::ASSERTION`)
|
||||
//
|
||||
|
@ -143,14 +143,14 @@ where
|
|||
// `{non_zero} | packed_tag` can't make the value zero.
|
||||
|
||||
let packed = (addr.get() >> T::BITS) | packed_tag;
|
||||
unsafe { NonZeroUsize::new_unchecked(packed) }
|
||||
unsafe { NonZero::new_unchecked(packed) }
|
||||
})
|
||||
}
|
||||
|
||||
/// Retrieves the original raw pointer from `self.packed`.
|
||||
#[inline]
|
||||
pub(super) fn pointer_raw(&self) -> NonNull<P::Target> {
|
||||
self.packed.map_addr(|addr| unsafe { NonZeroUsize::new_unchecked(addr.get() << T::BITS) })
|
||||
self.packed.map_addr(|addr| unsafe { NonZero::new_unchecked(addr.get() << T::BITS) })
|
||||
}
|
||||
|
||||
/// This provides a reference to the `P` pointer itself, rather than the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue