small code cleanup
This commit is contained in:
parent
65d834f08c
commit
9720e22f6a
2
src/dlib
2
src/dlib
@ -1 +1 @@
|
||||
Subproject commit ca5e84f8b9c6f96abe8151e655ebd3f923ced598
|
||||
Subproject commit 2af4a293148aadac84d9fec3505d2adcdb747298
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user