]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_rowst.h
mathed47.diff
[lyx.git] / src / mathed / math_rowst.h
index dba14517a7b7e8953c0ca6ed0145be28022f29be..602198d3095a07b660b9e9af2e520a4c3767844f 100644 (file)
@@ -3,6 +3,7 @@
 #define MATH_ROWST_H
 
 #include <vector>
+#include "support/LAssert.h"
 
 /** The physical structure of a row and aditional information is stored here.
     It allows to manage the extra info independently of the paragraph data.  
@@ -72,12 +73,61 @@ public:
        MathedRowSt * getNext() const;
        /// ...we couldn't use this.
        void setNext(MathedRowSt * n);
-private:
+//private:
        ///
        MathedRowSt * next_;
 };
 
 
+// The idea is to change this  MathedRowContainer  to mimic the behaviour
+// of std::list<MathedRowStruct> in several small steps.  In the end it
+// could be replaced by such a list and MathedRowSt can go as well. 
+struct MathedRowContainer {
+       ///
+       struct iterator {
+               ///
+               iterator() : st_(0) {}
+               ///
+               explicit iterator(MathedRowSt * st) : st_(st) {}
+               /// "better" conversion to bool
+               explicit iterator(MathedRowContainer * m) : st_(m->data_) {}
+               /// "better" conversion to bool
+               operator void *() const { return st_; }
+               ///
+               MathedRowStruct & operator*() { Assert(st_); return *st_; }
+               ///
+               MathedRowStruct * operator->() { return st_; }
+               ///
+               MathedRowStruct const * operator->() const { return st_; }
+               ///
+               void operator++() { Assert(st_); st_ = st_->next_; }
+               ///
+               bool is_last() const { Assert(st_); return st_->next_ == 0; }
+               ///
+               bool operator==(const iterator & it) const { return st_ == it.st_; }
+
+       //private:
+               ///
+               MathedRowSt * st_;
+       };
+
+       ///
+       MathedRowContainer() : data_(0) {}
+       ///
+       MathedRowContainer(MathedRowSt * data) : data_(data) {}
+
+       ///
+       iterator begin() { return iterator(this); }
+       ///
+       bool empty() const { return data_ == 0; }
+
+       ///
+       MathedRowSt * data_;
+};
+
+
+
 inline
 MathedRowSt * MathedRowSt::getNext() const
 {