Miscellaneous inlining improvements

This commit is contained in:
Tomasz Miąsko 2021-06-01 00:00:00 +00:00
parent c4f186f0ea
commit c1f6495b8e
17 changed files with 45 additions and 0 deletions

View file

@ -90,9 +90,11 @@ pub unsafe trait Tag: Copy {
unsafe impl<T> Pointer for Box<T> {
const BITS: usize = std::mem::align_of::<T>().trailing_zeros() as usize;
#[inline]
fn into_usize(self) -> usize {
Box::into_raw(self) as usize
}
#[inline]
unsafe fn from_usize(ptr: usize) -> Self {
Box::from_raw(ptr as *mut T)
}
@ -104,9 +106,11 @@ unsafe impl<T> Pointer for Box<T> {
unsafe impl<T> Pointer for Rc<T> {
const BITS: usize = std::mem::align_of::<T>().trailing_zeros() as usize;
#[inline]
fn into_usize(self) -> usize {
Rc::into_raw(self) as usize
}
#[inline]
unsafe fn from_usize(ptr: usize) -> Self {
Rc::from_raw(ptr as *const T)
}
@ -118,9 +122,11 @@ unsafe impl<T> Pointer for Rc<T> {
unsafe impl<T> Pointer for Arc<T> {
const BITS: usize = std::mem::align_of::<T>().trailing_zeros() as usize;
#[inline]
fn into_usize(self) -> usize {
Arc::into_raw(self) as usize
}
#[inline]
unsafe fn from_usize(ptr: usize) -> Self {
Arc::from_raw(ptr as *const T)
}
@ -132,9 +138,11 @@ unsafe impl<T> Pointer for Arc<T> {
unsafe impl<'a, T: 'a> Pointer for &'a T {
const BITS: usize = std::mem::align_of::<T>().trailing_zeros() as usize;
#[inline]
fn into_usize(self) -> usize {
self as *const T as usize
}
#[inline]
unsafe fn from_usize(ptr: usize) -> Self {
&*(ptr as *const T)
}
@ -145,9 +153,11 @@ unsafe impl<'a, T: 'a> Pointer for &'a T {
unsafe impl<'a, T: 'a> Pointer for &'a mut T {
const BITS: usize = std::mem::align_of::<T>().trailing_zeros() as usize;
#[inline]
fn into_usize(self) -> usize {
self as *mut T as usize
}
#[inline]
unsafe fn from_usize(ptr: usize) -> Self {
&mut *(ptr as *mut T)
}