]> git.lyx.org Git - lyx.git/blobdiff - src/ParIterator.h
Fix bug #12772
[lyx.git] / src / ParIterator.h
index bcae0b96e80533a80fb7eb364f386a6aadb56224..2253a1d7bb69845e4e3677d33a5247ed7242243f 100644 (file)
@@ -4,7 +4,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author unknown
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  *
  * Full author contact details are available in file CREDITS.
  */
 #define PARITERATOR_H
 
 #include "DocIterator.h"
-#include "ParagraphList_fwd.h"
 
 #include "support/types.h"
 
-#include <boost/optional.hpp>
-
-#include <vector>
-
 
 namespace lyx {
 
+class Buffer;
+class Inset;
+class Paragraph;
+class ParagraphList;
 
 
-class InsetBase;
-class LyXText;
-
-
-class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
-                   public DocIterator
+class ParIterator : public DocIterator
 {
 public:
-       typedef std::iterator<std::forward_iterator_tag, Paragraph> StdIt;
-
-       typedef StdIt::value_type value_type;
-       typedef StdIt::difference_type difference_type;
-       typedef StdIt::pointer pointer;
-       typedef StdIt::reference reference;
-
        ///
-       ParIterator() : DocIterator() {}
-
-
+       ParIterator(Buffer * buf) : DocIterator(buf) {}
        ///
-       ParIterator(InsetBase &, pit_type pit);
+       ParIterator(ParIterator const & pi) :
+               DocIterator(DocIterator(pi)) {}
        ///
-       ParIterator(ParIterator const &);
-       ///
-       ParIterator(DocIterator const &);
+       explicit ParIterator(DocIterator const & dit) :
+               DocIterator(dit) {}
 
        /// This really should be implemented...
        //ParIterator & operator=(ParIterator const &);
@@ -76,32 +61,37 @@ public:
 };
 
 
-DocIterator makeDocIterator(ParIterator const &, pos_type);
-
-ParIterator par_iterator_begin(InsetBase & inset);
+ParIterator par_iterator_begin(Inset & inset);
 
-ParIterator par_iterator_end(InsetBase & inset);
+ParIterator par_iterator_end(Inset & inset);
 
 
 ///
-bool operator==(ParIterator const & iter1, ParIterator const & iter2);
+//bool operator==(ParIterator const & it1, ParIterator const & it2);
 
-///
-bool operator!=(ParIterator const & iter1, ParIterator const & iter2);
+// FIXME: Unfortunately operator!=(ParIterator &, ParIterator &) is
+// implemented with operator!=(DocIterator &, DocIterator &) that gives
+// false if the positions are different, even if the pars are the same.
+// So ultimately it's a bug in operator!=(ParIterator &, ParIterator &)
+// I'd say (nevertheless, I would be reluctant to change it, because I
+// fear that some part of the code could rely on this "bug". --Alfredo
+//bool operator!=(ParIterator const & it1, ParIterator const & it2);
 
 
-class ParConstIterator : public std::iterator<std::forward_iterator_tag,
-                        Paragraph>,
-                        public DocIterator
+class ParConstIterator : public DocIterator
 {
 public:
        ///
-       ParConstIterator(): DocIterator() {}
+       ParConstIterator(Buffer const * buf)
+               : DocIterator(const_cast<Buffer *>(buf)) {}
        ///
-       ParConstIterator(ParConstIterator const &);
+       ParConstIterator(ParConstIterator const & pi)
+               : DocIterator(DocIterator(pi)) {}
        ///
-       ParConstIterator(DocIterator const &);
+       explicit ParConstIterator(DocIterator const & dit)
+               : DocIterator(dit) {}
        ///
+       void push_back(Inset const &);
 
        ParConstIterator & operator++();
        ///
@@ -114,17 +104,9 @@ public:
        ParagraphList const & plist() const;
 };
 
-bool operator==(ParConstIterator const & iter1,
-               ParConstIterator const & iter2);
-
-bool operator!=(ParConstIterator const & iter1,
-               ParConstIterator const & iter2);
-
-
-ParConstIterator par_const_iterator_begin(InsetBase const & inset);
-
-ParConstIterator par_const_iterator_end(InsetBase const & inset);
+//bool operator==(ParConstIterator const & it1, ParConstIterator const & it2);
 
+//bool operator!=(ParConstIterator const & it1, ParConstIterator const & it2);
 
 
 } // namespace lyx