#迭代器 #事务 #提交 #恐慌 #原始 #回滚 #中止

transactional_iterator

允许提交或中止进度的迭代器

5 个版本 (3 个破坏性更新)

0.4.0 2024 年 5 月 23 日
0.3.1 2024 年 5 月 23 日
0.3.0 2024 年 5 月 22 日
0.2.0 2024 年 5 月 22 日
0.1.0 2024 年 5 月 22 日

#768 in Rust 模式

MIT/Apache

25KB
270

可以使用 Transaction 来对迭代器进行更改,并且只有当事务提交时才应用这些更改。当 Transaction 被回滚时,更改将被丢弃。这对于实现回溯搜索、解析器、撤销功能、无限预览等非常有用。

原始迭代器必须实现 'Clone' 接口才能与事务迭代器一起使用。

策略

可以使用 3 种不同的策略创建事务

  • 恐慌:
    如果在释放时未提交或回滚,则会引发恐慌。
  • 回滚:
    在释放或恐慌时将更改回滚。
  • 自动提交:
    在释放或恐慌时将更改提交。

示例

use transactional_iterator::{Transaction, Panic};

let mut iter = vec![1, 2, 3].into_iter();
let mut transaction = Transaction::new(&mut iter, Panic);

// iterate within the transaction
assert_eq!(transaction.next(), Some(1));
assert_eq!(transaction.next(), Some(2));

// Commit the transaction
transaction.commit();

// The changes are now applied
assert_eq!(iter.next(), Some(3));

无运行时依赖