]> git.lyx.org Git - lyx.git/blob - src/pariterator.h
cleanup after svn hang-up, #undef CursorShape. Should be compilable ganin now.
[lyx.git] / src / pariterator.h
1 // -*- C++ -*-
2 /* \file pariterator.h
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author unknown
7  * \author Lars Gullik Bjønnes
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #ifndef PARITERATOR_H
13 #define PARITERATOR_H
14
15 #include "dociterator.h"
16 #include "ParagraphList_fwd.h"
17
18 #include "support/types.h"
19
20 #include <boost/optional.hpp>
21
22 #include <vector>
23
24
25
26 class InsetBase;
27 class LyXText;
28
29
30 class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
31                     public DocIterator
32 {
33 public:
34         typedef std::iterator<std::forward_iterator_tag, Paragraph> StdIt;
35
36         typedef StdIt::value_type value_type;
37         typedef StdIt::difference_type difference_type;
38         typedef StdIt::pointer pointer;
39         typedef StdIt::reference reference;
40
41         ///
42         ParIterator() : DocIterator() {}
43
44
45         ///
46         ParIterator(InsetBase &, lyx::pit_type pit);
47         ///
48         ParIterator(ParIterator const &);
49         ///
50         ParIterator(DocIterator const &);
51
52         /// This really should be implemented...
53         //ParIterator & operator=(ParIterator const &);
54         ///
55         ParIterator & operator++();
56         ///
57         ParIterator operator++(int);
58         /// See comment in pariterator.C
59         //ParIterator & operator--();
60         ///
61         Paragraph & operator*() const;
62         ///
63         Paragraph * operator->() const;
64         /// This gives us the top-most parent paragraph
65         lyx::pit_type outerPar() const;
66         ///
67         lyx::pit_type pit() const;
68         ///
69         /// return the paragraph this cursor is in
70         pit_type & pit() { return DocIterator::pit(); }
71
72         ParagraphList & plist() const;
73 };
74
75
76 DocIterator makeDocIterator(ParIterator const &, lyx::pos_type);
77
78 ParIterator par_iterator_begin(InsetBase & inset);
79
80 ParIterator par_iterator_end(InsetBase & inset);
81
82
83 ///
84 bool operator==(ParIterator const & iter1, ParIterator const & iter2);
85
86 ///
87 bool operator!=(ParIterator const & iter1, ParIterator const & iter2);
88
89
90 class ParConstIterator : public std::iterator<std::forward_iterator_tag,
91                          Paragraph>,
92                          public DocIterator
93 {
94 public:
95         ///
96         ParConstIterator(): DocIterator() {}
97         ///
98         ParConstIterator(ParConstIterator const &);
99         ///
100         ParConstIterator(DocIterator const &);
101         ///
102
103         ParConstIterator & operator++();
104         ///
105         ParConstIterator & operator--();
106         ///
107         Paragraph const & operator*() const;
108         ///
109         Paragraph const * operator->() const;
110         ///
111         ParagraphList const & plist() const;
112 };
113
114 bool operator==(ParConstIterator const & iter1,
115                 ParConstIterator const & iter2);
116
117 bool operator!=(ParConstIterator const & iter1,
118                 ParConstIterator const & iter2);
119
120
121 ParConstIterator par_const_iterator_begin(InsetBase const & inset);
122
123 ParConstIterator par_const_iterator_end(InsetBase const & inset);
124
125
126 #endif