cfx_execute_helper/observer/
utils.rs1#[derive(Default)]
2pub struct CheckpointLog<T> {
3 data: Vec<T>,
4 checkpoints: Vec<usize>,
5}
6
7impl<T> CheckpointLog<T> {
8 pub fn push(&mut self, item: T) { self.data.push(item); }
9
10 pub fn checkpoint(&mut self) { self.checkpoints.push(self.data.len()); }
11
12 pub fn revert_checkpoint(&mut self) {
13 let start = self.checkpoints.pop().unwrap();
14 self.data.truncate(start);
15 }
16
17 pub fn discard_checkpoint(&mut self) { self.checkpoints.pop().unwrap(); }
18
19 pub fn drain(self) -> Vec<T> { self.data }
20}