diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-05-29 00:33:55 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-05-29 00:33:55 +0000 |
| commit | 30d9e10ac68ac91251b2ba6c1fb2a0fd76e9d5b2 (patch) | |
| tree | 6f422f04882d53636307c63de7c58c2a49abfe32 /src/display_buffer.cc | |
| parent | 6fa40796e7c21b6505ad6791e607cc40fd23e256 (diff) | |
DisplayBuffer optimization, suppressed some paranoid checks
Diffstat (limited to 'src/display_buffer.cc')
| -rw-r--r-- | src/display_buffer.cc | 26 |
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; } |
