#define ITERATORS_H
#include "ParagraphList_fwd.h"
+#include "InsetList.h"
+
#include "support/types.h"
-#include <boost/scoped_ptr.hpp>
+#include <boost/optional.hpp>
+
+#include <vector>
class LyXText;
-class InsetOld;
+class InsetBase;
class Cursor;
-class BufferView;
+class Buffer;
class PosIterator;
-class ParIterator {
+class ParPosition {
+public:
+ ///
+ ParPosition(ParagraphList::iterator p, ParagraphList const & pl);
+ ///
+ ParagraphList::iterator pit;
+ ///
+ ParagraphList const * plist;
+ ///
+ boost::optional<InsetList::iterator> it;
+ ///
+ boost::optional<int> index;
+};
+
+
+class ParIterator : public std::iterator<
+ std::forward_iterator_tag,
+ ParagraphList::value_type> {
public:
///
ParIterator(ParagraphList::iterator pit, ParagraphList const & pl);
///
ParIterator(ParIterator const &);
///
+ ParIterator(PosIterator const &);
+ ///
void operator=(ParIterator const &);
///
ParIterator & operator++();
ParagraphList::iterator pit() const;
///
ParagraphList & plist() const;
- /// returns 'innermost' LyXText if in an inset or '0' instead of
- //bv->text
- LyXText * text() const;
+ /// returns 'innermost' LyXText
+ LyXText * text(Buffer &) const;
/// returns innermost inset
- InsetOld * inset() const;
+ InsetBase * inset() const;
/// returns index of cell in innermost inset
int index() const;
///
size_t size() const;
- ///
- friend
- bool operator==(ParIterator const & iter1, ParIterator const & iter2);
- ///
- void lockPath(BufferView *) const;
- ///
- PosIterator asPosIterator(lyx::pos_type) const;
+ typedef std::vector<ParPosition> PosHolder;
+ PosHolder const & positions() const
+ {
+ return positions_;
+ }
private:
- struct Pimpl;
- boost::scoped_ptr<Pimpl> pimpl_;
+ PosHolder positions_;
};
///
bool operator!=(ParIterator const & iter1, ParIterator const & iter2);
-class ParConstIterator {
+class ParConstIterator : public std::iterator<
+ std::forward_iterator_tag,
+ ParagraphList::value_type> {
public:
///
ParConstIterator(ParagraphList::iterator pit, ParagraphList const & pl);
/// depth of nesting
size_t size() const;
- ///
- friend
- bool operator==(ParConstIterator const & iter1,
- ParConstIterator const & iter2);
-
+ typedef std::vector<ParPosition> PosHolder;
+ PosHolder const & positions() const
+ {
+ return positions_;
+ }
private:
- struct Pimpl;
- boost::scoped_ptr<Pimpl> pimpl_;
+ PosHolder positions_;
};
bool operator==(ParConstIterator const & iter1,