eryon_core/ops/
increment.rs

1/*
2    Appellation: increment <module>
3    Contrib: @FL03
4*/
5
6pub trait Increment {
7    fn increment(self) -> Self;
8}
9
10pub trait IncrementMut {
11    fn increment_mut(&mut self);
12}
13
14pub trait Decrement {
15    fn decrement(self) -> Self;
16}
17
18pub trait DecrementMut {
19    fn decrement_mut(&mut self);
20}
21
22impl<T> Decrement for T
23where
24    T: num::One + core::ops::Sub<T, Output = T>,
25{
26    fn decrement(self) -> Self {
27        self - T::one()
28    }
29}
30
31impl<T> DecrementMut for T
32where
33    T: num::One + core::ops::SubAssign<T>,
34{
35    fn decrement_mut(&mut self) {
36        *self -= T::one()
37    }
38}
39
40impl<T> Increment for T
41where
42    T: num::One + core::ops::Add<T, Output = T>,
43{
44    fn increment(self) -> Self {
45        self + T::one()
46    }
47}
48
49impl<T> IncrementMut for T
50where
51    T: num::One + core::ops::AddAssign<T>,
52{
53    fn increment_mut(&mut self) {
54        *self += T::one()
55    }
56}