use core::ptr::NonNull;
use mirai_annotations::debug_checked_precondition;
pub(crate) fn unlikely(b: bool) -> bool {
cfg_if::cfg_if! {
if #[cfg(feature = "nightly_core_intrinsics")] {
core::intrinsics::unlikely(b)
} else {
b
}
}
}
pub(crate) fn nonnull_as_mut_ptr<T>(ptr: NonNull<[T]>) -> *mut T {
ptr.as_ptr() as *mut T
}
pub(crate) fn align_up_usize(x: usize, div: usize) -> usize {
debug_checked_precondition!(div.is_power_of_two());
x.wrapping_add(div - 1) & !(div - 1)
}
pub(crate) unsafe fn align_up_ptr_mut(ptr: *mut u8, align: usize) -> *mut u8 {
debug_checked_precondition!(align.is_power_of_two());
ptr.map_addr(|addr| align_up_usize(addr, align))
}
pub(crate) fn is_aligned_ptr(ptr: *const u8, align: usize) -> bool {
debug_checked_precondition!(align.is_power_of_two());
ptr.addr() % align == 0
}
pub(crate) unsafe fn large_offset_from(ptr: *const u8, base: *const u8) -> usize {
debug_checked_precondition!(ptr.addr() >= base.addr());
ptr.addr() - base.addr()
}