]> git.lyx.org Git - features.git/blobdiff - src/PosIterator.h
use std::advance and std::distance instead of home-grown versions
[features.git] / src / PosIterator.h
index 9d77cce44773363faf6b4eb0f1aa4e93e363599d..f71e70793695bb9379ac3efb03b19d470c9510f1 100644 (file)
 
 #include "support/types.h"
 
-#include <stack>
+#include <vector>
 
 
 class BufferView;
 
-struct PosIteratorItem 
-{
-       PosIteratorItem(ParagraphList * pl): pl(pl), pit(pl->begin()),
-                                            pos(0), index(0) {};
+struct PosIteratorItem {
        PosIteratorItem(ParagraphList * pl,
                        ParagraphList::iterator pit,
                        lyx::pos_type pos,
@@ -38,12 +35,12 @@ struct PosIteratorItem
 };
 
 
-class PosIterator
-{
+class PosIterator : public std::iterator<
+       std::bidirectional_iterator_tag,
+        ParagraphList::value_type> {
 public:
        PosIterator(BufferView & bv);
        PosIterator(ParIterator & par, lyx::pos_type pos);
-       PosIterator(ParagraphList * pl);
        PosIterator(ParagraphList * pl, ParagraphList::iterator pit,
                    lyx::pos_type pos);
        PosIterator(ParIterator const & parit, lyx::pos_type p);
@@ -51,21 +48,21 @@ public:
        PosIterator & operator--();
        friend bool operator==(PosIterator const &, PosIterator const &);
 
-       ParagraphList::iterator pit() const { return stack_.top().pit; }
-       lyx::pos_type pos() const { return stack_.top().pos; }
+       ParagraphList::iterator pit() const { return stack_.back().pit; }
+       lyx::pos_type pos() const { return stack_.back().pos; }
        bool at_end() const;
+       InsetBase * inset() const;
        friend PosIterator ParIterator::asPosIterator(lyx::pos_type) const;
-       
+       friend ParIterator::ParIterator(PosIterator const &);
+
 private:
        PosIterator() {};
-       std::stack<PosIteratorItem> stack_;
+       //this is conceptually a stack, but we need random access sometimes
+       std::vector<PosIteratorItem> stack_;
 };
 
+
 bool operator!=(PosIterator const &, PosIterator const &);
 bool operator==(PosIterator const &, PosIterator const &);
 
-int distance(PosIterator const &, PosIterator const &);
-void advance(PosIterator &, int);
-
 #endif
-