1个不稳定版本

0.3.0 2024年7月10日
0.2.0 2024年7月10日
0.1.2 2024年7月9日
0.1.1 2024年7月9日
0.1.0 2024年7月9日

#382 in 数学

Download history 340/week @ 2024-07-06 25/week @ 2024-07-13 18/week @ 2024-07-27

383 每月下载量

MIT/Apache

39KB
338

英语 | 日语

xdbuf

提供可重用的多维缓冲区。只要维度相同,就可以重新初始化为任何大小,从而最小化内存重新分配的数量。

还提供了一个Walker结构来遍历数组。

使用

use xdbuf::{XDBuf, Walker, step2d};

fn main() -> Result<(), anyhow::Error> {
    // Create an instance
    let mut buf = XDBuf::new([5, 6], 0).unwrap();
    assert_eq!(buf.get(0), Some(&0));
    assert_eq!(buf.len(), 30);

    // Reinitialize from an initial array
    // [1, 2, 3,
    //  4, 5, 6,
    //  7, 8, 9]
    let initial_vec = (1..=9).collect::<Vec<_>>();
    buf.init_with_vec([3, 3], initial_vec).unwrap();
    assert_eq!(buf.get(0), Some(&1));
    assert_eq!(buf.get(8), Some(&9));

    // Generate a `Walker` to traverse the array
    let mut walker = buf.walker_from_m([1, 1])?;
    assert_eq!(buf.get(walker.index_s()), Some(&5));

    // Move down
    assert_eq!(step2d::DOWN, [0, -1]);
    walker.as_(&step2d::DOWN)?;
    assert_eq!(buf.get(walker.index_s()), Some(&2));

    // Move until the value is greater than or equal to 8
    walker.as_until(|&value, _index| { value >= 8 })?;
    assert_eq!(buf.get(walker.index_s()), Some(&8));

    // Rewrite the value
    buf.set(walker.index_s(), 100)?;

    Ok(())
}

许可证

许可方式任选其一:

任选。

(README和文档注释中的英文已由DeepL和ChatGPT翻译成英文。)

依赖项

~130KB