DisplayBuffer optimization, suppressed some paranoid checks

This commit is contained in:
Maxime Coste 2012-05-29 00:33:55 +00:00
parent 6fa40796e7
commit 30d9e10ac6
2 changed files with 18 additions and 12 deletions

View File

@ -70,10 +70,10 @@ public:
void on_erase(const BufferCoord& begin, const BufferCoord& end); void on_erase(const BufferCoord& begin, const BufferCoord& end);
const Buffer& buffer() const; const Buffer& buffer() const;
private:
BufferSize line() const { return m_coord.line; } BufferSize line() const { return m_coord.line; }
BufferSize column() const { return m_coord.column; } BufferSize column() const { return m_coord.column; }
private:
BufferSize offset() const; BufferSize offset() const;
const Buffer* m_buffer; const Buffer* m_buffer;

View File

@ -14,32 +14,38 @@ String DisplayAtom::content() const
return m_replacement_text; return m_replacement_text;
} }
template<typename Iterator>
static DisplayCoord advance_coord(const DisplayCoord& pos, static DisplayCoord advance_coord(const DisplayCoord& pos,
Iterator begin, Iterator end) const BufferIterator& begin,
const BufferIterator& end)
{
if (begin.line() == end.line())
return DisplayCoord(pos.line, pos.column + end.column() - begin.column());
else
return DisplayCoord(pos.line + end.line() - begin.line(), end.column());
}
static DisplayCoord advance_coord(const DisplayCoord& pos,
const String& str)
{ {
DisplayCoord res = pos; DisplayCoord res = pos;
while (begin != end) for (auto c : str)
{ {
if (*begin == '\n') if (c == '\n')
{ {
++res.line; ++res.line;
res.column = 0; res.column = 0;
} }
else else
++res.column; ++res.column;
++begin;
} }
return res; return res;
} }
DisplayCoord DisplayAtom::end_coord() const DisplayCoord DisplayAtom::end_coord() const
{ {
if (m_replacement_text.empty()) if (m_replacement_text.empty())
return advance_coord(m_coord, m_begin, m_end); return advance_coord(m_coord, m_begin, m_end);
else else
return advance_coord(m_coord, m_replacement_text.begin(), return advance_coord(m_coord, m_replacement_text);
m_replacement_text.end());
} }
BufferIterator DisplayAtom::iterator_at(const DisplayCoord& coord) const BufferIterator DisplayAtom::iterator_at(const DisplayCoord& coord) const
@ -81,7 +87,7 @@ DisplayBuffer::DisplayBuffer()
DisplayBuffer::iterator DisplayBuffer::insert(iterator where, const DisplayAtom& atom) DisplayBuffer::iterator DisplayBuffer::insert(iterator where, const DisplayAtom& atom)
{ {
iterator res = m_atoms.insert(where, atom); iterator res = m_atoms.insert(where, atom);
check_invariant(); // check_invariant();
return res; return res;
} }
@ -115,7 +121,7 @@ DisplayBuffer::iterator DisplayBuffer::split(iterator atom, const BufferIterator
iterator insert_pos = atom; iterator insert_pos = atom;
++insert_pos; ++insert_pos;
m_atoms.insert(insert_pos, std::move(new_atom)); m_atoms.insert(insert_pos, std::move(new_atom));
check_invariant(); // check_invariant();
return atom; return atom;
} }