aboutsummaryrefslogtreecommitdiff
path: root/src/yellow/red.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/yellow/red.rs')
-rw-r--r--src/yellow/red.rs34
1 files changed, 15 insertions, 19 deletions
diff --git a/src/yellow/red.rs b/src/yellow/red.rs
index 3f0ddd04c..8907100e4 100644
--- a/src/yellow/red.rs
+++ b/src/yellow/red.rs
@@ -1,11 +1,5 @@
1use std::{ 1use std::{ptr, sync::RwLock};
2 ptr, 2use {yellow::GreenNode, TextUnit};
3 sync::RwLock,
4};
5use {
6 TextUnit,
7 yellow::GreenNode,
8};
9 3
10#[derive(Debug)] 4#[derive(Debug)]
11pub(crate) struct RedNode { 5pub(crate) struct RedNode {
@@ -22,9 +16,7 @@ struct ParentData {
22} 16}
23 17
24impl RedNode { 18impl RedNode {
25 pub fn new_root( 19 pub fn new_root(green: GreenNode) -> RedNode {
26 green: GreenNode,
27 ) -> RedNode {
28 RedNode::new(green, None) 20 RedNode::new(green, None)
29 } 21 }
30 22
@@ -42,13 +34,14 @@ impl RedNode {
42 RedNode::new(green, Some(parent_data)) 34 RedNode::new(green, Some(parent_data))
43 } 35 }
44 36
45 fn new( 37 fn new(green: GreenNode, parent: Option<ParentData>) -> RedNode {
46 green: GreenNode,
47 parent: Option<ParentData>,
48 ) -> RedNode {
49 let n_children = green.children().len(); 38 let n_children = green.children().len();
50 let children = (0..n_children).map(|_| None).collect(); 39 let children = (0..n_children).map(|_| None).collect();
51 RedNode { green, parent, children: RwLock::new(children) } 40 RedNode {
41 green,
42 parent,
43 children: RwLock::new(children),
44 }
52 } 45 }
53 46
54 pub(crate) fn green(&self) -> &GreenNode { 47 pub(crate) fn green(&self) -> &GreenNode {
@@ -75,12 +68,15 @@ impl RedNode {
75 if children[idx].is_none() { 68 if children[idx].is_none() {
76 let green_children = self.green.children(); 69 let green_children = self.green.children();
77 let start_offset = self.start_offset() 70 let start_offset = self.start_offset()
78 + green_children[..idx].iter().map(|x| x.text_len()).sum::<TextUnit>(); 71 + green_children[..idx]
79 let child = RedNode::new_child(green_children[idx].clone(), self.into(), start_offset, idx); 72 .iter()
73 .map(|x| x.text_len())
74 .sum::<TextUnit>();
75 let child =
76 RedNode::new_child(green_children[idx].clone(), self.into(), start_offset, idx);
80 children[idx] = Some(child) 77 children[idx] = Some(child)
81 } 78 }
82 children[idx].as_ref().unwrap().into() 79 children[idx].as_ref().unwrap().into()
83
84 } 80 }
85 81
86 pub(crate) fn parent(&self) -> Option<ptr::NonNull<RedNode>> { 82 pub(crate) fn parent(&self) -> Option<ptr::NonNull<RedNode>> {