hex_patch/app/history/
change.rs

1#[derive(Debug, Clone, PartialEq, Eq)]
2pub struct Change {
3    offset: usize,
4    old: Vec<u8>,
5    new: Vec<u8>,
6}
7
8impl Change {
9    pub fn new(offset: usize, old: &[u8], new: &[u8]) -> Self {
10        if old.len() != new.len() {
11            panic!("{}", t!("panic.data_length_mismatch"));
12        }
13        Self {
14            offset,
15            old: old.to_vec(),
16            new: new.to_vec(),
17        }
18    }
19
20    pub fn offset(&self) -> usize {
21        self.offset
22    }
23
24    pub fn len(&self) -> usize {
25        self.old.len()
26    }
27
28    pub fn is_empty(&self) -> bool {
29        self.old.is_empty()
30    }
31
32    pub fn apply(&self, data: &mut Vec<u8>) {
33        data.splice(
34            self.offset..self.offset + self.old.len(),
35            self.new.iter().cloned(),
36        );
37    }
38
39    pub fn revert(&self, data: &mut Vec<u8>) {
40        data.splice(
41            self.offset..self.offset + self.new.len(),
42            self.old.iter().cloned(),
43        );
44    }
45}