use super::segment::Segment;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Chunk {
pub width: usize,
pub segments: Vec<Segment>,
pub hard_stop: bool,
pub ends_with_space: bool,
}
impl Chunk {
pub fn remove_front(&mut self, mut to_remove: ChunkPart) {
for segment in &mut self.segments {
if to_remove.length <= segment.end - segment.start {
segment.start += to_remove.length;
segment.width -= to_remove.width;
self.width -= to_remove.width;
break;
} else {
to_remove.length -= segment.end - segment.start;
to_remove.width -= segment.width;
self.width -= segment.width;
segment.start = segment.end;
segment.width = 0;
}
}
}
pub fn remove_last_char(&mut self) {
if self.ends_with_space {
self.width -= 1;
}
let last_empty = {
let last = self.segments.last_mut().unwrap();
if self.ends_with_space {
last.end -= 1;
last.width -= 1;
}
last.start == last.end
};
if last_empty {
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Hash)]
pub struct ChunkPart {
pub width: usize,
pub length: usize,
}