Skip to content

Commit 17c925a

Browse files
lemmihmbrubeck
authored andcommitted
Implement Sum and Product for OrderedFloat.
1 parent 5d26c6d commit 17c925a

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,33 @@ impl_ordered_float_binop!{Mul, mul, MulAssign, mul_assign}
329329
impl_ordered_float_binop!{Div, div, DivAssign, div_assign}
330330
impl_ordered_float_binop!{Rem, rem, RemAssign, rem_assign}
331331

332+
/// Adds a float directly.
333+
impl<T: Float + Sum> Sum for OrderedFloat<T> {
334+
fn sum<I: Iterator<Item = OrderedFloat<T>>>(iter: I) -> Self {
335+
OrderedFloat(iter.map(|v| v.0).sum())
336+
}
337+
}
338+
339+
impl<'a, T: Float + Sum + 'a> Sum<&'a OrderedFloat<T>> for OrderedFloat<T> {
340+
#[inline]
341+
fn sum<I: Iterator<Item = &'a OrderedFloat<T>>>(iter: I) -> Self {
342+
iter.cloned().sum()
343+
}
344+
}
345+
346+
impl<T: Float + Product> Product for OrderedFloat<T> {
347+
fn product<I: Iterator<Item = OrderedFloat<T>>>(iter: I) -> Self {
348+
OrderedFloat(iter.map(|v| v.0).product())
349+
}
350+
}
351+
352+
impl<'a, T: Float + Product + 'a> Product<&'a OrderedFloat<T>> for OrderedFloat<T> {
353+
#[inline]
354+
fn product<I: Iterator<Item = &'a OrderedFloat<T>>>(iter: I) -> Self {
355+
iter.cloned().product()
356+
}
357+
}
358+
332359
impl<T: Bounded> Bounded for OrderedFloat<T> {
333360
#[inline]
334361
fn min_value() -> Self {

0 commit comments

Comments
 (0)