mod private
{
#[ allow( unsafe_code ) ]
pub fn same_data< T1: ?Sized, T2: ?Sized >(src1: &T1, src2: &T2) -> bool
{
extern "C" {
fn memcmp(s1: *const u8, s2: *const u8, n: usize) -> i32;
}
let mem1 = core ::ptr ::from_ref :: < T1 >(src1).cast :: < u8 >();
let mem2 = core ::ptr ::from_ref :: < T2 >(src2).cast :: < u8 >();
if !same_size(src1, src2)
{
return false;
}
unsafe { memcmp(mem1, mem2, core ::mem ::size_of_val(src1)) == 0 }
}
pub fn same_ptr< T1: ?Sized, T2: ?Sized >(src1: &T1, src2: &T2) -> bool
{
let mem1 = core ::ptr ::from_ref :: < T1 >(src1).cast :: < () >();
let mem2 = core ::ptr ::from_ref :: < T2 >(src2).cast :: < () >();
mem1 == mem2
}
pub fn same_size< T1: ?Sized, T2: ?Sized >(src1: &T1, src2: &T2) -> bool
{
core ::mem ::size_of_val(src1) == core ::mem ::size_of_val(src2)
}
pub fn same_region< T1: ?Sized, T2: ?Sized >(src1: &T1, src2: &T2) -> bool
{
same_ptr(src1, src2) && same_size(src1, src2)
}
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use own :: *;
#[ allow( unused_imports ) ]
pub mod own
{
use super :: *;
#[ doc( inline ) ]
pub use super :: { orphan :: * };
}
#[ allow( unused_imports ) ]
pub mod orphan
{
use super :: *;
#[ doc( inline ) ]
pub use super :: { exposed :: *, private ::same_data, private ::same_ptr, private ::same_size, private ::same_region };
}
#[ allow( unused_imports ) ]
pub mod exposed
{
use super :: *;
pub use super ::super ::mem;
#[ doc( inline ) ]
pub use prelude :: *;
}
#[ allow( unused_imports ) ]
pub mod prelude
{
use super :: *;
}