diff --git a/src/math.rs b/src/math.rs index a3901b3..4fc4fed 100644 --- a/src/math.rs +++ b/src/math.rs @@ -1,7 +1,47 @@ -pub fn div_up(v: usize, divisor: usize) -> usize { - v / divisor + (v % divisor != 0) as usize +use std::cmp::PartialEq; +use std::ops::{Add, Div, Rem}; + +//----------------------------------------- + +pub trait Integer: + Sized + Copy + Add + Div + Rem + PartialEq +{ + fn zero() -> Self; + fn one() -> Self; } -pub fn div_down(v: usize, divisor: usize) -> usize { +pub fn div_up(v: T, divisor: T) -> T { + if v % divisor != Integer::zero() { + v / divisor + Integer::one() + } else { + v / divisor + } +} + +pub fn div_down(v: T, divisor: T) -> T { v / divisor } + +//----------------------------------------- + +impl Integer for usize { + fn zero() -> Self { + 0 + } + + fn one() -> Self { + 1 + } +} + +impl Integer for u64 { + fn zero() -> Self { + 0 + } + + fn one() -> Self { + 1 + } +} + +//-----------------------------------------