#iterator #buffer #fluid #buffered #place

buter

流体缓冲区作为迭代器的位置

8个版本 (稳定)

1.2.4 2022年7月30日
1.2.2 2022年7月9日
0.1.0 2022年7月6日

算法类别中排名第1560

每月下载量24

MIT许可协议

9KB
167

你有回调(以及迭代器难以处理的其它情况)并且厌倦了将它们.collect()Vecs中吗?有一个解决方案。

Buter - 带有流体缓冲区的缓冲迭代器,用作所有迭代的存放位置

使用方法

fn callback_work<F>(mut f: F)
where
    F: FnMut(usize),
{
    for i in 0..10_000 {
        f(i);
    }
}

use buter::Buter;

struct Worker {
    buf: Buter<usize>,
    // ...
}

impl Worker {
    fn work(&self) -> impl Iterator<Item = usize> + '_ {
        let mut writer = self.buf.writer();
        callback_work(|i| writer.extend(Some(i)));
        writer.into_iter()
    }
}

基准测试

这既适用于大量结果,也适用于少量结果

// buter                   bench:    14 ns/iter (+/- 5)
// vec_push                bench:   212 ns/iter (+/- 130)
// vec_push_with_capacity  bench:    54 ns/iter (+/- 32)
// buter                   time:   [1.6348 ms 1.6445 ms 1.6549 ms]
// vec_push                time:   [4.4204 ms 4.4750 ms 4.5360 ms]
// vec_push_with_capacity  time:   [2.6034 ms 2.6338 ms 2.6680 ms]

依赖项

~0.5–5.5MB
~13K SLoC