use super::grammar::Segment;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SegmentRange {
pub start: usize,
pub end: usize,
}
impl SegmentRange {
pub fn new(start: usize, end: usize) -> Self {
Self { start, end }
}
pub fn single(seg: usize) -> Self {
Self {
start: seg,
end: seg,
}
}
pub fn to_byte_range(&self, segments: &[Segment]) -> Option<(usize, usize)> {
let start = segments.get(self.start)?.start;
let end = segments.get(self.end)?.end;
Some((start, end))
}
pub fn merge(&self, other: &Self) -> Self {
Self {
start: self.start.min(other.start),
end: self.end.max(other.end),
}
}
}