pub struct I16COSet { /* private fields */ }Expand description
Immutable canonical interval set.
Internally this is an Arc<[I16CO]>, so cloning a I16COSet is cheap.
Canonical invariant:
for every adjacent pair a, b:
a.end_excl() < b.start()The strict < means both overlap and adjacency have already been merged.
Implementations§
Source§impl I16COSet
impl I16COSet
Sourcepub fn interval_count(&self) -> u16
pub fn interval_count(&self) -> u16
Returns the number of canonical intervals.
For the I16CO domain, the maximum canonical interval count is 128,
e.g. alternating single-point intervals across [i16::MIN, i16::MAX).
Sourcepub fn as_slice(&self) -> &[I16CO]
pub fn as_slice(&self) -> &[I16CO]
Returns the canonical interval slice.
The returned slice is sorted, non-overlapping, and contains no adjacent intervals.
Sourcepub fn iter_intervals(&self) -> impl Iterator<Item = I16CO>
pub fn iter_intervals(&self) -> impl Iterator<Item = I16CO>
Iterates over canonical intervals by value.
Source§impl I16COSet
impl I16COSet
Sourcepub fn contains_point(&self, x: i16) -> bool
pub fn contains_point(&self, x: i16) -> bool
Returns whether x is covered by any interval in the set.
Complexity: O(log n).
Sourcepub fn contains_interval(&self, query: I16CO) -> bool
pub fn contains_interval(&self, query: I16CO) -> bool
Returns whether query is fully contained by one interval.
Since the set is canonical, a contained query interval can only
be contained by the interval immediately preceding or starting
at query.start().
Complexity: O(log n).
Sourcepub fn intersects_interval(&self, query: I16CO) -> bool
pub fn intersects_interval(&self, query: I16CO) -> bool
Returns whether query intersects any interval in the set.
Complexity: O(log n).
Source§impl I16COSet
impl I16COSet
Sourcepub fn interval_containing_point(&self, x: i16) -> Option<I16CO>
pub fn interval_containing_point(&self, x: i16) -> Option<I16CO>
Returns the unique interval containing x, if any.
Because the set is canonical, at most one interval can contain a single point.
Complexity: O(log n).
Source§impl I16COSet
impl I16COSet
Sourcepub fn intervals_intersecting(
&self,
query: I16CO,
) -> impl Iterator<Item = I16CO>
pub fn intervals_intersecting( &self, query: I16CO, ) -> impl Iterator<Item = I16CO>
Iterates over all canonical intervals intersecting query.
The iterator yields original intervals stored in the set, not clipped intersection segments.
Complexity: O(log n + k), where k is the number of
returned intervals.
Sourcepub fn intersections(&self, query: I16CO) -> impl Iterator<Item = I16CO>
pub fn intersections(&self, query: I16CO) -> impl Iterator<Item = I16CO>
Iterates over clipped intersection segments with query.
Example:
set: [10, 20), [30, 40)
query: [15, 35)
out: [15, 20), [30, 35)Complexity: O(log n + k), where k is the number of
intersecting intervals.
Source§impl I16COSet
impl I16COSet
Sourcepub fn covered_len(&self, query: I16CO) -> u16
pub fn covered_len(&self, query: I16CO) -> u16
Returns the covered length inside query.
Since I16COSet is canonical, all intersection segments are
disjoint, so summing their lengths is valid.
The result is always <= query.len().
Sourcepub fn uncovered_len(&self, query: I16CO) -> u16
pub fn uncovered_len(&self, query: I16CO) -> u16
Returns the uncovered length inside query.
Sourcepub fn coverage_ratio(&self, query: I16CO) -> f32
pub fn coverage_ratio(&self, query: I16CO) -> f32
Returns covered_len(query) / query.len() as f32.
query.len() is non-zero because I16CO cannot represent an
empty interval.