3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
7 * \author Lars Gullik Bjønnes
9 * Full author contact details are available in file CREDITS.
15 #include "dociterator.h"
16 #include "ParagraphList_fwd.h"
18 #include "support/types.h"
20 #include <boost/optional.hpp>
30 class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
34 typedef std::iterator<std::forward_iterator_tag, Paragraph> StdIt;
36 typedef StdIt::value_type value_type;
37 typedef StdIt::difference_type difference_type;
38 typedef StdIt::pointer pointer;
39 typedef StdIt::reference reference;
42 ParIterator() : DocIterator() {}
46 ParIterator(InsetBase &, lyx::pit_type pit);
48 ParIterator(ParIterator const &);
50 ParIterator(DocIterator const &);
52 /// This really should be implemented...
53 //ParIterator & operator=(ParIterator const &);
55 ParIterator & operator++();
57 ParIterator operator++(int);
58 /// See comment in pariterator.C
59 //ParIterator & operator--();
61 Paragraph & operator*() const;
63 Paragraph * operator->() const;
64 /// This gives us the top-most parent paragraph
65 lyx::pit_type outerPar() const;
67 lyx::pit_type pit() const;
69 /// return the paragraph this cursor is in
70 pit_type & pit() { return DocIterator::pit(); }
72 ParagraphList & plist() const;
76 DocIterator makeDocIterator(ParIterator const &, lyx::pos_type);
78 ParIterator par_iterator_begin(InsetBase & inset);
80 ParIterator par_iterator_end(InsetBase & inset);
84 bool operator==(ParIterator const & iter1, ParIterator const & iter2);
87 bool operator!=(ParIterator const & iter1, ParIterator const & iter2);
90 class ParConstIterator : public std::iterator<std::forward_iterator_tag,
96 ParConstIterator(): DocIterator() {}
98 ParConstIterator(ParConstIterator const &);
100 ParConstIterator(DocIterator const &);
103 ParConstIterator & operator++();
105 ParConstIterator & operator--();
107 Paragraph const & operator*() const;
109 Paragraph const * operator->() const;
111 ParagraphList const & plist() const;
114 bool operator==(ParConstIterator const & iter1,
115 ParConstIterator const & iter2);
117 bool operator!=(ParConstIterator const & iter1,
118 ParConstIterator const & iter2);
121 ParConstIterator par_const_iterator_begin(InsetBase const & inset);
123 ParConstIterator par_const_iterator_end(InsetBase const & inset);