]> git.lyx.org Git - lyx.git/blob - src/iterators.h
fix typo that put too many include paths for most people
[lyx.git] / src / iterators.h
1 // -*- C++ -*-
2
3 #ifndef ITERATORS_H
4 #define ITERATORS_H
5
6 #include <stack>
7
8 #include "paragraph.h"
9
10 class ParPosition {
11 public:
12         ParPosition(Paragraph * p)
13                 : par(p), it(p->inset_iterator_begin()), index(-1) {}
14         ///
15         Paragraph * par;
16         ///
17         Paragraph::inset_iterator it;
18         ///
19         int index;
20 };
21
22
23 inline
24 bool operator==(ParPosition const & pos1, ParPosition const & pos2) {
25         return pos1.par == pos2.par &&
26                 pos1.it == pos2.it &&
27                 pos1.index == pos2.index;
28 }
29
30 inline
31 bool operator!=(ParPosition const & pos1, ParPosition const & pos2) {
32         return !(pos1 == pos2);
33 }
34
35
36 class ParIterator {
37 public:
38         ///
39         typedef std::stack<ParPosition> PosHolder;
40         ///
41         ParIterator() {}
42         ///
43         ParIterator(Paragraph * par) {
44                 positions.push(ParPosition(par));
45         }
46         ///
47         ParIterator & operator++();
48         ///
49         Paragraph * operator*() {
50                 return positions.top().par;
51         }
52         ///
53         PosHolder::size_type size() const
54                 { return positions.size(); }
55         ///
56         friend
57         bool operator==(ParIterator const & iter1, ParIterator const & iter2);
58 private:
59         ///
60         PosHolder positions;
61 };
62
63
64 ///
65 inline
66 bool operator==(ParIterator const & iter1, ParIterator const & iter2) {
67         return iter1.positions == iter2.positions;
68 }
69
70
71 ///
72 inline
73 bool operator!=(ParIterator const & iter1, ParIterator const & iter2) {
74         return !(iter1 == iter2);
75 }
76
77 #endif