diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-07-03 23:23:07 +0200 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-07-03 23:23:07 +0200 |
| commit | 5cbded8221b5be8b1842de6841ce161b0b7bf4a8 (patch) | |
| tree | 36f035900c54c5515c2a0f87bf2d7103eff65d90 /src/display_buffer.cc | |
| parent | d092afead9ebd97c2274719730c6f2b5246a6087 (diff) | |
make display buffers and highlighters handle better longer than display lines
still work in progress, I think the whole display system will in fact need
a rewrite.
Diffstat (limited to 'src/display_buffer.cc')
| -rw-r--r-- | src/display_buffer.cc | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/display_buffer.cc b/src/display_buffer.cc index 11913e76..6aaa0843 100644 --- a/src/display_buffer.cc +++ b/src/display_buffer.cc @@ -95,10 +95,20 @@ DisplayBuffer::DisplayBuffer() { } -DisplayBuffer::iterator DisplayBuffer::insert(iterator where, const DisplayAtom& atom) +DisplayBuffer::iterator DisplayBuffer::append(BufferIterator begin, BufferIterator end) { - iterator res = m_atoms.insert(where, atom); - // check_invariant(); + DisplayCoord coord; + if (not m_atoms.empty()) + coord = m_atoms.back().end_coord(); + m_atoms.push_back(DisplayAtom(std::move(coord), std::move(begin), std::move(end))); + return --(this->end()); +} + +DisplayBuffer::iterator DisplayBuffer::insert_empty_atom_before(iterator where) +{ + assert(where != end()); + iterator res = m_atoms.insert( + where, DisplayAtom(where->coord(), where->begin(), where->begin())); return res; } @@ -124,6 +134,7 @@ DisplayBuffer::iterator DisplayBuffer::atom_containing(const BufferIterator& whe DisplayBuffer::iterator DisplayBuffer::split(iterator atom, const BufferIterator& pos) { + assert(atom->splitable()); assert(pos > atom->begin()); assert(pos < atom->end()); @@ -136,7 +147,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; } @@ -147,7 +158,10 @@ void DisplayBuffer::check_invariant() const { assert(it->end() >= it->begin()); if (it != begin()) + { assert(prev_it->end() == it->begin()); + assert(prev_it->end_coord() == it->coord()); + } prev_it = it; } } |
