cfx_execute_helper/observer/
utils.rs

1#[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}