101 个不稳定版本
0.51.0 | 2023年9月30日 |
---|---|
0.49.0 | 2023年3月26日 |
0.48.0 | 2022年12月19日 |
0.47.2 | 2022年6月18日 |
0.2.4 | 2016年12月26日 |
#280 在 数据结构
每月406次下载
用于 2 crates
68KB
1.5K SLoC
undo
撤销-重做库。
实现了一个 命令模式,其中所有编辑都是通过创建应用修改的对象来完成的。所有对象都知道如何撤销它们应用的变化,并且通过使用提供的数据结构,可以很容易地撤销和重做对目标所做的编辑。
示例
use undo::{Edit, Record};
struct Add(char);
impl Edit for Add {
type Target = String;
type Output = ();
fn edit(&mut self, target: &mut String) {
target.push(self.0);
}
fn undo(&mut self, target: &mut String) {
self.0 = target.pop().unwrap();
}
}
fn main() {
let mut target = String::new();
let mut record = Record::new();
record.edit(&mut target, Add('a'));
record.edit(&mut target, Add('b'));
record.edit(&mut target, Add('c'));
assert_eq!(target, "abc");
record.undo(&mut target);
record.undo(&mut target);
record.undo(&mut target);
assert_eq!(target, "");
record.redo(&mut target);
record.redo(&mut target);
record.redo(&mut target);
assert_eq!(target, "abc");
}
许可协议
根据以下之一许可:
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则根据Apache-2.0许可证定义的您有意提交以包含在工作中的任何贡献,都应如上所述双重许可,而无需任何额外的条款或条件。
依赖关系
~0–9.5MB
~44K SLoC