#ifndef ITERATORS_H
#define ITERATORS_H
-#include <vector>
+#include <stack>
#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;
};
class ParIterator {
public:
+ ///
+ typedef std::stack<ParPosition> 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<ParPosition>::size_type size() const
+ PosHolder::size_type size() const
{ return positions.size(); }
///
friend
bool operator==(ParIterator const & iter1, ParIterator const & iter2);
private:
///
- std::vector<ParPosition> positions;
+ PosHolder positions;
};
return !(iter1 == iter2);
}
+
+class ParConstIterator {
+public:
+ ///
+ typedef std::stack<ParPosition> 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