3 * \file math_iterator.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
12 #ifndef MATH_ITERATOR_H
13 #define MATH_ITERATOR_H
20 // this is used for traversing math insets
22 class MathIterator : private std::vector<CursorPos> {
24 // re-use inherited stuff
25 typedef std::vector<CursorPos> base_type;
26 using base_type::clear;
27 using base_type::size;
28 using base_type::push_back;
29 using base_type::pop_back;
30 using base_type::back;
31 using base_type::begin;
33 using base_type::erase;
34 using base_type::operator[];
35 using base_type::size_type;
36 using base_type::difference_type;
37 using base_type::const_iterator;
38 friend bool operator!=(MathIterator const &, MathIterator const &);
39 friend bool operator==(MathIterator const &, MathIterator const &);
41 /// default constructor
43 /// start with given inset
44 explicit MathIterator(MathInset * p);
46 CursorPos const & operator*() const;
48 CursorPos const & operator->() const;
51 /// move on several steps
52 void jump(difference_type);
53 /// read access to top most inset
54 MathInset const * inset() const;
55 /// read access to top most inset
59 /// read access to top most item
60 MathArray const & cell() const;
61 /// is this a non-end position
63 /// shrinks to at most i levels
64 void shrink(size_type i);
68 void push(MathInset *);
74 bool operator==(MathIterator const &, MathIterator const &);
76 bool operator!=(MathIterator const &, MathIterator const &);
79 MathIterator ibegin(MathInset * p);
81 MathIterator iend(MathInset * p);