summaryrefslogtreecommitdiff
path: root/src/display_buffer.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-05-29 00:33:55 +0000
committerMaxime Coste <frrrwww@gmail.com>2012-05-29 00:33:55 +0000
commit30d9e10ac68ac91251b2ba6c1fb2a0fd76e9d5b2 (patch)
tree6f422f04882d53636307c63de7c58c2a49abfe32 /src/display_buffer.cc
parent6fa40796e7c21b6505ad6791e607cc40fd23e256 (diff)
DisplayBuffer optimization, suppressed some paranoid checks
Diffstat (limited to 'src/display_buffer.cc')
-rw-r--r--src/display_buffer.cc26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/display_buffer.cc b/src/display_buffer.cc
index 2ecded59..303f1b26 100644
--- a/src/display_buffer.cc
+++ b/src/display_buffer.cc
@@ -14,32 +14,38 @@ String DisplayAtom::content() const
return m_replacement_text;
}
-template<typename Iterator>
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;
- while (begin != end)
+ for (auto c : str)
{
- if (*begin == '\n')
+ if (c == '\n')
{
++res.line;
res.column = 0;
}
else
++res.column;
- ++begin;
}
return res;
}
-
DisplayCoord DisplayAtom::end_coord() const
{
if (m_replacement_text.empty())
return advance_coord(m_coord, m_begin, m_end);
else
- return advance_coord(m_coord, m_replacement_text.begin(),
- m_replacement_text.end());
+ return advance_coord(m_coord, m_replacement_text);
}
BufferIterator DisplayAtom::iterator_at(const DisplayCoord& coord) const
@@ -81,7 +87,7 @@ DisplayBuffer::DisplayBuffer()
DisplayBuffer::iterator DisplayBuffer::insert(iterator where, const DisplayAtom& atom)
{
iterator res = m_atoms.insert(where, atom);
- check_invariant();
+ // check_invariant();
return res;
}
@@ -115,7 +121,7 @@ DisplayBuffer::iterator DisplayBuffer::split(iterator atom, const BufferIterator
iterator insert_pos = atom;
++insert_pos;
m_atoms.insert(insert_pos, std::move(new_atom));
- check_invariant();
+ // check_invariant();
return atom;
}