#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug)]
pub enum RangesRelation {
StrictlyBefore,
StrictlyAfter,
Meets,
IsMet,
Overlaps,
IsOverlapped,
Starts,
IsStarted,
StrictlyContains,
IsStrictlyContained,
Finishes,
IsFinished,
Equal,
}
impl RangesRelation {
#[must_use]
pub fn intersects(&self) -> bool {
match self {
RangesRelation::StrictlyBefore | RangesRelation::StrictlyAfter => false,
RangesRelation::Overlaps
| RangesRelation::IsOverlapped
| RangesRelation::Meets
| RangesRelation::IsMet
| RangesRelation::Starts
| RangesRelation::IsStarted
| RangesRelation::StrictlyContains
| RangesRelation::IsStrictlyContained
| RangesRelation::Finishes
| RangesRelation::IsFinished
| RangesRelation::Equal => true,
}
}
#[must_use]
pub fn disjoint(&self) -> bool {
!self.intersects()
}
#[must_use]
pub fn contains(&self) -> bool {
match self {
RangesRelation::Equal
| RangesRelation::StrictlyContains
| RangesRelation::IsFinished
| RangesRelation::IsStarted => true,
RangesRelation::StrictlyBefore
| RangesRelation::StrictlyAfter
| RangesRelation::Overlaps
| RangesRelation::IsOverlapped
| RangesRelation::Meets
| RangesRelation::IsMet
| RangesRelation::Starts
| RangesRelation::IsStrictlyContained
| RangesRelation::Finishes => false,
}
}
}