const_decimal/
integer.rs

1use std::fmt::Display;
2use std::num::ParseIntError;
3use std::ops::{AddAssign, DivAssign, Not, Shr};
4use std::str::FromStr;
5
6use num_traits::{CheckedNeg, CheckedRem, ConstOne, ConstZero, One, PrimInt, WrappingAdd};
7
8use crate::cheats::Cheats;
9use crate::full_mul_div::FullMulDiv;
10
11pub trait ScaledInteger<const D: u8>:
12    PrimInt
13    + ConstZero
14    + ConstOne
15    + One
16    + WrappingAdd<Output = Self>
17    + CheckedRem<Output = Self>
18    + Not<Output = Self>
19    + Shr<u32, Output = Self>
20    + AddAssign
21    + DivAssign
22    + Display
23    + FromStr<Err = ParseIntError>
24    + Cheats<D>
25    + FullMulDiv
26{
27}
28
29impl<I, const D: u8> ScaledInteger<D> for I where
30    I: PrimInt
31        + ConstZero
32        + ConstOne
33        + One
34        + WrappingAdd<Output = Self>
35        + CheckedRem<Output = Self>
36        + Not<Output = Self>
37        + Shr<u32, Output = Self>
38        + AddAssign
39        + DivAssign
40        + Display
41        + FromStr<Err = ParseIntError>
42        + Cheats<D>
43        + FullMulDiv
44{
45}
46
47pub trait SignedScaledInteger<const D: u8>: ScaledInteger<D> + CheckedNeg {}
48
49impl<I, const D: u8> SignedScaledInteger<D> for I where I: ScaledInteger<D> + CheckedNeg {}