Skip to content

Commit

Permalink
Rename Closed* to Closed*Assign and introduce non-Assign Closed* trai…
Browse files Browse the repository at this point in the history
…ts (#5)
  • Loading branch information
z33ky authored Jun 22, 2024
1 parent 22546e2 commit e338e4b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 8 deletions.
31 changes: 24 additions & 7 deletions src/scalar/field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,44 @@ use crate::simd::SimdValue;
use num::NumAssign;
pub use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Rem, Sub, SubAssign};

/// Trait __alias__ for `Add` with result of type `Self`.
pub trait ClosedAdd<Right = Self>: Sized + Add<Right, Output = Self> {}

/// Trait __alias__ for `Sub` with result of type `Self`.
pub trait ClosedSub<Right = Self>: Sized + Sub<Right, Output = Self> {}

/// Trait __alias__ for `Mul` with result of type `Self`.
pub trait ClosedMul<Right = Self>: Sized + Mul<Right, Output = Self> {}

/// Trait __alias__ for `Div` with result of type `Self`.
pub trait ClosedDiv<Right = Self>: Sized + Div<Right, Output = Self> {}

/// Trait __alias__ for `Neg` with result of type `Self`.
pub trait ClosedNeg: Sized + Neg<Output = Self> {}

/// Trait __alias__ for `Add` and `AddAssign` with result of type `Self`.
pub trait ClosedAdd<Right = Self>: Sized + Add<Right, Output = Self> + AddAssign<Right> {}
pub trait ClosedAddAssign<Right = Self>: ClosedAdd<Right> + AddAssign<Right> {}

/// Trait __alias__ for `Sub` and `SubAssign` with result of type `Self`.
pub trait ClosedSub<Right = Self>: Sized + Sub<Right, Output = Self> + SubAssign<Right> {}
pub trait ClosedSubAssign<Right = Self>: ClosedSub<Right> + SubAssign<Right> {}

/// Trait __alias__ for `Mul` and `MulAssign` with result of type `Self`.
pub trait ClosedMul<Right = Self>: Sized + Mul<Right, Output = Self> + MulAssign<Right> {}
pub trait ClosedMulAssign<Right = Self>: ClosedMul<Right> + MulAssign<Right> {}

/// Trait __alias__ for `Div` and `DivAssign` with result of type `Self`.
pub trait ClosedDiv<Right = Self>: Sized + Div<Right, Output = Self> + DivAssign<Right> {}

/// Trait __alias__ for `Neg` with result of type `Self`.
pub trait ClosedNeg: Sized + Neg<Output = Self> {}
pub trait ClosedDivAssign<Right = Self>: ClosedDiv<Right> + DivAssign<Right> {}

impl<T, Right> ClosedAdd<Right> for T where T: Add<Right, Output = T> + AddAssign<Right> {}
impl<T, Right> ClosedSub<Right> for T where T: Sub<Right, Output = T> + SubAssign<Right> {}
impl<T, Right> ClosedMul<Right> for T where T: Mul<Right, Output = T> + MulAssign<Right> {}
impl<T, Right> ClosedDiv<Right> for T where T: Div<Right, Output = T> + DivAssign<Right> {}
impl<T> ClosedNeg for T where T: Neg<Output = T> {}

impl<T, Right> ClosedAddAssign<Right> for T where T: ClosedAdd<Right> + AddAssign<Right> {}
impl<T, Right> ClosedSubAssign<Right> for T where T: ClosedSub<Right> + SubAssign<Right> {}
impl<T, Right> ClosedMulAssign<Right> for T where T: ClosedMul<Right> + MulAssign<Right> {}
impl<T, Right> ClosedDivAssign<Right> for T where T: ClosedDiv<Right> + DivAssign<Right> {}

/// Trait implemented by fields, i.e., complex numbers and floats.
pub trait Field: SimdValue + NumAssign + ClosedNeg {}

Expand Down
5 changes: 4 additions & 1 deletion src/scalar/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
//! Traits implemented by scalar, non-SIMD, types.
pub use self::complex::ComplexField;
pub use self::field::{ClosedAdd, ClosedDiv, ClosedMul, ClosedNeg, ClosedSub, Field};
pub use self::field::{
ClosedAdd, ClosedAddAssign, ClosedDiv, ClosedDivAssign, ClosedMul, ClosedMulAssign, ClosedNeg,
ClosedSub, ClosedSubAssign, Field,
};
#[cfg(feature = "partial_fixed_point_support")]
pub use self::fixed_impl::*;
pub use self::real::RealField;
Expand Down

0 comments on commit e338e4b

Please sign in to comment.