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
15 #include "cursor_slice.h"
20 // this is used for traversing math insets
22 class MathIterator : private std::vector<CursorSlice> {
24 // re-use inherited stuff
25 typedef std::vector<CursorSlice> 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);
49 /// read access to top most item
50 MathArray const & cell() const;
51 /// is this a non-end position
53 /// shrinks to at most i levels
54 void shrink(size_type i);
58 void push(MathInset *);
64 bool operator==(MathIterator const &, MathIterator const &);
66 bool operator!=(MathIterator const &, MathIterator const &);
69 MathIterator ibegin(MathInset * p);
71 MathIterator iend(MathInset * p);