]> git.lyx.org Git - features.git/commitdiff
fix memory leak; cosmetics
authorAndré Pönitz <poenitz@gmx.net>
Wed, 1 Aug 2001 09:18:21 +0000 (09:18 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Wed, 1 Aug 2001 09:18:21 +0000 (09:18 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2396 a592a061-630c-0410-9148-cb99ea01b6c8

src/mathed/array.C
src/mathed/array.h
src/mathed/formulabase.C
src/mathed/formulabase.h
src/mathed/xarray.C

index 264002ea0a1b3902bf389d191180e4d02135d337..47e6d32ccbd6c5311533c05602e53e5e0b8511c6 100644 (file)
@@ -19,26 +19,31 @@ MathArray::MathArray()
 
 MathArray::~MathArray()
 {
-       for (int pos = 0; pos < size(); next(pos)) 
-               if (isInset(pos)) 
-                       delete nextInset(pos);
+       erase();
 }
 
 
 MathArray::MathArray(MathArray const & array)
        : bf_(array.bf_)
 {
-       for (int pos = 0; pos < size(); next(pos)) 
-               if (isInset(pos)) 
-                       replace(pos, nextInset(pos)->clone());
+       deep_copy(0, size());
 }
 
+
 MathArray::MathArray(MathArray const & array, int from, int to)
        : bf_(array.bf_.begin() + from, array.bf_.begin() + to)
 {
-       for (int pos = 0; pos < size(); next(pos)) 
-               if (isInset(pos)) 
-                       replace(pos, nextInset(pos)->clone());
+       deep_copy(0, size());
+}
+
+
+void MathArray::deep_copy(int pos1, int pos2)
+{
+       for (int pos = pos1; pos < pos2; next(pos)) 
+               if (isInset(pos)) {
+                       MathInset * p = nextInset(pos)->clone();
+                       memcpy(&bf_[pos + 1], &p, sizeof(p));
+               }
 }
 
 
@@ -105,11 +110,11 @@ MathInset * MathArray::nextInset(int pos) const
        return p;
 }
 
+
 MathInset * MathArray::prevInset(int pos) const
 {
-       if (!pos)
+       if (!prev(pos))
                return 0;
-       prev(pos);
        return nextInset(pos);
 }
 
@@ -151,11 +156,6 @@ void MathArray::setCode(int pos, MathTextCodes t)
 }
 
 
-void MathArray::replace(int pos, MathInset * p)
-{
-       memcpy(&bf_[pos + 1], &p, sizeof(p));
-}
-
 
 void MathArray::insert(int pos, MathInset * p)
 {
@@ -174,9 +174,7 @@ void MathArray::insert(int pos, unsigned char b, MathTextCodes t)
 void MathArray::insert(int pos, MathArray const & array)
 {
        bf_.insert(bf_.begin() + pos, array.bf_.begin(), array.bf_.end());
-       for (int p = pos; p < pos + array.size(); next(p)) 
-               if (isInset(p)) 
-                       replace(p, nextInset(p)->clone());
+       deep_copy(pos, pos + array.size());
 }
 
 
@@ -200,10 +198,7 @@ void MathArray::push_back(MathArray const & array)
 
 void MathArray::clear()
 {
-       for (int pos = 0; pos < size(); next(pos)) 
-               if (isInset(pos)) 
-                       delete nextInset(pos);
-       bf_.clear();
+       erase();
 }
 
 
@@ -241,6 +236,9 @@ void MathArray::erase(int pos)
 
 void MathArray::erase(int pos1, int pos2)
 {
+       for (int pos = pos1; pos < pos2; next(pos))
+               if (isInset(pos))
+                       delete nextInset(pos);
        bf_.erase(bf_.begin() + pos1, bf_.begin() + pos2);
 }
 
@@ -255,13 +253,7 @@ bool MathArray::isInset(int pos) const
 
 MathInset * MathArray::back_inset() const
 {
-       if (!empty()) {
-               int pos = size();
-               prev(pos);
-               if (isInset(pos))
-                       return nextInset(pos);
-       }
-       return 0;
+       return prevInset(size());
 }
 
 
@@ -374,6 +366,6 @@ void MathArray::pop_back()
 {      
        int pos = size();
        prev(pos);
-       erase(pos);
+       erase(pos, size());
 }
 
index 6ff72c6a3c4a39306d21423bd01b2d8def174422..f9c7e9bc3055ea1b413910ed3333ded63a69cd1f 100644 (file)
@@ -76,8 +76,6 @@ public:
        ///
        void erase();
        ///
-       void replace(int pos, MathInset * inset);
-       ///
        bool prev(int & pos) const;
        ///
        bool next(int & pos) const;
@@ -133,6 +131,8 @@ private:
 
        ///
        int item_size(int pos) const;
+       ///
+       void deep_copy(int pos1, int pos2);
        /// Buffer
        buffer_type bf_;
 };
index 166b9d82f65c1b710f7c7ce2bcd7f7c64b98998f..bed687f8a3ce0950f793eb0046c3f1a1eab6fe20 100644 (file)
@@ -135,7 +135,7 @@ InsetFormulaBase::InsetFormulaBase(MathInset * par)
 
 
 InsetFormulaBase::InsetFormulaBase(InsetFormulaBase const & f)
-       : UpdatableInset(f), par_(static_cast<MathInset *>(f.par_->clone()))
+       : UpdatableInset(f), par_(f.par_->clone())
 {}
 
 
index 73313dbc9b6175e8c1e5250d249ea2722a03f12b..1423136d351afe077658c1d80f4c0fdc7bae5461 100644 (file)
@@ -121,9 +121,11 @@ public:
 protected:
        ///
        virtual void updateLocal(BufferView * bv, bool mark_dirty);
-
        ///
        MathInset * par_;
+private:
+       /// unimplemented
+       void operator=(const InsetFormulaBase &);
 };
 
 // We don't really mess want around with mathed stuff outside mathed.
index 636ef7d8a4a600b837f839176b21691eb9281f1b..884a03b5adfd2772b791bdbc86b7db96a8ababa6 100644 (file)
@@ -29,7 +29,7 @@ void MathXArray::metrics(MathStyles st)
        ascent_  = 0;
        descent_ = 0;
        width_   = 0;
-       style_    = st;
+       style_   = st;
 
        for (int pos = 0; pos < data_.size(); data_.next(pos)) {
                int asc;