1个不稳定版本
0.3.0 | 2024年7月10日 |
---|---|
0.2.0 |
|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#382 in 数学
383 每月下载量
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(())
}
许可证
许可方式任选其一:
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选。
(README和文档注释中的英文已由DeepL和ChatGPT翻译成英文。)
依赖项
~130KB