1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13

use num::PrimInt as Int;

/// The modulo function (handles negatives differently to Rust's remainder `%` operator).
#[inline]
pub fn modulo<I: Int>(a: I, b: I) -> I {
    match a % b {
        r if (r > I::zero() && b < I::zero())
          || (r < I::zero() && b > I::zero()) => (r + b),
        r                                     => r,
    }
}