#collection #operations #collecting #statistics #standard #zond-handler

zond

Zond 是一个具有收集统计信息的标准 Rust 集合的 crate。

2 个不稳定版本

0.2.1 2024年6月21日
0.2.0 2024年6月21日
0.1.0 2024年6月20日

659数据结构

每月下载 32

MIT 许可证

27KB
565

Zond

Zond 是一个具有收集统计信息的标准 Rust 集合的 crate。

好吧,也许它只包含 [Vec] 的类似物 - zvec::ZVec。好吧,ZVec 只包含 Vec 的一些方法。但我只是出于好玩才做这个。我不知道有人真的需要这个。

示例

让我们从构建集合开始。

构造函数类似于它们的 std 类似物,但有一个额外的参数 - 结构体 Zond,包含两个字段

  1. zond_handler 的类型为 ZondHandler
    具有单个方法的特例对象,该方法消耗两个参数:id 作为 usizeoperations 作为 Operations。所有操作处理都在这里进行:您可以将其保存到文件或数据库中,发送到您的服务器或直接打印到控制台。
  2. policy 的类型为 Policy
    描述了收集操作将在何时由 zond_handler 处理的规则。

所以首先让我们实现一些 ZondHandler。它将只是将操作打印到 stdout

struct HandlerImpl;

impl<T: OperationType + Debug> ZondHandler<T> for HandlerImpl {
    fn handle(&self, id: usize, operations: Operations<T>) {
        println!("{id} collected");
        operations
            .iter()
            .for_each(|v| println!("{:?}: {:?}", v.get_instant(), v.get_type()));
        println!();
    }
}

接下来,让我们用 HandlerImpl 处理器和这样的策略来构建 Zond,即每次调用三个方法后处理操作。
它将为 ZVec 处理操作

let zond: Zond<ZVecOperation<usize>> = Zond::new(
    HandlerImpl,
    Policy::on_count_operations(NonZeroUsize::new(3).unwrap()),
);

接下来,让我们用 zond 变量构建 ZVec

let mut zvec: ZVec<usize> = ZVec::new(zond);

最后,让我们执行一些操作

zvec.push(1);
zvec.push(2);
zvec.push(5);
zvec.push(5);
zvec.extend_from_within(1..);
zvec.dedup();
drop(zvec);

控制台输出将如下所示

0 collected
Instant { /* */ }: New
Instant { /* */ }: Push { value: 1 }
Instant { /* */ }: Push { value: 2 }

0 collected
Instant { /* */ }: Push { value: 5 }
Instant { /* */ }: Push { value: 5 }
Instant { /* */ }: ExtendFromWithin { src_start_bound: Included(1), src_end_bound: Unbounded }

0 collected
Instant { /* */ }: Dedup

如您所见,操作总是在丢弃时被处理。

无运行时依赖项