add math utils; integrate checked expression macros

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-07-07 03:36:50 +00:00
parent 611f09829e
commit 5e72d36800
7 changed files with 68 additions and 0 deletions

26
src/core/utils/math.rs Normal file
View file

@ -0,0 +1,26 @@
use std::{cmp, time::Duration};
pub use checked_ops::checked_ops;
/// Checked arithmetic expression. Returns a Result<R, Error::Arithmetic>
#[macro_export]
macro_rules! checked {
($($input:tt)*) => {
$crate::utils::math::checked_ops!($($input)*)
.ok_or_else(|| $crate::Error::Arithmetic("operation overflowed or result invalid"))
}
}
/// in release-mode. Use for performance when the expression is obviously safe.
/// The check remains in debug-mode for regression analysis.
#[cfg(not(debug_assertions))]
#[macro_export]
macro_rules! validated {
($($input:tt)*) => { Ok($($input)*) }
}
#[cfg(debug_assertions)]
#[macro_export]
macro_rules! validated {
($($input:tt)*) => { $crate::checked!($($input)*) }
}