pub trait Increment {
fn increment(self) -> Self;
}
pub trait IncrementMut {
fn increment_mut(&mut self);
}
pub trait Decrement {
fn decrement(self) -> Self;
}
pub trait DecrementMut {
fn decrement_mut(&mut self);
}
use num_traits::One;
impl<T> Decrement for T
where
T: One + core::ops::Sub<T, Output = T>,
{
fn decrement(self) -> Self {
self - T::one()
}
}
impl<T> DecrementMut for T
where
T: One + core::ops::SubAssign<T>,
{
fn decrement_mut(&mut self) {
*self -= T::one()
}
}
impl<T> Increment for T
where
T: One + core::ops::Add<T, Output = T>,
{
fn increment(self) -> Self {
self + T::one()
}
}
impl<T> IncrementMut for T
where
T: One + core::ops::AddAssign<T>,
{
fn increment_mut(&mut self) {
*self += T::one()
}
}