@@ -47,98 +47,15 @@ impl LinkedArray<u32> {
4747 vec ! [ 0 ]
4848 }
4949
50- fn replace_pair ( & mut self , idx : usize , token_id : u32 ) -> ( ) {
51- // Extract all the indices and values we need first
52- // let (curr_elem, next_elem, next_next_idx) = {
53- // let curr = self.vec.get(idx)?;
54- // if let Some(curr) = curr {
55- // let next_idx = curr.next?;
56- // let next = self.vec.get(next_idx)?;
57- // if let Some(next) = next {
58- // let next_next_idx = next.next;
59- // return (curr.elem, next.elem, next_next_idx)
60- // };
61- // }
62- // };
63-
64- // what do i actually need to write?
65-
66- let ( curr_elem, new_token_id, next_next_idx) = match self . vec . get ( idx) {
67- Some ( Some ( curr) ) => {
68- match curr. next . and_then ( |x| self . vec . get ( x) ) {
69- Some ( Some ( next) ) => {
70- // byte representation
71- // string interning
72- let curr_elem_bytes = self . interner . get_bytes ( curr. elem ) ;
73- let next_elem_bytes = self . interner . get_bytes ( next. elem ) ;
74- let merged_bytes = [ curr_elem_bytes, next_elem_bytes] . concat ( ) ;
75- let new_token_id = self . interner . intern ( merged_bytes) ;
76-
77- // update curr elem.
78- //curr.elem = new_token_id;
79-
80- let next_next_idx = next. next ;
81- match next. next . and_then ( |x| self . vec . get ( x) ) {
82- Some ( Some ( next_next) ) => {
83- // set curr's next to next-next.
84- // curr.next = next_next_idx;
85- // next_next.prev = Some(idx);
86- ( Some ( curr. elem ) , Some ( new_token_id) , next_next_idx)
87- } ,
88- _ => ( Some ( curr. elem ) , Some ( new_token_id) , None )
89- }
90- } ,
91- _ => ( None , None , None )
92- }
93- } ,
94- _ => ( None , None , None )
95- } ;
96-
97- // if curr exists.
98- if let Some ( Some ( curr_mut) ) = self . vec . get_mut ( idx) {
99-
100- // curr.elem <- new_token_id
101- curr_mut. elem = new_token_id. unwrap ( ) ;
102-
103- // if next_next exists
104- // if let Some(Some(next_next_mut)) = self.vec.get_mut(next_next_idx.unwrap()) {
105- // // curr.next <- next_next_idx
106- // curr_mut.next = next_next_idx;
107- // } else {
108- // curr_mut.next = None;
109- // }
110-
111-
112- self . vec [ next_next_idx. unwrap ( ) ] . unwrap ( ) . prev = Some ( idx) ;
113-
50+ fn replace_pair ( & mut self , idx : usize , token_id : u32 ) -> Result < ( ) , MergeError > {
51+ if idx >= self . vec . len ( ) {
52+ return Err ( MergeError :: InvalidIndex )
11453 }
11554
116-
117-
118- // Get the byte representations for merging
119- // let curr_elem_bytes = self.interner.get_bytes(curr_elem);
120- // let next_elem_bytes = self.interner.get_bytes(next_elem);
121- // let merged_bytes = [curr_elem_bytes, next_elem_bytes].concat();
122- // let new_token_id = self.interner.intern(merged_bytes);
123-
124- // // mutations
125-
126- // // Update current node with merged token
127- // self.vec[idx].elem = new_token_id;
128- // self.vec[idx].next = next_next_idx;
129-
130- // // Update next-next node's prev pointer (if it exists)
131- // if let Some(next_next_idx) = next_next_idx {
132- // if next_next_idx < self.vec.len() {
133- // self.vec[next_next_idx].prev = Some(idx);
134- // }
135- // }
136-
137- // Mark the next node as deleted or handle it as needed
138- // You might want to mark it as inactive rather than actually removing it
55+ let left_ref = self . vec [ idx] . as_ref ( ) ;
13956
140- ( ) ;
141- }
57+ Ok ( ( ) )
58+ }
14259
14360 fn prev ( & self , idx : usize , ) -> Option < & LinkedArrayNode < u32 > > {
14461 // let node = self.vec.get(idx)?;
0 commit comments