Skip to content

Commit 0550597

Browse files
committed
Use cached buffer position conversions for text properties
1 parent 4ae77ba commit 0550597

1 file changed

Lines changed: 29 additions & 53 deletions

File tree

neovm-core/src/buffer/buffer_text.rs

Lines changed: 29 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -489,24 +489,16 @@ impl BufferText {
489489
) -> bool {
490490
// GNU intervals are character-indexed; BufferText owns the conversion
491491
// from buffer byte offsets into interval positions.
492-
let (start, end) = {
493-
let storage = self.storage.borrow();
494-
(
495-
storage.gap.byte_to_char(start),
496-
storage.gap.byte_to_char(end),
497-
)
498-
};
492+
let start = self.buf_bytepos_to_charpos(start);
493+
let end = self.buf_bytepos_to_charpos(end);
499494
self.storage
500495
.borrow_mut()
501496
.text_props
502497
.put_property(start, end, name, value)
503498
}
504499

505500
pub fn text_props_get_property(&self, pos: usize, name: Value) -> Option<Value> {
506-
let pos = {
507-
let storage = self.storage.borrow();
508-
storage.gap.byte_to_char(pos)
509-
};
501+
let pos = self.buf_bytepos_to_charpos(pos);
510502
self.storage
511503
.borrow()
512504
.text_props
@@ -515,83 +507,67 @@ impl BufferText {
515507
}
516508

517509
pub fn text_props_get_properties(&self, pos: usize) -> HashMap<Value, Value> {
518-
let pos = {
519-
let storage = self.storage.borrow();
520-
storage.gap.byte_to_char(pos)
521-
};
510+
let pos = self.buf_bytepos_to_charpos(pos);
522511
self.storage.borrow().text_props.get_properties(pos)
523512
}
524513

525514
pub fn text_props_get_properties_ordered(&self, pos: usize) -> Vec<(Value, Value)> {
526-
let pos = {
527-
let storage = self.storage.borrow();
528-
storage.gap.byte_to_char(pos)
529-
};
515+
let pos = self.buf_bytepos_to_charpos(pos);
530516
self.storage.borrow().text_props.get_properties_ordered(pos)
531517
}
532518

533519
pub fn text_props_remove_property(&self, start: usize, end: usize, name: Value) -> bool {
534-
let (start, end) = {
535-
let storage = self.storage.borrow();
536-
(
537-
storage.gap.byte_to_char(start),
538-
storage.gap.byte_to_char(end),
539-
)
540-
};
520+
let start = self.buf_bytepos_to_charpos(start);
521+
let end = self.buf_bytepos_to_charpos(end);
541522
self.storage
542523
.borrow_mut()
543524
.text_props
544525
.remove_property(start, end, name)
545526
}
546527

547528
pub fn text_props_remove_all(&self, start: usize, end: usize) {
548-
let (start, end) = {
549-
let storage = self.storage.borrow();
550-
(
551-
storage.gap.byte_to_char(start),
552-
storage.gap.byte_to_char(end),
553-
)
554-
};
529+
let start = self.buf_bytepos_to_charpos(start);
530+
let end = self.buf_bytepos_to_charpos(end);
555531
self.storage
556532
.borrow_mut()
557533
.text_props
558534
.remove_all_properties(start, end);
559535
}
560536

561537
pub fn text_props_next_change(&self, pos: usize) -> Option<usize> {
562-
let storage = self.storage.borrow();
563-
let char_pos = storage.gap.byte_to_char(pos);
564-
storage
565-
.text_props
566-
.next_property_change(char_pos)
567-
.map(|next| storage.gap.char_to_byte(next))
538+
let char_pos = self.buf_bytepos_to_charpos(pos);
539+
let next = {
540+
self.storage
541+
.borrow()
542+
.text_props
543+
.next_property_change(char_pos)
544+
};
545+
next.map(|next| self.buf_charpos_to_bytepos(next))
568546
}
569547

570548
pub fn text_props_previous_change(&self, pos: usize) -> Option<usize> {
571-
let storage = self.storage.borrow();
572-
let char_pos = storage.gap.byte_to_char(pos);
573-
storage
574-
.text_props
575-
.previous_property_change(char_pos)
576-
.map(|prev| storage.gap.char_to_byte(prev))
549+
let char_pos = self.buf_bytepos_to_charpos(pos);
550+
let prev = {
551+
self.storage
552+
.borrow()
553+
.text_props
554+
.previous_property_change(char_pos)
555+
};
556+
prev.map(|prev| self.buf_charpos_to_bytepos(prev))
577557
}
578558

579559
pub fn text_props_append_shifted(&self, other: &TextPropertyTable, byte_offset: usize) {
580-
let char_offset = {
581-
let storage = self.storage.borrow();
582-
storage.gap.byte_to_char(byte_offset)
583-
};
560+
let char_offset = self.buf_bytepos_to_charpos(byte_offset);
584561
self.storage
585562
.borrow_mut()
586563
.text_props
587564
.append_shifted(other, char_offset);
588565
}
589566

590567
pub fn text_props_slice(&self, start: usize, end: usize) -> TextPropertyTable {
591-
let storage = self.storage.borrow();
592-
let start = storage.gap.byte_to_char(start);
593-
let end = storage.gap.byte_to_char(end);
594-
storage.text_props.slice(start, end)
568+
let start = self.buf_bytepos_to_charpos(start);
569+
let end = self.buf_bytepos_to_charpos(end);
570+
self.storage.borrow().text_props.slice(start, end)
595571
}
596572

597573
pub fn text_props_intervals_snapshot(&self) -> Vec<PropertyInterval> {

0 commit comments

Comments
 (0)