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 模式
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));