logisheets_controller 1.16.1

Core spreadsheet engine for LogiSheets: formula evaluation, dependency tracking, and undo/redo.
Documentation
use logisheets_base::{Cube, CubeId, SheetId};

use crate::Error;

use super::{
    CubeExecCtx, CubeExecutor, CubeUpdateType, utils::cube_spans_sheet,
    utils::get_lower_upper_bound_of_cross,
};

pub fn delete_line<C>(
    exec_ctx: CubeExecutor,
    sheet: SheetId,
    is_horizontal: bool,
    idx: usize,
    cnt: u32,
    old_ctx: &C,
) -> Result<CubeExecutor, Error>
where
    C: CubeExecCtx,
{
    let mut func = |cube: &Cube, _: &CubeId| -> Result<CubeUpdateType, Error> {
        if !cube_spans_sheet(old_ctx, cube, &sheet) {
            return Ok(CubeUpdateType::None);
        }

        let (lower, upper) = get_lower_upper_bound_of_cross(&cube.cross, is_horizontal);
        if cnt == 0 || lower > idx + cnt as usize - 1 || upper < idx {
            Ok(CubeUpdateType::None)
        } else {
            Ok(CubeUpdateType::Dirty)
        }
    };
    exec_ctx.cube_update(&mut func)
}