lyx_mirror/src/iterators.C
Lars Gullik Bjønnes 7ea7dabed1 to much stuff for my liking...
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3554 a592a061-630c-0410-9148-cb99ea01b6c8
2002-02-16 15:59:55 +00:00

45 lines
1.0 KiB
C

#include <config.h>
#include "iterators.h"
ParIterator & ParIterator::operator++()
{
while (!positions.empty()) {
ParPosition & p = positions.top();
// Does the current inset contain more "cells" ?
if (p.index >= 0) {
++p.index;
Paragraph * par = (*p.it)->getFirstParagraph(p.index);
if (par) {
positions.push(ParPosition(par));
return *this;
}
++p.it;
} else
// The following line is needed because the value of
// p.it may be invalid if inset was added/removed to
// the paragraph pointed by the iterator
p.it = p.par->inset_iterator_begin();
// Try to find the next inset that contains paragraphs
Paragraph::inset_iterator end = p.par->inset_iterator_end();
for (; p.it != end; ++p.it) {
Paragraph * par = (*p.it)->getFirstParagraph(0);
if (par) {
p.index = 0;
positions.push(ParPosition(par));
return *this;
}
}
// Try to go to the next paragarph
if (p.par->next()) {
p = ParPosition(p.par->next());
return *this;
}
positions.pop();
}
return *this;
}