chiark / gitweb /
geometry: Promote len2
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 2 Apr 2021 21:16:24 +0000 (22:16 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 2 Apr 2021 21:16:24 +0000 (22:16 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
base/geometry.rs

index 4040207da5567da552090c40d8ea0272522adbc6..ab5527aaadd70f68c9b067634c35d5c1fb3e86ef 100644 (file)
@@ -104,6 +104,15 @@ impl<T> PosC<T> {
   pub fn zero() -> Self where T: num_traits::Zero + Copy {
     PosC::both(<T as num_traits::Zero>::zero())
   }
+
+  #[throws(CoordinateOverflow)]
+  pub fn len2(self) -> f64 where PosC<T>: PosPromote {
+    self.promote().coords.iter()
+      .try_fold(0., |b, &c| {
+        let c2 = c.checked_mul(c)?;
+        b.checked_add(c2)
+      })?
+  }
 }
 impl<T> PosC<T> where T: Copy {
   pub fn x(self) -> T { self.coords[0] }