diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2024-01-06 15:17:49 -0800 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2024-01-06 15:17:49 -0800 |
| commit | fb6c02e033196cdc8d2a3642ea8e869d18b37fed (patch) | |
| tree | bafe64869f0fb98c55965976a3048a732bb8d3fc /src/rope.rs | |
| parent | 9ac429aa26529af2f753d01fe6e4fe5046bdf30f (diff) | |
| download | editor-fb6c02e033196cdc8d2a3642ea8e869d18b37fed.tar.zst | |
Fix some bugs with long lines.
Diffstat (limited to 'src/rope.rs')
| -rw-r--r-- | src/rope.rs | 37 |
1 files changed, 1 insertions, 36 deletions
diff --git a/src/rope.rs b/src/rope.rs index 25da1fc..34c459b 100644 --- a/src/rope.rs +++ b/src/rope.rs @@ -142,42 +142,7 @@ impl Rope { } pub fn insert(&self, pos: usize, c: u8) -> Rope { - match self { - Rope(Node::Leaf(l)) => { - if self.len() < MAX_NODE_SIZE { - let mut new_buf = vec![0; self.len() + 1]; - new_buf[..pos].copy_from_slice(&l.bytes()[..pos]); - new_buf[pos] = c; - new_buf[pos + 1..].copy_from_slice(&l.bytes()[pos..]); - return Rope::leaf(new_buf); - } - let half = MAX_NODE_SIZE / 2; - let mut buf_left; - let mut buf_right; - if pos <= half { - buf_left = vec![0; half+1]; - buf_right = vec![0; half]; - buf_left[..pos].copy_from_slice(&l.bytes()[..pos]); - buf_left[pos] = c; - buf_left[pos+1..].copy_from_slice(&l.bytes()[pos..half]); - buf_right.copy_from_slice(&l.bytes()[half..]); - } else { - buf_left = vec![0; half]; - buf_right = vec![0; half+1]; - buf_left.copy_from_slice(&l.bytes()[..half]); - buf_right[..pos-half].copy_from_slice(&l.bytes()[half..pos]); - buf_right[pos-half] = c; - buf_right[pos-half+1..].copy_from_slice(&l.bytes()[pos..]); - } - return Rope::leaf(buf_left).concat(&Rope::leaf(buf_right)); - } - Rope(Node::Branch(b)) => { - if pos < b.left.len() { - return b.left.insert(pos, c).concat(&b.right); - } - return b.left.concat(&b.right.insert(pos - b.left.len(), c)); - } - } + return self.slice(0, pos).concat(&Rope::leaf(vec![c])).concat(&self.slice(pos, self.len())); } pub fn open(path: &Path) -> Result<Rope, Box<dyn Error>> { |
