1use ropey::Rope;
2
3#[derive(Clone, Debug, PartialEq)]
4pub struct OpaqueDiff {
5 pub byte_index: usize,
6 pub old_byte_length: usize,
7 pub new_byte_length: usize,
8 pub char_index: usize,
9 pub old_char_length: usize,
10 pub new_char_length: usize,
11}
12
13impl OpaqueDiff {
14 #[inline]
15 pub fn new(
16 byte_index: usize,
17 old_byte_length: usize,
18 new_byte_length: usize,
19 char_index: usize,
20 old_char_length: usize,
21 new_char_length: usize,
22 ) -> Self {
23 Self {
24 byte_index,
25 old_byte_length,
26 new_byte_length,
27 char_index,
28 old_char_length,
29 new_char_length,
30 }
31 }
32
33 #[inline]
34 pub fn empty() -> Self {
35 Self {
36 byte_index: 0,
37 old_byte_length: 0,
38 new_byte_length: 0,
39 char_index: 0,
40 old_char_length: 0,
41 new_char_length: 0,
42 }
43 }
44
45 #[inline]
46 pub fn is_empty(&self) -> bool {
47 *self == OpaqueDiff::empty()
48 }
49
50 #[inline]
51 pub fn reverse(&self) -> Self {
52 Self {
53 byte_index: self.byte_index,
54 old_byte_length: self.new_byte_length,
55 new_byte_length: self.old_byte_length,
56 char_index: self.char_index,
57 old_char_length: self.new_char_length,
58 new_char_length: self.old_char_length,
59 }
60 }
61}
62
63pub struct DeleteOperation {
64 pub diff: OpaqueDiff,
65 pub deleted: Rope,
66}
67
68impl DeleteOperation {
69 pub fn empty() -> Self {
70 Self {
71 diff: OpaqueDiff::empty(),
72 deleted: Rope::new(),
73 }
74 }
75}
76
77#[cfg(test)]
78mod tests {
79 use super::*;
80 use ropey::Rope;
81
82 #[test]
83 fn mem_size_of_diffs() {
84 assert_eq!(std::mem::size_of::<OpaqueDiff>(), 48);
85 assert_eq!(std::mem::size_of::<Rope>(), 8);
86 assert_eq!(std::mem::size_of::<DeleteOperation>(), 56);
87 }
88}