//! Implementation of `FromBits` and `IntoBits`. /// Safe lossless bitwise conversion from `T` to `Self`. #[cfg_attr(doc_cfg, doc(cfg(feature = "into_bits")))] pub trait FromBits: crate::marker::Sized { /// Safe lossless bitwise transmute from `T` to `Self`. fn from_bits(t: T) -> Self; } /// Safe lossless bitwise conversion from `Self` to `T`. #[cfg_attr(doc_cfg, doc(cfg(feature = "into_bits")))] pub trait IntoBits: crate::marker::Sized { /// Safe lossless bitwise transmute from `self` to `T`. fn into_bits(self) -> T; } /// `FromBits` implies `IntoBits`. impl IntoBits for T where U: FromBits, { #[inline] fn into_bits(self) -> U { debug_assert!(crate::mem::size_of::() == crate::mem::size_of::()); U::from_bits(self) } } /// `FromBits` and `IntoBits` are reflexive impl FromBits for T { #[inline] fn from_bits(t: Self) -> Self { t } } #[macro_use] mod macros; mod v16; pub use self::v16::*; mod v32; pub use self::v32::*; mod v64; pub use self::v64::*; mod v128; pub use self::v128::*; mod v256; pub use self::v256::*; mod v512; pub use self::v512::*; mod arch_specific; pub use self::arch_specific::*;