small code cleanup

This commit is contained in:
Matthew 2025-10-04 09:52:27 +10:00
parent 65d834f08c
commit 9720e22f6a
2 changed files with 46 additions and 61 deletions

@ -1 +1 @@
Subproject commit ca5e84f8b9c6f96abe8151e655ebd3f923ced598 Subproject commit 2af4a293148aadac84d9fec3505d2adcdb747298

View File

@ -104,9 +104,9 @@ CountLF(u8[] data)
} }
void void
Fix(FlatBuffer* buffer) Fix(FlatBuffer* fb)
{ {
with(buffer) with(fb)
{ {
Reset(&ls_arena); Reset(&ls_arena);
line_starts = AllocArray!(LineStart)(&ls_arena, lf_count+1); line_starts = AllocArray!(LineStart)(&ls_arena, lf_count+1);
@ -158,7 +158,7 @@ Fix(FlatBuffer* buffer)
dirty = false; 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; 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]; fb.data[pos .. pos+length] = insert[0 .. length];
pos += length; pos += length;
fb.data[pos .. pos+temp_len] = temp[0 .. temp_len]; fb.data[pos .. pos+temp_len] = temp[0 .. temp_len];
@ -252,9 +252,9 @@ Insert(FlatBuffer* fb, u8[] insert, u64 length, u64 pos)
} }
void 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 pragma(inline) u64
@ -321,13 +321,22 @@ LineLength(FlatBuffer* fb, u64 line)
} }
void 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 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"); 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.first = Alloc!(LineBuffer)(&linebufs.arena);
linebufs.count = 0; linebufs.count = 0;
u64 total_lines = buffer.line_starts.length; u64 total_lines = fb.line_starts.length;
start_line = Min(start_line, total_lines); start_line = Min(start_line, total_lines);
u64 end_line = Min(start_line + length, 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 = 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; SliceLineBuffer(fb, linebufs, linebufs.first, line_starts[start_line].pos, LineLength(fb, start_line));
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;
} }
else with(linebufs) else with(linebufs)
{ {
LineBuffer* current = first; LineBuffer* current = first;
for(u64 i = start_line; i < end_line; i += 1) for(u64 i = start_line; i < end_line; i += 1)
{ {
u64 start = buffer.line_starts[i].pos; u64 start = fb.line_starts[i].pos;
u64 len = LineLength(buffer, i); u64 len = LineLength(fb, i);
if(len > 0) if(len > 0)
{ {
current.text = Alloc!(u8)(&arena, len); SliceLineBuffer(fb, linebufs, current, start, 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;
current.next = Alloc!(LineBuffer)(&arena); current.next = Alloc!(LineBuffer)(&arena);
current = current.next; 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 = AllocArray!(u8)(&arena, 1);
current.text[0] = 0;
count += 1; count += 1;
current.next = Alloc!(LineBuffer)(&arena); current.next = Alloc!(LineBuffer)(&arena);
@ -639,47 +624,47 @@ AdjustOffset(FlatBuffer* fb)
} }
void void
Backspace(FlatBuffer* buffer) Backspace(FlatBuffer* fb)
{ {
if(buffer.buf_pos-1 >= 0) if(fb.buf_pos-1 >= 0)
{ {
buffer.buf_pos -= 1; fb.buf_pos -= 1;
Delete(buffer, 1, buffer.buf_pos); Delete(fb, 1, fb.buf_pos);
} }
} }
void void
Delete(FlatBuffer* buffer, u64 length, u64 pos) Delete(FlatBuffer* fb, u64 length, u64 pos)
{ {
u64 end = pos+length; 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; u8[] temp;
if(end != buffer.length) if(end != fb.length)
{ {
temp = AllocArray!(u8)(&buffer.arena, buffer.length-end); temp = AllocArray!(u8)(&fb.arena, fb.length-end);
temp[0 .. temp.length] = buffer.data[end .. buffer.length]; temp[0 .. temp.length] = fb.data[end .. fb.length];
buffer.data[pos .. pos+temp.length] = temp[0 .. temp.length]; fb.data[pos .. pos+temp.length] = temp[0 .. temp.length];
} }
buffer.length -= length; fb.length -= length;
Fix(buffer); Fix(fb);
} }
void 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); Delete(fb, delete_length, pos);
Insert(buffer, insert, insert.length, pos); Insert(fb, insert, insert.length, pos);
} }
unittest unittest