]> git.lizzy.rs Git - enumset.git/blobdiff - enumset/src/lib.rs
Implement core::iter::Sum for EnumSet<T>
[enumset.git] / enumset / src / lib.rs
index 55aab1e98e45463004ca2dc16a0c5c98ef2a6d7a..66af9e316ec26c6aa36eefd3f13ce349f7029fb6 100644 (file)
@@ -81,7 +81,7 @@ use core::cmp::Ordering;
 use core::fmt;
 use core::fmt::{Debug, Formatter};
 use core::hash::{Hash, Hasher};
-use core::iter::FromIterator;
+use core::iter::{FromIterator, Sum};
 use core::ops::*;
 
 #[doc(hidden)]
@@ -462,6 +462,26 @@ impl <T: EnumSetType> IntoIterator for EnumSet<T> {
         self.iter()
     }
 }
+impl <T: EnumSetType> Sum for EnumSet<T> {
+    fn sum<I: Iterator<Item=Self>>(iter: I) -> Self {
+        iter.fold(EnumSet::empty(), |a, v| a | v)
+    }
+}
+impl <'a, T: EnumSetType> Sum<&'a EnumSet<T>> for EnumSet<T> {
+    fn sum<I: Iterator<Item=&'a Self>>(iter: I) -> Self {
+        iter.fold(EnumSet::empty(), |a, v| a | *v)
+    }
+}
+impl <T: EnumSetType> Sum<T> for EnumSet<T> {
+    fn sum<I: Iterator<Item=T>>(iter: I) -> Self {
+        iter.fold(EnumSet::empty(), |a, v| a | v)
+    }
+}
+impl <'a, T: EnumSetType> Sum<&'a T> for EnumSet<T> {
+    fn sum<I: Iterator<Item=&'a T>>(iter: I) -> Self {
+        iter.fold(EnumSet::empty(), |a, v| a | *v)
+    }
+}
 
 impl <T: EnumSetType, O: Into<EnumSet<T>>> Sub<O> for EnumSet<T> {
     type Output = Self;