#fill #matrix #canvas #row-column #row #column

fill_canvas

FillCanvas是一个矩阵包装器,具有特殊方法来填充单元格

2个版本

0.1.1 2021年5月23日
0.1.0 2021年5月23日

#1516 in 数据结构

自定义许可

9KB
134

FillCanvas

[实用Rust包]

FillCanvas是一个矩阵包装器,具有特殊方法来填充单元格。

FillCanvas提供方法,可以一次性填充单个单元格的值,或一行/列的多个单元格,或一个区域内的所有单元格。

填充的单元格的T值不等于Default::default().

PS:最初开发用于将EntityIDs(来自ECS)根据它们在画布网格上占用的空间填充到矩阵中。

示例

fn test() {
    let mut canvas = FillCanvas::<u64>::new(5, 10);
    assert!(canvas.fill_row(1, 4).is_some());
    assert!(canvas.fill_cell(2, 2, 5).is_some());
    assert!(canvas.fill_cell(3, 3, 9).is_some());
    assert!(canvas.fill_area(4, 0, 0, 1, 3).is_some());
    assert!(canvas.fill_col(5, 7).is_some());

    let expected = vec![
        4, 4, 4, 4, 0, 0, 0, 5, 0, 0, //
        4, 4, 4, 4, 0, 0, 0, 5, 0, 0, //
        0, 0, 0, 0, 0, 2, 0, 5, 0, 0, //
        0, 0, 0, 0, 0, 0, 0, 5, 0, 3, //
        1, 1, 1, 1, 1, 1, 1, 5, 1, 1, //
    ];

    println!("{}", canvas);
    assert_eq!(expected, canvas.matrix);

    assert_eq!(Some(&4), canvas.get(0, 3));
    assert_eq!(Some(&4), canvas.get(1, 2));
    assert_eq!(Some(&5), canvas.get(3, 7));
    assert_eq!(Some(&3), canvas.get(3, 9));
    assert_eq!(Some(&1), canvas.get(4, 9));
    assert_eq!(Some(&0), canvas.get(3, 0));
    assert_eq!(Some(&0), canvas.get(0, 9));

    assert_eq!(Some(&4), canvas.get_filled(0, 3));
    assert_eq!(Some(&4), canvas.get_filled(1, 2));
    assert_eq!(Some(&5), canvas.get_filled(3, 7));
    assert_eq!(Some(&3), canvas.get_filled(3, 9));
    assert_eq!(Some(&1), canvas.get_filled(4, 9));
    assert_eq!(None, canvas.get_filled(3, 0));
    assert_eq!(None, canvas.get_filled(0, 9));
}

无运行时依赖