3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Alfredo Braunstein
8 * Full author contact details are available in file CREDITS.
14 #include "ParagraphList_fwd.h"
16 #include "iterators.h"
18 #include "support/types.h"
25 struct PosIteratorItem {
26 PosIteratorItem(ParagraphList * pl,
27 ParagraphList::iterator pit,
30 : pl(pl), pit(pit), pos(pos), index(index) {};
32 ParagraphList::iterator pit;
38 class PosIterator : public std::iterator<
39 std::bidirectional_iterator_tag,
40 ParagraphList::value_type> {
42 // Creates a singular.
45 PosIterator(BufferView & bv);
46 PosIterator(ParagraphList * pl, ParagraphList::iterator pit,
48 PosIterator(ParIterator const & par, lyx::pos_type pos);
49 PosIterator & operator++();
50 PosIterator & operator--();
51 friend bool operator==(PosIterator const &, PosIterator const &);
53 ParagraphList::iterator pit() const { return stack_.back().pit; }
54 lyx::pos_type pos() const { return stack_.back().pos; }
56 InsetBase * inset() const;
57 friend ParIterator::ParIterator(PosIterator const &);
59 void setFrom(ParIterator const & par, lyx::pos_type pos);
60 // This is conceptually a stack,
61 // but we need random access sometimes.
62 std::vector<PosIteratorItem> stack_;
66 bool operator==(PosIterator const &, PosIterator const &);
70 bool operator!=(PosIterator const & lhs, PosIterator const & rhs)