X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fiterators.h;h=8bc2128a08c297b9a7fb7e3aa855421c86221704;hb=ac103f15a7cead429a7b2ee1f75d67cc988ec81d;hp=712e3aed5c2a807bacca41348241902d42c0dfda;hpb=55d1da0faab53744d514d97810ef4882a387e266;p=lyx.git diff --git a/src/iterators.h b/src/iterators.h index 712e3aed5c..8bc2128a08 100644 --- a/src/iterators.h +++ b/src/iterators.h @@ -3,18 +3,18 @@ #ifndef ITERATORS_H #define ITERATORS_H -#include +#include #include "paragraph.h" class ParPosition { public: ParPosition(Paragraph * p) - : par(p), it(p->inset_iterator_begin()), index(-1) {} + : par(p), it(p->insetlist.begin()), index(-1) {} /// Paragraph * par; /// - Paragraph::inset_iterator it; + InsetList::iterator it; /// int index; }; @@ -35,24 +35,29 @@ bool operator!=(ParPosition const & pos1, ParPosition const & pos2) { class ParIterator { public: + /// + typedef std::stack PosHolder; /// ParIterator() {} - // - ParIterator(Paragraph * par) - : positions(1, ParPosition(par)) {} + /// + ParIterator(Paragraph * par) { + positions.push(ParPosition(par)); + } /// ParIterator & operator++(); /// - Paragraph * operator*() { return positions.back().par; } + Paragraph * operator*() { + return positions.top().par; + } /// - std::vector::size_type size() const + PosHolder::size_type size() const { return positions.size(); } /// friend bool operator==(ParIterator const & iter1, ParIterator const & iter2); private: /// - std::vector positions; + PosHolder positions; }; @@ -69,4 +74,46 @@ bool operator!=(ParIterator const & iter1, ParIterator const & iter2) { return !(iter1 == iter2); } + +class ParConstIterator { +public: + /// + typedef std::stack PosHolder; + /// + ParConstIterator() {} + /// + ParConstIterator(Paragraph * par) { + positions.push(ParPosition(par)); + } + /// + ParConstIterator & operator++(); + /// + Paragraph const * operator*() { + return positions.top().par; + } + /// + PosHolder::size_type size() const + { return positions.size(); } + /// + friend + bool operator==(ParConstIterator const & iter1, + ParConstIterator const & iter2); +private: + /// + PosHolder positions; +}; + + +/// +inline +bool operator==(ParConstIterator const & iter1, ParConstIterator const & iter2) { + return iter1.positions == iter2.positions; +} + +/// +inline +bool operator!=(ParConstIterator const & iter1, ParConstIterator const & iter2) { + return !(iter1 == iter2); +} + #endif