#![doc = include_str!("application.md")]
#![no_std]
mod aggregate;
mod histogram;
mod ratio;
mod state;
mod summary;
pub use aggregate::{MeasurementAggregate, MeasurementInterval, MeasurementIntervalError};
pub use histogram::{
HistogramBoundsError, HistogramMergeError, HistogramQueryError, HistogramRange,
MeasurementHistogram,
};
pub use ratio::{MeasurementRatioError, checked_scaled_ratio};
pub use state::MeasurementStateError;
pub use summary::{MeasurementMeanError, MeasurementSummary, checked_mean, record_sample};
const fn add_count(value: &mut u64, saturated: &mut bool, increment: u64) {
if let Some(next) = value.checked_add(increment) {
*value = next;
} else {
*value = u64::MAX;
*saturated = true;
}
}
const fn add_total(value: &mut u128, saturated: &mut bool, increment: u128) {
if let Some(next) = value.checked_add(increment) {
*value = next;
} else {
*value = u128::MAX;
*saturated = true;
}
}
const fn mean_total(samples: u64, total: u128) -> Option<u128> {
if total <= u64::MAX as u128 {
#[expect(
clippy::cast_possible_truncation,
reason = "the branch admits a u64 total"
)]
let narrow = total as u64;
match narrow.checked_div(samples) {
Some(mean) => Some(mean as u128),
None => None,
}
} else {
total.checked_div(samples as u128)
}
}