single_utilities/traits/
mod.rs1use std::fmt::Debug;
2use std::iter::Sum;
3use num_traits::{Bounded, FromPrimitive, NumCast, One, ToPrimitive, Zero};
4#[cfg(feature="simd")]
5use simba::{scalar::RealField, simd::SimdRealField};
6use std::ops::{Add, AddAssign, MulAssign, SubAssign};
7use num_traits::float::FloatCore;
8
9pub trait NumericOps:
10 Zero + One + NumCast + Copy + AddAssign + MulAssign + SubAssign + PartialOrd + Bounded + Add<Output = Self> + Sum + Debug + Default
11{
12}
13impl<
14 T: Zero + One + NumCast + Copy + AddAssign + MulAssign + SubAssign + PartialOrd + Bounded + Add<Output = Self> + Sum + Debug + Default,
15> NumericOps for T
16{
17}
18
19pub trait NumericOpsTS: NumericOps + Send + Sync {}
20
21impl<T: NumericOps + Send + Sync> NumericOpsTS for T {}
22
23pub trait FloatOps: NumericOps + num_traits::Float + FromPrimitive + ToPrimitive + FloatCore {}
24
25impl<T: NumericOps + num_traits::Float + FromPrimitive + ToPrimitive + FloatCore> FloatOps for T {}
26
27pub trait FloatOpsTS: FloatOps + Sync + Send {}
28
29impl<T: FloatOps + Send + Sync> FloatOpsTS for T {}
30
31#[cfg(feature="simd")]
32pub trait FloatOpsTSSimba: FloatOpsTS + SimdRealField + RealField {}
33
34#[cfg(feature="simd")]
35impl<T: FloatOpsTS + SimdRealField + RealField> FloatOpsTSSimba for T {}
36
37pub trait NumericNormalize:
39 num_traits::Float + std::ops::AddAssign + std::iter::Sum + num_traits::NumCast
40{
41}
42
43impl<T> NumericNormalize for T where
45 T: num_traits::Float + std::ops::AddAssign + std::iter::Sum + num_traits::NumCast
46{
47}
48
49pub trait ZeroVec {
50 fn zero_len(&mut self, len: usize);
51}
52
53impl<T: Default + Clone> ZeroVec for Vec<T> {
54 fn zero_len(&mut self, len: usize) {
55 self.clear();
56 self.reserve(len);
57 self.extend(std::iter::repeat_n(T::default(), len));
58 }
59}