gfxmath_vec4/impls/dot/dot.rs
1use core::ops::{Add, Mul};
2use crate::ops::Dot;
3use crate::Vec4;
4
5/// ```
6/// use gfxmath_vec4::{Vec4, ops::Dot};
7///
8/// let a = Vec4::new(3.0, 4.0, 5.0, 3.0);
9/// let b = Vec4::new(2.0, 1.0, 3.0, 3.0);
10///
11/// let res = a.dot(b);
12///
13/// assert_eq!(25.0, res);
14/// ```
15#[opimps::impl_ops(Dot)]
16fn dot<T>(self: Vec4<T>, rhs: Vec4<T>) -> T
17where T: Add<Output = T>
18 + Mul<Output = T>
19 + Copy
20{
21 let l = self.as_slice();
22 let r = rhs.as_slice();
23
24 l[0] * r[0]
25 + l[1] * r[1]
26 + l[2] * r[2]
27}