src/loc.rs

branch
dev
changeset 63
f7b87d84864d
parent 62
d8305c9b6fdf
child 64
4f6ca107ccb1
--- a/src/loc.rs	Sat Dec 21 23:32:20 2024 -0500
+++ b/src/loc.rs	Sun Dec 22 14:54:46 2024 -0500
@@ -429,19 +429,17 @@
 domination!(Linfinity, L2);
 domination!(L2, L1);
 
-impl<F : Num,const N : usize> Dot<Loc<F, N>,F> for Loc<F, N> {
+impl<F : Float,const N : usize> Euclidean<F> for Loc<F, N> {
+    type Output = Self;
+
     /// This implementation is not stabilised as it's meant to be used for very small vectors.
     /// Use [`nalgebra`] for larger vectors.
     #[inline]
-    fn dot(&self, other : &Loc<F, N>) -> F {
+    fn dot<I : Instance<Self>>(&self, other : I) -> F {
         self.0.iter()
-              .zip(other.0.iter())
+              .zip(other.ref_instance().0.iter())
               .fold(F::ZERO, |m, (&v, &w)| m + v * w)
     }
-}
-
-impl<F : Float,const N : usize> Euclidean<F> for Loc<F, N> {
-    type Output = Self;
 
     /// This implementation is not stabilised as it's meant to be used for very small vectors.
     /// Use [`nalgebra`] for larger vectors.
@@ -696,7 +694,7 @@
     type Decomp = BasicDecomposition;
 }
 
-impl<F : Num, const N : usize> Mapping<Loc<F, N>> for Loc<F, N> {
+impl<F : Float, const N : usize> Mapping<Loc<F, N>> for Loc<F, N> {
     type Codomain = F;
 
     fn apply<I : Instance<Loc<F, N>>>(&self, x : I) -> Self::Codomain {
@@ -704,9 +702,9 @@
     }
 }
 
-impl<F : Num, const N : usize> Linear<Loc<F, N>> for Loc<F, N> { }
+impl<F : Float, const N : usize> Linear<Loc<F, N>> for Loc<F, N> { }
 
-impl<F : Num, const N : usize> AXPY<F, Loc<F, N>> for Loc<F, N> {
+impl<F : Float, const N : usize> AXPY<F, Loc<F, N>> for Loc<F, N> {
     type Owned = Self;
 
     #[inline]

mercurial