use crate::Aligned;
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash)]
pub struct ShiftIsize<const N: isize>(isize);
impl<const N: isize> ShiftIsize<N> {
#[inline]
pub fn new(val: isize) -> Self {
Self(val << N)
}
#[inline]
pub fn get(&self) -> isize {
self.0 >> N
}
#[inline]
pub fn set(&mut self, val: isize) {
self.0 = val << N;
}
}
unsafe impl<const N: isize> Aligned for ShiftIsize<N> {
const ALIGNMENT: usize = 1 << N;
}
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash)]
pub struct ShiftUsize<const N: usize>(usize);
impl<const N: usize> ShiftUsize<N> {
#[inline]
pub fn new(val: usize) -> Self {
Self(val << N)
}
#[inline]
pub fn get(&self) -> usize {
self.0 >> N
}
#[inline]
pub fn set(&mut self, val: usize) {
self.0 = val << N;
}
}
unsafe impl<const N: usize> Aligned for ShiftUsize<N> {
const ALIGNMENT: usize = 1 << N;
}