use core::ptr;
macro_rules! partial_ord_chain {
($($lhs:expr => $rhs:expr),* $(,)?) => {{
$({
let ordering = $lhs.partial_cmp(&$rhs)?;
if ordering != core::cmp::Ordering::Equal { return Some(ordering); }
})*
Some(core::cmp::Ordering::Equal)
}};
}
macro_rules! ord_chain {
($($lhs:expr => $rhs:expr),* $(,)?) => {{
$({
let ordering = $lhs.cmp(&$rhs);
if ordering != core::cmp::Ordering::Equal { return ordering; }
})*
core::cmp::Ordering::Equal
}};
}
pub fn set_ptr_value<T: ?Sized>(mut ptr: *const T, value: *const u8) -> *const T {
let ptr_ptr: *mut *const T = &mut ptr as *mut *const T;
let thin_ptr_ptr = ptr_ptr as *mut *const u8;
unsafe { ptr::write(thin_ptr_ptr, value) }
ptr
}
pub fn set_ptr_value_mut<T: ?Sized>(ptr: *mut T, value: *mut u8) -> *mut T {
set_ptr_value(ptr, value) as *mut T
}