|
1 | 1 | #![deny(missing_docs)] |
| 2 | +#![allow(clippy::needless_lifetimes)] |
2 | 3 |
|
3 | 4 | //! A set of non-overlapping ranges |
4 | 5 | use crate::merge_state::{ |
|
92 | 93 | /// Testing is done by some simple smoke tests as well as quickcheck tests of the algebraic properties of the boolean operations. |
93 | 94 | pub struct RangeSet<A: Array>(SmallVec<A>); |
94 | 95 |
|
| 96 | +impl<T, A: Array<Item = T>> Default for RangeSet<A> { |
| 97 | + fn default() -> Self { |
| 98 | + Self(Default::default()) |
| 99 | + } |
| 100 | +} |
| 101 | + |
95 | 102 | impl<T, A: Array<Item = T>> Deref for RangeSet<A> { |
96 | 103 | type Target = RangeSetRef<T>; |
97 | 104 |
|
@@ -249,7 +256,10 @@ impl<T> RangeSetRef<T> { |
249 | 256 | RangeSetRef::new_unchecked_impl(&[]) |
250 | 257 | } |
251 | 258 |
|
252 | | - /// Create a new range set reference for a single value |
| 259 | + /// Create a new range set reference for a single boundary change |
| 260 | + /// |
| 261 | + /// This produces a RangeSetRef that goes from off before `value` to on at |
| 262 | + /// *and after* `value`. |
253 | 263 | pub const fn single(value: &T) -> &Self { |
254 | 264 | RangeSetRef::new_unchecked_impl(std::slice::from_ref(value)) |
255 | 265 | } |
@@ -851,7 +861,7 @@ impl<T: Ord, A: Array<Item = T>> SubAssign for RangeSet<A> { |
851 | 861 | impl<T: RangeSetEntry + Clone, A: Array<Item = T>> Not for RangeSet<A> { |
852 | 862 | type Output = RangeSet<A>; |
853 | 863 | fn not(mut self) -> Self::Output { |
854 | | - match self.0.get(0) { |
| 864 | + match self.0.first() { |
855 | 865 | Some(x) if x.is_min_value() => { |
856 | 866 | self.0.remove(0); |
857 | 867 | } |
|
0 commit comments