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
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