use std::ops::Range;
use crate::PosnInCharStream;
#[derive(Debug, Clone, Copy)]
pub struct StreamCharSpan<P>
where
P: PosnInCharStream,
{
start: P,
end: P,
}
impl<P> StreamCharSpan<P>
where
P: PosnInCharStream,
{
pub fn new(start: P, end: P) -> Self {
Self { start, end }
}
pub fn new_at(posn: &P) -> Self {
Self {
start: *posn,
end: *posn,
}
}
pub fn end_at(mut self, posn: &P) -> Self {
self.end = *posn;
self
}
pub fn start(&self) -> &P {
&self.start
}
pub fn end(&self) -> &P {
&self.end
}
pub fn byte_range(&self) -> Range<usize> {
let start = self.start.byte_ofs();
let end = self.end.byte_ofs();
Range { start, end }
}
}