Safe memory comparison between types.
Types found in this crate serve as safe wrappers around
This crate is available on crates.io and can be used by adding the
following to your project's
[dependencies] mem_cmp = "0.1.4"
and this to your crate root:
extern crate mem_cmp;
MemOrd trait provides convenience around the result of a
call by returning an
If the only thing that matters is equality,
MemEq is also available.
use mem_cmp::*; let a = [0u8; 256]; let b = [0u32; 64]; let c = [4u32; 64]; assert!(a.mem_eq(&b)); assert!(a.mem_neq(&c)); // Also works with types of different sizes: assert!(a.mem_neq(&42));
Generally, comparing memory directly is safe. However, there are cases where undefined behavior may be encountered.
Types with padding:
One such case is with types where the inner values are padded for alignment. Such a type would be
(u8, u32). It has an alignment of 4 bytes, resulting in 3 bytes of padding between the first value and the second. It's up to the compiler to decide what the byte values are for the padding.
Trait for equality comparisons performed over bytes directly.
Trait for values whose bytes can be compared directly.