rendy-memory 0.5.2

Rendy's memory manager
Documentation
pub(crate) fn aligned(value: u64, align: u64) -> u64 {
    debug_assert_ne!(align, 0);
    debug_assert_eq!(align.count_ones(), 1);
    if value == 0 {
        0
    } else {
        1u64 + ((value - 1u64) | (align - 1u64))
    }
}

pub(crate) trait IntegerFitting {
    fn fits_usize(self) -> bool;
    fn fits_isize(self) -> bool;

    fn usize_fits(value: usize) -> bool;
    fn isize_fits(value: isize) -> bool;
}

#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
impl IntegerFitting for u64 {
    fn fits_usize(self) -> bool {
        self <= usize::max_value() as u64
    }
    fn fits_isize(self) -> bool {
        self <= isize::max_value() as u64
    }
    fn usize_fits(_value: usize) -> bool {
        true
    }
    fn isize_fits(value: isize) -> bool {
        value >= 0
    }
}

#[cfg(target_pointer_width = "64")]
impl IntegerFitting for u64 {
    fn fits_usize(self) -> bool {
        true
    }
    fn fits_isize(self) -> bool {
        self <= isize::max_value() as u64
    }
    fn usize_fits(_value: usize) -> bool {
        true
    }
    fn isize_fits(value: isize) -> bool {
        value >= 0
    }
}

#[cfg(not(any(
    target_pointer_width = "16",
    target_pointer_width = "32",
    target_pointer_width = "64"
)))]
impl IntegerFitting for u64 {
    fn fits_usize(self) -> bool {
        true
    }
    fn fits_isize(self) -> bool {
        true
    }
    fn usize_fits(value: usize) -> bool {
        value <= u64::max_value() as usize
    }
    fn isize_fits(value: isize) -> bool {
        value >= 0 && value <= u64::max_value() as isize
    }
}

#[cfg(target_pointer_width = "16")]
impl IntegerFitting for u32 {
    fn fits_usize(self) -> bool {
        self <= usize::max_value() as u32
    }
    fn fits_isize(self) -> bool {
        self <= isize::max_value() as u32
    }
    fn usize_fits(_value: usize) -> bool {
        true
    }
    fn isize_fits(value: isize) -> bool {
        value >= 0
    }
}

#[cfg(target_pointer_width = "32")]
impl IntegerFitting for u32 {
    fn fits_usize(self) -> bool {
        true
    }
    fn fits_isize(self) -> bool {
        self <= isize::max_value() as u32
    }
    fn usize_fits(_value: usize) -> bool {
        true
    }
    fn isize_fits(value: isize) -> bool {
        value >= 0
    }
}

#[cfg(not(any(target_pointer_width = "16", target_pointer_width = "32")))]
impl IntegerFitting for u32 {
    fn fits_usize(self) -> bool {
        true
    }
    fn fits_isize(self) -> bool {
        true
    }
    fn usize_fits(value: usize) -> bool {
        value <= u32::max_value() as usize
    }
    fn isize_fits(value: isize) -> bool {
        value >= 0 && value <= u32::max_value() as isize
    }
}

pub(crate) fn fits_usize<T: IntegerFitting>(value: T) -> bool {
    value.fits_usize()
}

pub(crate) fn fits_u32(value: usize) -> bool {
    u32::usize_fits(value)
}