use core::mem::{align_of, size_of};
use self::super::error::UnalignedError;
fn validate_alignment<S, T>(data: &[S]) -> Result<(), usize> {
let ptr = data.as_ptr();
let offset = ptr as usize % align_of::<T>();
if offset > 0 {
Err(size_of::<T>() - offset)
} else {
Ok(())
}
}
pub fn check_alignment<S, T>(data: &[S]) -> Result<(), UnalignedError<S, T>> {
validate_alignment::<_, T>(data).map_err(move |off| UnalignedError::new(off, data))
}
pub fn check_alignment_mut<S, T>(data: &mut [S]) -> Result<&mut [S], UnalignedError<S, T>> {
match validate_alignment::<_, T>(data) {
Ok(()) => Ok(data),
Err(off) => Err(UnalignedError::new(off, data)),
}
}