Skip to content

Commit 559536b

Browse files
committed
Implement Sum/Product
1 parent 9913c6c commit 559536b

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

src/lib.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ use std::fmt;
2525
#[cfg(test)]
2626
use std::hash;
2727
use std::ops::{Add, Div, Mul, Neg, Sub, Rem};
28+
use std::iter::{Sum, Product};
2829
use std::str::FromStr;
2930

30-
use traits::{Zero, One, Num, Float};
31+
use traits::{Zero, One, Num, NumAssign, Float};
3132

3233
// FIXME #1284: handle complex NaN & infinity etc. This
3334
// probably doesn't map to C's _Complex correctly.
@@ -1046,6 +1047,46 @@ impl<T: Num + Clone> Num for Complex<T> {
10461047
}
10471048
}
10481049

1050+
impl<T: Clone + NumAssign> Sum for Complex<T> {
1051+
fn sum<I>(iter: I) -> Self where I: Iterator<Item = Self> {
1052+
let mut s = Self::zero();
1053+
for c in iter {
1054+
s += c;
1055+
}
1056+
s
1057+
}
1058+
}
1059+
1060+
impl<'a, T: 'a + Clone + NumAssign> Sum<&'a Complex<T>> for Complex<T> {
1061+
fn sum<I>(iter: I) -> Self where I: Iterator<Item = &'a Complex<T>> {
1062+
let mut s = Self::zero();
1063+
for c in iter {
1064+
s += c;
1065+
}
1066+
s
1067+
}
1068+
}
1069+
1070+
impl<T: Clone + NumAssign> Product for Complex<T> {
1071+
fn product<I>(iter: I) -> Self where I: Iterator<Item = Self> {
1072+
let mut s = Self::one();
1073+
for c in iter {
1074+
s *= c;
1075+
}
1076+
s
1077+
}
1078+
}
1079+
1080+
impl<'a, T: 'a + Clone + NumAssign> Product<&'a Complex<T>> for Complex<T> {
1081+
fn product<I>(iter: I) -> Self where I: Iterator<Item = &'a Complex<T>> {
1082+
let mut s = Self::one();
1083+
for c in iter {
1084+
s *= c;
1085+
}
1086+
s
1087+
}
1088+
}
1089+
10491090
#[cfg(feature = "serde")]
10501091
impl<T> serde::Serialize for Complex<T>
10511092
where T: serde::Serialize

0 commit comments

Comments
 (0)