Buffer: refactor common iterator warping code into warp_iterators()

This commit is contained in:
Josh Holtrop 2017-01-07 14:15:46 -05:00
parent 38a734b5c1
commit 924d005020
2 changed files with 18 additions and 14 deletions

View File

@ -183,13 +183,7 @@ void Buffer::insert_code_point(const Buffer::Iterator & position, uint32_t code_
ssize_t lines = (code_point == '\n') ? 1 : 0;
if (adjust_iterators)
{
for (auto iterator : m_iterators)
{
if (*iterator >= local_position)
{
iterator->warp(bytes, lines);
}
}
warp_iterators(local_position.offset(), bytes, lines, true);
}
pop_operation();
}
@ -205,17 +199,26 @@ void Buffer::erase_code_point(const Buffer::Iterator & position)
record_change(local_position.address(), bytes, local_position.offset(), false);
m_gap_buffer->erase(local_position.offset(), bytes);
ssize_t lines = (code_point == '\n') ? -1 : 0;
for (auto iterator : m_iterators)
{
if (*iterator > local_position)
{
iterator->warp(-(ssize_t)bytes, lines);
}
}
warp_iterators(local_position.offset(), -(ssize_t)bytes, lines, false);
pop_operation();
}
}
void Buffer::warp_iterators(size_t offset, ssize_t offset_adjustment, ssize_t lines_adjustment, bool include_equal)
{
if (!include_equal)
{
offset++;
}
for (auto iterator : m_iterators)
{
if (iterator->offset() >= offset)
{
iterator->warp(offset_adjustment, lines_adjustment);
}
}
}
void Buffer::pop_operation()
{
if (m_operation_level > 0)

View File

@ -144,6 +144,7 @@ protected:
void load_text_in_buffer(uint8_t * buffer, size_t buffer_size, size_t data_length);
void record_change(uint8_t data[], size_t length, size_t buffer_position, bool insert);
void save_current_operation();
void warp_iterators(size_t offset, ssize_t offset_adjustment, ssize_t lines_adjustments, bool include_equal);
};
#endif