summaryrefslogtreecommitdiff
path: root/dw/iterator.cc
diff options
context:
space:
mode:
authorSebastian Geerken <devnull@localhost>2014-10-23 12:29:38 +0200
committerSebastian Geerken <devnull@localhost>2014-10-23 12:29:38 +0200
commitd39956a7b0a38ebeda147d52aa734e992c425d9f (patch)
treeaa66d82bb61a4c38ff0de04bec8dad62d69f6294 /dw/iterator.cc
parent3afc8db366cdfed92f5c53a606cfc82e551c9084 (diff)
More work on drawing: interruptions work now halfway.
Diffstat (limited to 'dw/iterator.cc')
-rw-r--r--dw/iterator.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/dw/iterator.cc b/dw/iterator.cc
index dbb779f6..92a028d0 100644
--- a/dw/iterator.cc
+++ b/dw/iterator.cc
@@ -898,5 +898,62 @@ void CharIterator::unhighlight (CharIterator *it1, CharIterator *it2,
}
}
+// ---------------------------
+// StackingIteratorStack
+// ---------------------------
+
+StackingIteratorStack::StackingIteratorStack ()
+{
+ vector = new lout::container::untyped::Vector (1, true);
+ topPos = -1;
+}
+
+StackingIteratorStack::~StackingIteratorStack ()
+{
+ delete vector;
+}
+
+void StackingIteratorStack::intoStringBuffer(lout::misc::StringBuffer *sb)
+{
+ sb->append ("[ ");
+
+ for (int i = 0; i < vector->size (); i++) {
+ if (i != 0)
+ sb->append (" ");
+ if (i == topPos)
+ sb->append ("<b>");
+ vector->get(i)->intoStringBuffer (sb);
+ if (i == topPos)
+ sb->append ("</b>");
+ }
+
+ sb->append (" ]");
+}
+
+void StackingIteratorStack::push (lout::object::Object *object)
+{
+ assert (atRealTop ());
+ vector->put (object);
+ topPos++;
+}
+
+void StackingIteratorStack::pop ()
+{
+ assert (atRealTop ());
+ vector->remove (vector->size () - 1);
+ topPos--;
+}
+
+void StackingIteratorStack::forward ()
+{
+ assert (!atRealTop ());
+ topPos++;
+}
+
+void StackingIteratorStack::backward ()
+{
+ topPos--;
+}
+
} // namespace core
} // namespace dw