Buffer: end is either one past last character, or one past last line

This commit is contained in:
Maxime Coste 2013-01-23 18:52:42 +01:00
parent 72cc61c987
commit 410067282a
2 changed files with 9 additions and 5 deletions

View File

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

View File

@ -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();
}