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 begin_it;
|
||||||
BufferIterator end_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'
|
// line without inserting a '\n'
|
||||||
if (pos == end() and (pos == begin() or *(pos-1) == '\n'))
|
if (pos.is_end())
|
||||||
{
|
{
|
||||||
ByteCount start = 0;
|
ByteCount start = 0;
|
||||||
for (ByteCount i = 0; i < content.length(); ++i)
|
for (ByteCount i = 0; i < content.length(); ++i)
|
||||||
|
@ -361,7 +361,7 @@ void Buffer::apply_modification(const Modification& modification)
|
||||||
{
|
{
|
||||||
case Modification::Insert:
|
case Modification::Insert:
|
||||||
{
|
{
|
||||||
do_insert(pos < end() ? pos : end(), content);
|
do_insert(pos, content);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Modification::Erase:
|
case Modification::Erase:
|
||||||
|
|
|
@ -116,8 +116,7 @@ inline char BufferIterator::operator*() const
|
||||||
inline ByteCount BufferIterator::offset() const
|
inline ByteCount BufferIterator::offset() const
|
||||||
{
|
{
|
||||||
assert(m_buffer);
|
assert(m_buffer);
|
||||||
return line() == 0 ? column()
|
return m_buffer->m_lines[line()].start + column();
|
||||||
: m_buffer->m_lines[line()].start + column();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t BufferIterator::operator-(const BufferIterator& iterator) const
|
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
|
inline bool BufferIterator::is_end() const
|
||||||
{
|
{
|
||||||
assert(m_buffer);
|
assert(m_buffer);
|
||||||
|
if (m_coord.line == m_buffer->line_count())
|
||||||
|
{
|
||||||
|
assert(m_coord.column == 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return offset() == m_buffer->character_count();
|
return offset() == m_buffer->character_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user