From 9720e22f6ac343de767b436c172a4d0e48450619 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sat, 4 Oct 2025 09:52:27 +1000 Subject: [PATCH] small code cleanup --- src/dlib | 2 +- src/editor/buffer.d | 105 +++++++++++++++++++------------------------- 2 files changed, 46 insertions(+), 61 deletions(-) diff --git a/src/dlib b/src/dlib index ca5e84f..2af4a29 160000 --- a/src/dlib +++ b/src/dlib @@ -1 +1 @@ -Subproject commit ca5e84f8b9c6f96abe8151e655ebd3f923ced598 +Subproject commit 2af4a293148aadac84d9fec3505d2adcdb747298 diff --git a/src/editor/buffer.d b/src/editor/buffer.d index 1fae450..c1ef764 100644 --- a/src/editor/buffer.d +++ b/src/editor/buffer.d @@ -104,9 +104,9 @@ CountLF(u8[] data) } void -Fix(FlatBuffer* buffer) +Fix(FlatBuffer* fb) { - with(buffer) + with(fb) { Reset(&ls_arena); line_starts = AllocArray!(LineStart)(&ls_arena, lf_count+1); @@ -158,7 +158,7 @@ Fix(FlatBuffer* buffer) dirty = false; - TokenizeD(buffer); + TokenizeD(fb); } } @@ -235,9 +235,9 @@ Insert(FlatBuffer* fb, u8[] insert, u64 length, u64 pos) } u64 temp_len = fb.length-pos; - u8[] temp = AllocArray!(u8)(&fb.arena, temp_len); - temp[0 .. temp_len] = fb.data[pos .. pos+temp_len]; + u8[] temp = AllocCopySlice!(u8)(&fb.arena, fb.data, pos, temp_len); + fb.data[pos .. pos+length] = insert[0 .. length]; pos += length; fb.data[pos .. pos+temp_len] = temp[0 .. temp_len]; @@ -252,9 +252,9 @@ Insert(FlatBuffer* fb, u8[] insert, u64 length, u64 pos) } void -Insert(FlatBuffer* buffer, u8[] insert, u64 length) +Insert(FlatBuffer* fb, u8[] insert, u64 length) { - Insert(buffer, insert, length, buffer.buf_pos); + Insert(fb, insert, length, fb.buf_pos); } pragma(inline) u64 @@ -321,13 +321,22 @@ LineLength(FlatBuffer* fb, u64 line) } void -GetLines(FlatBuffer* buffer, LineBuffers* linebufs, u64 length) +GetLines(FlatBuffer* fb, LineBuffers* linebufs, u64 length) { - GetLines(buffer, linebufs, buffer.offset, length); + GetLines(fb, linebufs, fb.offset, length); +} + +pragma(inline) void +SliceLineBuffer(FlatBuffer* fb, LineBuffers* lbufs, LineBuffer* lbuf, u64 start, u64 len) +{ + lbuf.text = fb.data[start .. start+len]; + lbuf.style = !Nil(fb.tk.first) ? fb.tk.buffer[start .. start+len] : []; + + lbufs.count += 1; } void -GetLines(FlatBuffer* buffer, LineBuffers* linebufs, u64 start_line, u64 length) +GetLines(FlatBuffer* fb, LineBuffers* linebufs, u64 start_line, u64 length) { assert(linebufs != null, "GetLines failure: linebufs is null"); @@ -335,60 +344,36 @@ GetLines(FlatBuffer* buffer, LineBuffers* linebufs, u64 start_line, u64 length) linebufs.first = Alloc!(LineBuffer)(&linebufs.arena); linebufs.count = 0; - u64 total_lines = buffer.line_starts.length; + u64 total_lines = fb.line_starts.length; start_line = Min(start_line, total_lines); u64 end_line = Min(start_line + length, total_lines); - if(buffer.length == 0) + if(fb.length == 0) { linebufs.first.text = AllocArray!(u8)(&linebufs.arena, 1); - linebufs.first.text[0] = 0; } - else if(start_line == end_line) with(buffer) + else if(start_line == end_line) with(fb) { - u64 start_of_line = line_starts[start_line].pos; - u64 len = LineLength(buffer, start_line); - - linebufs.first.text = AllocArray!(u8)(&linebufs.arena, len); - linebufs.first.text = data[start_of_line .. start_of_line+len]; - - if(!Nil(buffer.tk.first)) - { - linebufs.first.style = Alloc!(TS)(&linebufs.arena, len); - linebufs.first.style = buffer.tk.buffer[start_of_line .. start_of_line+len]; - } - - linebufs.count += 1; + SliceLineBuffer(fb, linebufs, linebufs.first, line_starts[start_line].pos, LineLength(fb, start_line)); } else with(linebufs) { LineBuffer* current = first; for(u64 i = start_line; i < end_line; i += 1) { - u64 start = buffer.line_starts[i].pos; - u64 len = LineLength(buffer, i); + u64 start = fb.line_starts[i].pos; + u64 len = LineLength(fb, i); if(len > 0) { - current.text = Alloc!(u8)(&arena, len); - current.text[0 .. len] = buffer.data[start .. start+len]; - - if(!Nil(buffer.tk.first)) - { - current.style = Alloc!(TS)(&arena, len); - current.style[0 .. len] = buffer.tk.buffer[start .. start+len]; - } - - count += 1; - + SliceLineBuffer(fb, linebufs, current, start, len); current.next = Alloc!(LineBuffer)(&arena); current = current.next; } - if(i == buffer.lf_count && buffer.data[buffer.length-1] == '\n') + if(i == fb.lf_count && fb.data[fb.length-1] == '\n') { current.text = AllocArray!(u8)(&arena, 1); - current.text[0] = 0; count += 1; current.next = Alloc!(LineBuffer)(&arena); @@ -639,47 +624,47 @@ AdjustOffset(FlatBuffer* fb) } void -Backspace(FlatBuffer* buffer) +Backspace(FlatBuffer* fb) { - if(buffer.buf_pos-1 >= 0) + if(fb.buf_pos-1 >= 0) { - buffer.buf_pos -= 1; - Delete(buffer, 1, buffer.buf_pos); + fb.buf_pos -= 1; + Delete(fb, 1, fb.buf_pos); } } void -Delete(FlatBuffer* buffer, u64 length, u64 pos) +Delete(FlatBuffer* fb, u64 length, u64 pos) { u64 end = pos+length; - assert(end <= buffer.length, "Delete failure: pos+length is not in range"); + assert(end <= fb.length, "Delete failure: pos+length is not in range"); - for(u64 i = pos; i < buffer.length && i < pos+length; i += 1) + for(u64 i = pos; i < fb.length && i < pos+length; i += 1) { - if(buffer.data[i] == '\n') + if(fb.data[i] == '\n') { - buffer.lf_count -= 1; + fb.lf_count -= 1; } } u8[] temp; - if(end != buffer.length) + if(end != fb.length) { - temp = AllocArray!(u8)(&buffer.arena, buffer.length-end); - temp[0 .. temp.length] = buffer.data[end .. buffer.length]; - buffer.data[pos .. pos+temp.length] = temp[0 .. temp.length]; + temp = AllocArray!(u8)(&fb.arena, fb.length-end); + temp[0 .. temp.length] = fb.data[end .. fb.length]; + fb.data[pos .. pos+temp.length] = temp[0 .. temp.length]; } - buffer.length -= length; + fb.length -= length; - Fix(buffer); + Fix(fb); } void -Replace(FlatBuffer* buffer, u8[] insert, u64 length, u64 pos, u64 delete_length) +Replace(FlatBuffer* fb, u8[] insert, u64 length, u64 pos, u64 delete_length) { - Delete(buffer, delete_length, pos); - Insert(buffer, insert, insert.length, pos); + Delete(fb, delete_length, pos); + Insert(fb, insert, insert.length, pos); } unittest