]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_rowst.h
mathed47.diff
[lyx.git] / src / mathed / math_rowst.h
index d282e86b0fe62c3f441696e8661bbacb95c9c898..602198d3095a07b660b9e9af2e520a4c3767844f 100644 (file)
@@ -3,12 +3,14 @@
 #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.  
     Only used for multiline paragraphs.
  */
-class MathedRowSt
+
+class MathedRowStruct
 {
 public:
        ///
@@ -16,14 +18,10 @@ public:
        
        ///
        explicit
-       MathedRowSt(int n)
+       MathedRowStruct(int n)
                : asc_(0), desc_(0), y_(0), widths_(n + 1, 0),
-                 numbered_(true), next_(0)
+                 numbered_(true)
                {}
-       /// Should be const but...
-       MathedRowSt * getNext() const;
-       /// ...we couldn't use this.
-       void setNext(MathedRowSt * n);
        ///
        string const & getLabel() const;
        ///
@@ -48,7 +46,9 @@ public:
        void setNumbered(bool nf);
        ///
        void setTab(int i, int t);
-private:
+       ///
+       friend class MathedRowSt;
+protected:
        /// Vericals 
        int asc_;
        ///
@@ -61,11 +61,73 @@ private:
        string label_;
        ///
        bool numbered_;
+};
+
+class MathedRowSt : public MathedRowStruct {
+public:
+       ///
+       explicit MathedRowSt(int n)
+                       : MathedRowStruct(n), next_(0)
+               {}
+       /// Should be const but...
+       MathedRowSt * getNext() const;
+       /// ...we couldn't use this.
+       void setNext(MathedRowSt * n);
+//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
 {
@@ -81,84 +143,84 @@ void MathedRowSt::setNext(MathedRowSt * n)
 
 
 inline
-string const & MathedRowSt::getLabel() const
+string const & MathedRowStruct::getLabel() const
 {
        return label_;
 }
 
 
 inline
-bool MathedRowSt::isNumbered() const
+bool MathedRowStruct::isNumbered() const
 {
        return numbered_;
 }
 
 
 inline
-int MathedRowSt::getBaseline() const
+int MathedRowStruct::getBaseline() const
 {
        return y_;
 }
 
 
 inline
-void MathedRowSt::setBaseline(int b)
+void MathedRowStruct::setBaseline(int b)
 {
        y_ = b;
 }
 
 
 inline
-int MathedRowSt::ascent() const
+int MathedRowStruct::ascent() const
 {
        return asc_;
 }
 
 
 inline
-int MathedRowSt::descent() const
+int MathedRowStruct::descent() const
 {
        return desc_;
 }
 
 
 inline
-void MathedRowSt::ascent(int a)
+void MathedRowStruct::ascent(int a)
 {
        asc_ = a;
 }
 
 
 inline
-void MathedRowSt::descent(int d)
+void MathedRowStruct::descent(int d)
 {
        desc_ = d;
 }
 
 
 inline
-int MathedRowSt::getTab(int i) const
+int MathedRowStruct::getTab(int i) const
 {
        return widths_[i];
 }
 
 
 inline
-void MathedRowSt::setLabel(string const & l)
+void MathedRowStruct::setLabel(string const & l)
 {
        label_ = l;
 }
 
 
 inline
-void MathedRowSt::setNumbered(bool nf)
+void MathedRowStruct::setNumbered(bool nf)
 {
        numbered_ = nf;
 }
 
 
 inline
-void MathedRowSt::setTab(int i, int t)
+void MathedRowStruct::setTab(int i, int t)
 {
        widths_[i] = t;
 }