Buffer: end is either one past last character, or one past last line
This commit is contained in:
parent
72cc61c987
commit
410067282a
|
@ -256,9 +256,9 @@ void Buffer::do_insert(const BufferIterator& pos, const String& content)
|
|||
|
||||
BufferIterator begin_it;
|
||||
BufferIterator end_it;
|
||||
// if we inserted at the end of the buffer, we may have created a new
|
||||
// if we inserted at the end of the buffer, we have created a new
|
||||
// line without inserting a '\n'
|
||||
if (pos == end() and (pos == begin() or *(pos-1) == '\n'))
|
||||
if (pos.is_end())
|
||||
{
|
||||
ByteCount start = 0;
|
||||
for (ByteCount i = 0; i < content.length(); ++i)
|
||||
|
@ -361,7 +361,7 @@ void Buffer::apply_modification(const Modification& modification)
|
|||
{
|
||||
case Modification::Insert:
|
||||
{
|
||||
do_insert(pos < end() ? pos : end(), content);
|
||||
do_insert(pos, content);
|
||||
break;
|
||||
}
|
||||
case Modification::Erase:
|
||||
|
|
|
@ -116,8 +116,7 @@ inline char BufferIterator::operator*() const
|
|||
inline ByteCount BufferIterator::offset() const
|
||||
{
|
||||
assert(m_buffer);
|
||||
return line() == 0 ? column()
|
||||
: m_buffer->m_lines[line()].start + column();
|
||||
return m_buffer->m_lines[line()].start + column();
|
||||
}
|
||||
|
||||
inline size_t BufferIterator::operator-(const BufferIterator& iterator) const
|
||||
|
@ -221,6 +220,11 @@ inline bool BufferIterator::is_begin() const
|
|||
inline bool BufferIterator::is_end() const
|
||||
{
|
||||
assert(m_buffer);
|
||||
if (m_coord.line == m_buffer->line_count())
|
||||
{
|
||||
assert(m_coord.column == 0);
|
||||
return true;
|
||||
}
|
||||
return offset() == m_buffer->character_count();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user