From: Ian Jackson Date: Fri, 2 Apr 2021 21:16:24 +0000 (+0100) Subject: geometry: Promote len2 X-Git-Tag: otter-0.5.0~301 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=6af6c38f4035cbff21cc1db0983c20569139d2d7;p=otter.git geometry: Promote len2 Signed-off-by: Ian Jackson --- diff --git a/base/geometry.rs b/base/geometry.rs index 4040207d..ab5527aa 100644 --- a/base/geometry.rs +++ b/base/geometry.rs @@ -104,6 +104,15 @@ impl PosC { pub fn zero() -> Self where T: num_traits::Zero + Copy { PosC::both(::zero()) } + + #[throws(CoordinateOverflow)] + pub fn len2(self) -> f64 where PosC: PosPromote { + self.promote().coords.iter() + .try_fold(0., |b, &c| { + let c2 = c.checked_mul(c)?; + b.checked_add(c2) + })? + } } impl PosC where T: Copy { pub fn x(self) -> T { self.coords[0] }