]> git.lyx.org Git - lyx.git/blob - src/iterators.h
John's Layout Tabular UI improvements and Martins fixes to clearing the
[lyx.git] / src / iterators.h
1 // -*- C++ -*-
2
3 #ifndef ITERATORS_H
4 #define ITERATORS_H
5
6 #include <vector>
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         ParIterator() {}
40         //
41         ParIterator(Paragraph * par) 
42                 : positions(1, ParPosition(par)) {}
43         ///
44         ParIterator & operator++();
45         ///
46         Paragraph * operator*() { return positions.back().par; }
47         ///
48         std::vector<ParPosition>::size_type size() const 
49                 { return positions.size(); }
50         ///
51         friend
52         bool operator==(ParIterator const & iter1, ParIterator const & iter2);
53 private:
54         ///
55         std::vector<ParPosition> positions;
56 };
57
58
59 ///
60 inline
61 bool operator==(ParIterator const & iter1, ParIterator const & iter2) {
62         return iter1.positions == iter2.positions;
63 }
64
65
66 ///
67 inline
68 bool operator!=(ParIterator const & iter1, ParIterator const & iter2) {
69         return !(iter1 == iter2);
70 }
71
72 #endif