summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Thompson <daniel.thompson@linaro.org>2022-11-03 14:41:40 +0000
committerDaniel Thompson <daniel.thompson@linaro.org>2022-11-03 14:41:40 +0000
commit532e1d1bcccb36be0722165a76ed99754509bd1a (patch)
tree7f27bcbc9790c5449a9e12b561a783e2ed9bf6ae
parent7a85a0ceb3fbfb7c21bffade8632bb0363b6be77 (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.rs6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib.rs b/src/lib.rs
index eecdcaf..fbc29e4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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)
}