#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub struct LineDamage {
pub line: usize,
pub left: usize,
pub right: usize,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub struct ScrollOp {
pub top: usize,
pub bottom: usize,
pub count: isize,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum TermDamage {
Full,
Partial(Vec<LineDamage>),
}
#[derive(Clone, Copy)]
pub(crate) struct LineBounds {
left: usize,
right: usize,
cols: usize,
}
impl LineBounds {
pub(crate) fn undamaged(cols: usize) -> Self {
LineBounds {
left: cols,
right: 0,
cols,
}
}
pub(crate) fn fully_damaged(cols: usize) -> Self {
LineBounds {
left: 0,
right: cols.saturating_sub(1),
cols,
}
}
pub(crate) fn expand(&mut self, left: usize, right: usize) {
self.left = self.left.min(left);
self.right = self.right.max(right);
}
pub(crate) fn is_damaged(&self) -> bool {
self.left <= self.right
}
pub(crate) fn reset(&mut self) {
self.left = self.cols;
self.right = 0;
}
pub(crate) fn span(&self) -> (usize, usize) {
(self.left, self.right)
}
}