aboutsummaryrefslogtreecommitdiff
path: root/dw/iterator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dw/iterator.cc')
-rw-r--r--dw/iterator.cc71
1 files changed, 63 insertions, 8 deletions
diff --git a/dw/iterator.cc b/dw/iterator.cc
index 0edb580b..fccd4c1a 100644
--- a/dw/iterator.cc
+++ b/dw/iterator.cc
@@ -204,14 +204,6 @@ void Iterator::scrollTo (Iterator *it1, Iterator *it2, int start, int end,
}
}
-
-void Iterator::print ()
-{
- misc::StringBuffer sb;
- intoStringBuffer (&sb);
- printf ("%s", sb.getChars ());
-}
-
// -------------------
// EmptyIterator
// -------------------
@@ -906,5 +898,68 @@ 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--;
+}
+
+void StackingIteratorStack::cleanup ()
+{
+ while (!atRealTop ())
+ vector->remove (vector->size () - 1);
+}
+
} // namespace core
} // namespace dw