array_matrix/vector/
sub.rs

1use std::ops::Add;
2
3use crate::{Vector};
4
5pub trait VSub<Rhs: Vector>: Vector
6where
7    Self::Output: Vector
8{
9    type Output;
10
11    /// Subtracts two vector-arrays of equal dimensions
12    /// 
13    /// u - v
14    /// 
15    /// # Arguments
16    /// 
17    /// * `rhs` - The vector to subtract
18    /// 
19    /// # Examples
20    /// 
21    /// ```rust
22    /// let u = [1.0, 2.0];
23    /// let v = [3.0, 4.0];
24    /// let w = [u[0] - v[0], u[1] - v[1]];
25    /// assert_eq!(u.add(v), w);
26    /// ```
27    fn sub(self, rhs: Rhs) -> Self::Output;
28}
29
30impl<T1, T2, const L: usize> VSub<[T2; L]> for [T1; L]
31where
32    Self: Vector,
33    [T2; L]: Vector,
34    [<T1 as Add<T2>>::Output; L]: Vector,
35    T1: Add<T2> + Clone,
36    T2: Clone
37{
38    type Output = [<T1 as Add<T2>>::Output; L];
39
40    fn sub(self, rhs: [T2; L]) -> Self::Output
41    {
42        array_init::array_init(|i| self[i].clone() + rhs[i].clone())
43    }
44}