refactor: replace cursel_length with Buffer.Node.get_range
get_range is likely much faster because it only walks the buffer tree once. Besides the performance difference it should give identical results.
This commit is contained in:
		
							parent
							
								
									8246f2b0ba
								
							
						
					
					
						commit
						18bc89edf8
					
				
					 2 changed files with 2 additions and 22 deletions
				
			
		|  | @ -1632,26 +1632,6 @@ pub const Editor = struct { | ||||||
|         return self.primary.col - self.view.col; |         return self.primary.col - self.view.col; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn cursel_length(root: Buffer.Root, cursel_: CurSel, metrics: Buffer.Metrics) usize { |  | ||||||
|         var length: usize = 0; |  | ||||||
|         var cursel = cursel_; |  | ||||||
|         cursel.check_selection(root, metrics); |  | ||||||
|         if (cursel.selection) |*sel| { |  | ||||||
|             sel.normalize(); |  | ||||||
|             if (sel.begin.row == sel.end.row) { |  | ||||||
|                 length = sel.end.col - sel.begin.col; |  | ||||||
|             } else { |  | ||||||
|                 var row = sel.begin.row; |  | ||||||
|                 while (row < sel.end.row) { |  | ||||||
|                     length += root.line_width(row, metrics) catch 0; |  | ||||||
|                     row += 1; |  | ||||||
|                 } |  | ||||||
|                 length = length + sel.end.col - sel.begin.col; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return length; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     fn update_event(self: *Self) !void { |     fn update_event(self: *Self) !void { | ||||||
|         const primary = self.get_primary(); |         const primary = self.get_primary(); | ||||||
|         const dirty = if (self.buffer) |buf| buf.is_dirty() else false; |         const dirty = if (self.buffer) |buf| buf.is_dirty() else false; | ||||||
|  |  | ||||||
|  | @ -615,12 +615,12 @@ fn replace_cursel_with_character(ed: *Editor, root: Buffer.Root, cursel: *CurSel | ||||||
|         return error.Stop; |         return error.Stop; | ||||||
|     const no_selection = try select_char_if_no_selection(cursel, root, ed.metrics); |     const no_selection = try select_char_if_no_selection(cursel, root, ed.metrics); | ||||||
|     var begin: Cursor = undefined; |     var begin: Cursor = undefined; | ||||||
|  |     var sel_length: usize = 1; | ||||||
|     if (cursel.selection) |*sel| { |     if (cursel.selection) |*sel| { | ||||||
|         sel.normalize(); |         sel.normalize(); | ||||||
|         begin = sel.*.begin; |         begin = sel.*.begin; | ||||||
|  |         _ = root.get_range(sel.*, null, null, &sel_length, ed.metrics) catch return error.Stop; | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     const sel_length = Editor.cursel_length(root, cursel.*, ed.metrics); |  | ||||||
|     const total_length = sel_length * egc.len; |     const total_length = sel_length * egc.len; | ||||||
|     var sfa = std.heap.stackFallback(4096, ed.allocator); |     var sfa = std.heap.stackFallback(4096, ed.allocator); | ||||||
|     const sfa_allocator = sfa.get(); |     const sfa_allocator = sfa.get(); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue