EnumSetIter { set }
}
}
+
impl <T: EnumSetType> Iterator for EnumSetIter<T> {
type Item = T;
}
}
+impl <T: EnumSetType> DoubleEndedIterator for EnumSetIter<T> {
+ fn next_back(&mut self) -> Option<Self::Item> {
+ if self.set.is_empty() {
+ None
+ } else {
+ let bit = T::Repr::WIDTH - 1 - self.set.__priv_repr.leading_zeros();
+ self.set.__priv_repr.remove_bit(bit);
+ unsafe { Some(T::enum_from_u32(bit)) }
+ }
+ }
+}
+
impl<T: EnumSetType> ExactSizeIterator for EnumSetIter<T> {}
impl<T: EnumSetType> Extend<T> for EnumSet<T> {
let set_a = $e::A | $e::B | $e::E;
let vec_a: Vec<_> = set_a.iter().collect();
assert_eq!(vec_a, &[$e::A, $e::B, $e::E]);
-
- let set_a = $e::B | $e::D | $e::G;
- let vec_a: Vec<_> = set_a.iter().collect();
- assert_eq!(vec_a, &[$e::B, $e::D, $e::G]);
+ let vec_a_rev: Vec<_> = set_a.iter().rev().collect();
+ assert_eq!(vec_a_rev, &[$e::E, $e::B, $e::A]);
+
+ let set_b = $e::B | $e::C | $e::D | $e::G;
+ let vec_b: Vec<_> = set_b.iter().collect();
+ assert_eq!(vec_b, &[$e::B, $e::C, $e::D, $e::G]);
+ let vec_b_rev: Vec<_> = set_b.iter().rev().collect();
+ assert_eq!(vec_b_rev, &[$e::G, $e::D, $e::C, $e::B]);
}
fn check_iter_size_hint(set: EnumSet<$e>) {