DisplayBuffer optimization, suppressed some paranoid checks
This commit is contained in:
parent
6fa40796e7
commit
30d9e10ac6
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user