use crate::error::{Error, Result};
pub fn required_vector_len(n: usize, inc: usize) -> Result<usize> {
debug_assert_ne!(inc, 0);
n.checked_sub(1)
.and_then(|count| count.checked_mul(inc))
.and_then(|count| count.checked_add(1))
.ok_or(Error::OutOfRange {
name: "vector length".into(),
})
}
pub fn required_matrix_len(leading_dimension: usize, cols: usize) -> Result<usize> {
leading_dimension
.checked_mul(cols)
.ok_or(Error::OutOfRange {
name: "matrix length".into(),
})
}
pub fn to_i32(value: impl TryInto<i32>, name: &str) -> Result<i32> {
value
.try_into()
.map_err(|_| Error::OutOfRange { name: name.into() })
}
pub fn to_u64(value: impl TryInto<u64>, name: &str) -> Result<u64> {
value
.try_into()
.map_err(|_| Error::OutOfRange { name: name.into() })
}
pub fn to_usize(value: impl TryInto<usize>, name: &str) -> Result<usize> {
value
.try_into()
.map_err(|_| Error::OutOfRange { name: name.into() })
}
pub fn ensure_exact_size(actual: usize, expected: usize) -> Result<()> {
if actual != expected {
return Err(Error::AttributeSizeMismatch { expected, actual });
}
Ok(())
}