I am trying to move more low-level functionality from math_iter to array.
In the end it should be possible to get rid of last_ as well and use
standard std::vector semantics (allocated to capacity(), filled to size())
entirely.

Anybody noticed we've closed a memory leak already? ;-}

Andre'

-- 
André Pönitz ........................................ [EMAIL PROTECTED]
Index: ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/ChangeLog,v
retrieving revision 1.12
diff -u -p -r1.12 ChangeLog
--- ChangeLog   2001/02/12 08:55:14     1.12
+++ ChangeLog   2001/02/12 10:54:29
@@ -1,3 +1,8 @@
+
+2001-02-12  André Pönitz  <[EMAIL PROTECTED]>
+       * array.[hC]: replace private variable maxsize_ with call 
+       to bf_.size() 
+
 2001-02-09  Lars Gullik Bjønnes  <[EMAIL PROTECTED]>
 
        * array.h: made all variables private, removed friend, added new
Index: array.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/array.C,v
retrieving revision 1.1
diff -u -p -r1.1 array.C
--- array.C     2001/02/12 08:55:14     1.1
+++ array.C     2001/02/12 10:54:29
@@ -40,10 +40,17 @@ void MathedArray::last(int l)
 
 int MathedArray::maxsize() const
 {
-       return maxsize_;
+       return static_cast<int>(bf_.size());
 }
 
 
+void MathedArray::need_size(int needed)
+{
+       if (needed >= maxsize()) 
+               resize(needed);
+}
+
+
 void MathedArray::resize(int newsize)
 {
        if (newsize < ARRAY_MIN_SIZE)
@@ -51,15 +58,14 @@ void MathedArray::resize(int newsize)
        newsize += ARRAY_STEP - (newsize % ARRAY_STEP);
        bf_.resize(newsize);
        if (last_ >= newsize) last_ = newsize - 1;
-       maxsize_ = newsize;
        bf_[last_] = 0;
 }
 
 
 MathedArray::MathedArray(int size) 
 {
-       maxsize_ = (size < ARRAY_MIN_SIZE) ? ARRAY_MIN_SIZE : size;
-       bf_.resize(maxsize_);
+       int newsize = (size < ARRAY_MIN_SIZE) ? ARRAY_MIN_SIZE : size;
+       bf_.resize(newsize);
        last_ = 0;
 }
 
@@ -67,9 +73,7 @@ MathedArray::MathedArray(int size) 
 void MathedArray::move(int p, int shift)
 {
        if (p <= last_) {
-               if (last_ + shift >= maxsize_) { 
-                   resize(last_ + shift);
-               }
+               need_size(last_ + shift);
                memmove(&bf_[p + shift], &bf_[p], last_ - p);
                last_ += shift;
                bf_[last_] = 0;
@@ -117,8 +121,11 @@ byte & MathedArray::operator[](int i)
 void MathedArray::insert(int pos, byte c)
 {
        if (pos < 0) pos = last_;
-       if (pos >= maxsize_) 
-               resize(maxsize_ + ARRAY_STEP);
+
+       // I think this should be replaced by  need_size(pos).  Note that the
+       // current code looks troublesome if  pos > maxsize() + ARRAY_STEP.
+       if (pos >= maxsize()) 
+               resize(maxsize() + ARRAY_STEP);
        bf_[pos] = c;
        if (pos >= last_)
                last_ = pos + 1;
Index: array.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/array.h,v
retrieving revision 1.10
diff -u -p -r1.10 array.h
--- array.h     2001/02/12 08:55:14     1.10
+++ array.h     2001/02/12 10:54:29
@@ -91,13 +91,13 @@ public:
        void resize(int newsize);
        ///
        int maxsize() const;
+       /// Make sure we can access at least \a needed elements
+       void need_size(int needed);
 private:
 
        /// Buffer
        buffer_type bf_;
        /// Last position inserted.
        int last_;
-       /// Max size of the array.
-       int maxsize_;
 };
 #endif
Index: math_iter.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/mathed/math_iter.C,v
retrieving revision 1.27
diff -u -p -r1.27 math_iter.C
--- math_iter.C 2001/02/12 08:55:14     1.27
+++ math_iter.C 2001/02/12 10:54:29
@@ -194,9 +194,7 @@ void MathedIter::Insert(byte c, MathedTe
     if (pos < array->last())
         array->move(pos, shift);
     else {
-       if (array->last() + shift >= array->maxsize()) {
-           array->resize(array->last() + shift);
-       }
+       array->need_size(array->last() + shift);
        array->last(array->last() + shift);
        (*array)[array->last()] = '\0';
     }
@@ -230,9 +228,7 @@ void MathedIter::split(int shift)
       array->move(pos, shift);
       if (fg) (*array)[pos + shift - 1] = fcode;
    } else {
-      if (array->last() + shift >= array->maxsize()) {
-         array->resize(array->last() + shift);
-      }
+                       array->need_size(array->last() + shift);
       array->last(array->last() + shift);
    }
    (*array)[array->last()] = '\0';

Reply via email to