Oregami
Repositories/oxedyne/fe2o3

oxedyne/fe2o3/fe2o3_core/src/int.rs

1.3 KiB, 1 run

created by r1870400018:82, which is this file's identity for as long as the history lasts, whatever it is later renamed to

download · who wrote it · its history

1pub trait Bound {
2 fn max_size() -> Self;
3 fn min_size() -> Self;
4}
5
6macro_rules! impl_bound_for_ints {
7 ($(($t:ty, $max:expr, $min:expr)),+) => {
8 $(
9 impl Bound for $t {
10 fn max_size() -> Self {
11 $max
12 }
13
14 fn min_size() -> Self {
15 $min
16 }
17 }
18 )+
19 };
20}
21
22impl_bound_for_ints!(
23 (i8, i8::MAX, i8::MIN),
24 (i16, i16::MAX, i16::MIN),
25 (i32, i32::MAX, i32::MIN),
26 (i64, i64::MAX, i64::MIN),
27 (i128, i128::MAX, i128::MIN),
28 (u8, u8::MAX, u8::MIN),
29 (u16, u16::MAX, u16::MIN),
30 (u32, u32::MAX, u32::MIN),
31 (u64, u64::MAX, u64::MIN),
32 (u128, u128::MAX, u128::MIN),
33 (isize, isize::MAX, isize::MIN),
34 (usize, usize::MAX, usize::MIN)
35);
36
37pub trait One {
38 fn one() -> Self;
39}
40
41pub trait Zero {
42 fn zero() -> Self;
43}
44
45macro_rules! impl_one_zero_for_ints {
46 ($($t:ty),+) => {
47 $(
48 impl One for $t {
49 fn one() -> Self {
50 1
51 }
52 }
53
54 impl Zero for $t {
55 fn zero() -> Self {
56 0
57 }
58 }
59 )+
60 };
61}
62
63impl_one_zero_for_ints!(i8, i16, i32, i64, i128, u8, u16, u32, u64, u128, isize, usize);