/rust/registry/src/index.crates.io-1949cf8c6b5b557f/zmij-1.0.20/src/traits.rs
Line | Count | Source |
1 | | use core::fmt::Display; |
2 | | use core::ops::{Add, BitAnd, BitOr, BitOrAssign, BitXorAssign, Div, Mul, Shl, Shr, Sub}; |
3 | | |
4 | | pub trait Float: Copy { |
5 | | const MANTISSA_DIGITS: u32; |
6 | | const MIN_10_EXP: i32; |
7 | | const MAX_10_EXP: i32; |
8 | | const MAX_DIGITS10: u32; |
9 | | } |
10 | | |
11 | | impl Float for f32 { |
12 | | const MANTISSA_DIGITS: u32 = Self::MANTISSA_DIGITS; |
13 | | const MIN_10_EXP: i32 = Self::MIN_10_EXP; |
14 | | const MAX_10_EXP: i32 = Self::MAX_10_EXP; |
15 | | const MAX_DIGITS10: u32 = 9; |
16 | | } |
17 | | |
18 | | impl Float for f64 { |
19 | | const MANTISSA_DIGITS: u32 = Self::MANTISSA_DIGITS; |
20 | | const MIN_10_EXP: i32 = Self::MIN_10_EXP; |
21 | | const MAX_10_EXP: i32 = Self::MAX_10_EXP; |
22 | | const MAX_DIGITS10: u32 = 17; |
23 | | } |
24 | | |
25 | | pub trait UInt: |
26 | | Copy |
27 | | + From<u8> |
28 | | + From<bool> |
29 | | + Add<Output = Self> |
30 | | + Sub<Output = Self> |
31 | | + Mul<Output = Self> |
32 | | + Div<Output = Self> |
33 | | + BitAnd<Output = Self> |
34 | | + BitOr<Output = Self> |
35 | | + Shl<u8, Output = Self> |
36 | | + Shl<i32, Output = Self> |
37 | | + Shl<u32, Output = Self> |
38 | | + Shr<i32, Output = Self> |
39 | | + Shr<u32, Output = Self> |
40 | | + BitOrAssign |
41 | | + BitXorAssign |
42 | | + PartialOrd |
43 | | + Into<u64> |
44 | | + Display |
45 | | { |
46 | | type Signed: Ord; |
47 | | fn wrapping_sub(self, other: Self) -> Self; |
48 | | fn truncate(big: u64) -> Self; |
49 | | fn enlarge(small: u32) -> Self; |
50 | | fn to_signed(self) -> Self::Signed; |
51 | | } |
52 | | |
53 | | impl UInt for u32 { |
54 | | type Signed = i32; |
55 | 0 | fn wrapping_sub(self, other: Self) -> Self { |
56 | 0 | self.wrapping_sub(other) |
57 | 0 | } |
58 | 8.58k | fn truncate(big: u64) -> Self { |
59 | 8.58k | big as u32 |
60 | 8.58k | } |
61 | 16 | fn enlarge(small: u32) -> Self { |
62 | 16 | small |
63 | 16 | } |
64 | 0 | fn to_signed(self) -> Self::Signed { |
65 | 0 | self as i32 |
66 | 0 | } |
67 | | } |
68 | | |
69 | | impl UInt for u64 { |
70 | | type Signed = i64; |
71 | 0 | fn wrapping_sub(self, other: Self) -> Self { |
72 | 0 | self.wrapping_sub(other) |
73 | 0 | } |
74 | 0 | fn truncate(big: u64) -> Self { |
75 | 0 | big |
76 | 0 | } |
77 | 0 | fn enlarge(small: u32) -> Self { |
78 | 0 | u64::from(small) |
79 | 0 | } |
80 | 0 | fn to_signed(self) -> Self::Signed { |
81 | 0 | self as i64 |
82 | 0 | } |
83 | | } |