diff options
author | Daniel Thompson <daniel.thompson@linaro.org> | 2022-11-03 14:41:40 +0000 |
---|---|---|
committer | Daniel Thompson <daniel.thompson@linaro.org> | 2022-11-03 14:41:40 +0000 |
commit | 532e1d1bcccb36be0722165a76ed99754509bd1a (patch) | |
tree | 7f27bcbc9790c5449a9e12b561a783e2ed9bf6ae | |
parent | 7a85a0ceb3fbfb7c21bffade8632bb0363b6be77 (diff) |
Replace Add with AddAssign to get rid of another clone.
Similar performance improvements observed in the benchmark:
change: [-11.816% -11.802% -11.789%] (p = 0.00 < 0.05)
Performance has improved.
Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
-rw-r--r-- | src/lib.rs | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -1,6 +1,6 @@ use num::{One, Zero}; use std::mem; -use std::ops::Add; +use std::ops::AddAssign; #[derive(Debug)] pub struct Fib<T> { @@ -17,13 +17,13 @@ impl<T: Zero + One> Fib<T> { } } -impl<T: Clone + Add<Output = T>> Iterator for Fib<T> { +impl<T: Clone + AddAssign> Iterator for Fib<T> { type Item = T; fn next(&mut self) -> Option<Self::Item> { let res = self.a.clone(); mem::swap(&mut self.a, &mut self.b); - self.b = self.b.clone() + self.a.clone(); + self.b += self.a.clone(); Some(res) } |