diff options
author | Sebastian Geerken <devnull@localhost> | 2014-10-23 12:29:38 +0200 |
---|---|---|
committer | Sebastian Geerken <devnull@localhost> | 2014-10-23 12:29:38 +0200 |
commit | d39956a7b0a38ebeda147d52aa734e992c425d9f (patch) | |
tree | aa66d82bb61a4c38ff0de04bec8dad62d69f6294 /dw/iterator.cc | |
parent | 3afc8db366cdfed92f5c53a606cfc82e551c9084 (diff) |
More work on drawing: interruptions work now halfway.
Diffstat (limited to 'dw/iterator.cc')
-rw-r--r-- | dw/iterator.cc | 57 |
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 |