vyre-std 0.1.0

Vyre standard library: GPU DFA assembly pipeline, Aho-Corasick construction, and compositional arithmetic helpers
Documentation
#[must_use]
#[inline]
pub fn min_i8(a: i8, b: i8) -> i8 {
    if a < b {
        a
    } else {
        b
    }
}
/// Minimum of two `i16` values.
#[must_use]
#[inline]
pub fn min_i16(a: i16, b: i16) -> i16 {
    if a < b {
        a
    } else {
        b
    }
}
/// Minimum of two `i32` values.
#[must_use]
#[inline]
pub fn min_i32(a: i32, b: i32) -> i32 {
    if a < b {
        a
    } else {
        b
    }
}
/// Minimum of two `i64` values.
#[must_use]
#[inline]
pub fn min_i64(a: i64, b: i64) -> i64 {
    if a < b {
        a
    } else {
        b
    }
}

/// Maximum of two `i8` values.
#[must_use]
#[inline]
pub fn max_i8(a: i8, b: i8) -> i8 {
    if a > b {
        a
    } else {
        b
    }
}
/// Maximum of two `i16` values.
#[must_use]
#[inline]
pub fn max_i16(a: i16, b: i16) -> i16 {
    if a > b {
        a
    } else {
        b
    }
}
/// Maximum of two `i32` values.
#[must_use]
#[inline]
pub fn max_i32(a: i32, b: i32) -> i32 {
    if a > b {
        a
    } else {
        b
    }
}
/// Maximum of two `i64` values.
#[must_use]
#[inline]
pub fn max_i64(a: i64, b: i64) -> i64 {
    if a > b {
        a
    } else {
        b
    }
}

/// Clamp `x` to the inclusive range `[lo, hi]` for `i8`.
///
/// # Panics
/// Panics if `lo > hi`.
#[must_use]
#[inline]
pub fn clamp_i8(x: i8, lo: i8, hi: i8) -> i8 {
    assert!(lo <= hi, "Fix: clamp_i8 called with lo > hi");
    min_i8(max_i8(x, lo), hi)
}
/// Clamp `x` to the inclusive range `[lo, hi]` for `i16`.
///
/// # Panics
/// Panics if `lo > hi`.
#[must_use]
#[inline]
pub fn clamp_i16(x: i16, lo: i16, hi: i16) -> i16 {
    assert!(lo <= hi, "Fix: clamp_i16 called with lo > hi");
    min_i16(max_i16(x, lo), hi)
}
/// Clamp `x` to the inclusive range `[lo, hi]` for `i32`.
///
/// # Panics
/// Panics if `lo > hi`.
#[must_use]
#[inline]
pub fn clamp_i32(x: i32, lo: i32, hi: i32) -> i32 {
    assert!(lo <= hi, "Fix: clamp_i32 called with lo > hi");
    min_i32(max_i32(x, lo), hi)
}
/// Clamp `x` to the inclusive range `[lo, hi]` for `i64`.
///
/// # Panics
/// Panics if `lo > hi`.
#[must_use]
#[inline]
pub fn clamp_i64(x: i64, lo: i64, hi: i64) -> i64 {
    assert!(lo <= hi, "Fix: clamp_i64 called with lo > hi");
    min_i64(max_i64(x, lo), hi)
}

/// Overflow-safe midpoint for `i8` (rounds toward negative infinity).
///
/// Uses `i16` widening so `a + b` cannot overflow even at `i8::MIN`.
#[must_use]
#[inline]
pub fn midpoint_i8(a: i8, b: i8) -> i8 {
    ((i16::from(a) + i16::from(b)).div_euclid(2)) as i8
}
/// Overflow-safe midpoint for `i16`.
#[must_use]
#[inline]
pub fn midpoint_i16(a: i16, b: i16) -> i16 {
    ((i32::from(a) + i32::from(b)).div_euclid(2)) as i16
}
/// Overflow-safe midpoint for `i32`.
#[must_use]
#[inline]
pub fn midpoint_i32(a: i32, b: i32) -> i32 {
    ((i64::from(a) + i64::from(b)).div_euclid(2)) as i32
}
/// Overflow-safe midpoint for `i64`.
#[must_use]
#[inline]
pub fn midpoint_i64(a: i64, b: i64) -> i64 {
    ((i128::from(a) + i128::from(b)).div_euclid(2)) as i64
}

/// Absolute difference between two `i8` values, returned as `u8`.
///
/// Widens through `i16` so `abs_diff_i8(i8::MIN, i8::MAX)` returns `255`
/// without overflowing.
#[must_use]
#[inline]
pub fn abs_diff_i8(a: i8, b: i8) -> u8 {
    (i16::from(a) - i16::from(b)).unsigned_abs() as u8
}
/// Absolute difference between two `i16` values, returned as `u16`.
#[must_use]
#[inline]
pub fn abs_diff_i16(a: i16, b: i16) -> u16 {
    (i32::from(a) - i32::from(b)).unsigned_abs() as u16
}
/// Absolute difference between two `i32` values, returned as `u32`.
#[must_use]
#[inline]
pub fn abs_diff_i32(a: i32, b: i32) -> u32 {
    (i64::from(a) - i64::from(b)).unsigned_abs() as u32
}
/// Absolute difference between two `i64` values, returned as `u64`.
#[must_use]
#[inline]
pub fn abs_diff_i64(a: i64, b: i64) -> u64 {
    (i128::from(a) - i128::from(b)).unsigned_abs() as u64
}