From e336b3a63f4f426b639d5c39fa59513928859f91 Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Mon, 24 May 2021 12:45:26 +0800 Subject: [PATCH] [math (rust)] Make the functions generic --- src/math.rs | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) 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 + } +} + +//-----------------------------------------