diff --git a/rangeset/Cargo.toml b/rangeset/Cargo.toml index f610946..94e31b0 100644 --- a/rangeset/Cargo.toml +++ b/rangeset/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rangeset" -version = "0.3.0" +version = "0.4.0" edition = "2024" authors = ["TLSNotary Contributors"] license = "MIT OR Apache-2.0" diff --git a/rangeset/src/set.rs b/rangeset/src/set.rs index d7223a2..a968c3e 100644 --- a/rangeset/src/set.rs +++ b/rangeset/src/set.rs @@ -24,21 +24,25 @@ //! set::RangeSet, //! }; //! +//! // Create a set from an iterator of unsanitized ranges. +//! let set = RangeSet::from_iter([0..1, 4..5, 3..4, 0..0, 2..1].into_iter()); +//! assert_eq!(set, RangeSet::from([0..1, 3..5])); +//! //! let a = 10..20; //! //! // Difference //! let diff: RangeSet<_> = a.difference(15..25).collect(); -//! assert_eq!(diff, RangeSet::from([10..15])); +//! assert_eq!(diff, RangeSet::from(10..15)); //! //! let diff: RangeSet<_> = a.difference(12..15).collect(); //! assert_eq!(diff, RangeSet::from([10..12, 15..20])); //! //! // Union //! let union: RangeSet<_> = a.union(15..25).collect(); -//! assert_eq!(union, RangeSet::from([10..25])); +//! assert_eq!(union, RangeSet::from(10..25)); //! //! let union: RangeSet<_> = a.union(0..0).collect(); -//! assert_eq!(union, RangeSet::from([10..20])); +//! assert_eq!(union, RangeSet::from(10..20)); //! //! // Comparison //! assert!(a.is_subset(0..30)); @@ -346,6 +350,24 @@ impl FromRangeIterator for RangeSet { } } +impl IntoIterator for RangeSet { + type Item = Range; + type IntoIter = std::vec::IntoIter>; + + fn into_iter(self) -> Self::IntoIter { + self.ranges.into_iter() + } +} + +impl<'a, T: Copy> IntoIterator for &'a RangeSet { + type Item = Range; + type IntoIter = RangeIter<'a, T>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + impl IntoRangeIterator for RangeSet { type IntoIter = IntoRangeIter;