diff --git a/src/lib.rs b/src/lib.rs index cfa40fe..460e0c0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -732,6 +732,17 @@ impl<'a> Iterator for Difference<'a> { } } +impl<'a> DoubleEndedIterator for Difference<'a> { + fn next_back(&mut self) -> Option { + for nxt in self.iter.by_ref().rev() { + if !self.other.contains(nxt) { + return Some(nxt); + } + } + None + } +} + // Difference will continue to return None once it first returns None. impl<'a> FusedIterator for Difference<'a> {} @@ -756,6 +767,12 @@ impl<'a> Iterator for SymmetricDifference<'a> { } } +impl<'a> DoubleEndedIterator for SymmetricDifference<'a> { + fn next_back(&mut self) -> Option { + self.iter.next_back() + } +} + // SymmetricDifference will continue to return None once it first returns None. impl<'a> FusedIterator for SymmetricDifference<'a> {} @@ -787,6 +804,17 @@ impl<'a> Iterator for Intersection<'a> { } } +impl<'a> DoubleEndedIterator for Intersection<'a> { + fn next_back(&mut self) -> Option { + for nxt in self.iter.by_ref().rev() { + if self.other.contains(nxt) { + return Some(nxt); + } + } + None + } +} + // Intersection will continue to return None once it first returns None. impl<'a> FusedIterator for Intersection<'a> {} @@ -811,6 +839,12 @@ impl<'a> Iterator for Union<'a> { } } +impl<'a> DoubleEndedIterator for Union<'a> { + fn next_back(&mut self) -> Option { + self.iter.next_back() + } +} + // Union will continue to return None once it first returns None. impl<'a> FusedIterator for Union<'a> {}