summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-12-12 13:45:08 +0000
committerMaxime Coste <frrrwww@gmail.com>2013-12-12 13:45:08 +0000
commitbd80cf0404b89b531312ac86e7868f8fd18052d5 (patch)
tree4f3898dca87e362ef5451195483ddddb534a7331
parent277b02eee6cb0037d2ecce46d1f2a455dfb0b001 (diff)
Add DisplayAtom::check_invariant method
-rw-r--r--src/display_buffer.cc16
-rw-r--r--src/display_buffer.hh7
2 files changed, 21 insertions, 2 deletions
diff --git a/src/display_buffer.cc b/src/display_buffer.cc
index 89f2c74b..abd77cc2 100644
--- a/src/display_buffer.cc
+++ b/src/display_buffer.cc
@@ -12,6 +12,7 @@ void DisplayAtom::trim_begin(CharCount count)
m_buffer->iterator_at(m_end), count).coord();
else
m_text = m_text.substr(count);
+ check_invariant();
}
void DisplayAtom::trim_end(CharCount count)
@@ -21,6 +22,18 @@ void DisplayAtom::trim_end(CharCount count)
m_buffer->iterator_at(m_begin), -count).coord();
else
m_text = m_text.substr(0, m_text.char_length() - count);
+ check_invariant();
+}
+
+void DisplayAtom::check_invariant() const
+{
+#ifdef KAK_DEBUG
+ if (has_buffer_range())
+ {
+ kak_assert(m_buffer->is_valid(m_begin));
+ kak_assert(m_buffer->is_valid(m_end));
+ }
+#endif
}
DisplayLine::DisplayLine(AtomList atoms)
@@ -38,6 +51,8 @@ DisplayLine::iterator DisplayLine::split(iterator it, BufferCoord pos)
DisplayAtom atom = *it;
atom.m_end = pos;
it->m_begin = pos;
+ atom.check_invariant();
+ it->check_invariant();
return m_atoms.insert(it, std::move(atom));
}
@@ -105,6 +120,7 @@ void DisplayLine::optimize()
next_atom_it = m_atoms.erase(next_atom_it);
else
atom_it = next_atom_it++;
+ atom_it->check_invariant();
}
}
diff --git a/src/display_buffer.hh b/src/display_buffer.hh
index 92896ee9..8ea88cec 100644
--- a/src/display_buffer.hh
+++ b/src/display_buffer.hh
@@ -35,11 +35,13 @@ public:
enum Type { BufferRange, ReplacedBufferRange, Text };
DisplayAtom(const Buffer& buffer, BufferCoord begin, BufferCoord end)
- : m_type(BufferRange), m_buffer(&buffer), m_begin(begin), m_end(end) {}
+ : m_type(BufferRange), m_buffer(&buffer), m_begin(begin), m_end(end)
+ { check_invariant(); }
DisplayAtom(String str, ColorPair colors = { Colors::Default, Colors::Default },
Attribute attribute = Normal)
- : m_type(Text), m_text(std::move(str)), colors(colors), attribute(attribute) {}
+ : m_type(Text), m_text(std::move(str)), colors(colors), attribute(attribute)
+ { check_invariant(); }
String content() const
{
@@ -99,6 +101,7 @@ public:
void trim_begin(CharCount count);
void trim_end(CharCount count);
+ void check_invariant() const;
public:
ColorPair colors = {Colors::Default, Colors::Default};
Attribute attribute = Normal;