[Libreoffice-commits] .: 2 commits - sw/source

Stephan Bergmann sbergmann at kemper.freedesktop.org
Wed Mar 21 04:33:35 PDT 2012


 sw/source/filter/ww8/ww8par2.cxx |   89 ++++++++++++++++-----------------------
 1 file changed, 37 insertions(+), 52 deletions(-)

New commits:
commit 2406745e4e78e0346b1b303870abd0a85e861405
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Wed Mar 21 12:30:05 2012 +0100

    Further clean up of previous patch

diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx
index 84fcfc5..f73e424 100644
--- a/sw/source/filter/ww8/ww8par2.cxx
+++ b/sw/source/filter/ww8/ww8par2.cxx
@@ -95,8 +95,6 @@ public:
     {}
 };
 
-typedef WW8SelBoxInfo* WW8SelBoxInfoPtr;
-
 typedef boost::ptr_vector<WW8SelBoxInfo> WW8MergeGroups;
 
 struct WW8TabBandDesc
@@ -223,9 +221,7 @@ class WW8TabDesc
     void InsertCells( short nIns );
     void AdjustNewBand();
 
-    // durchsucht aMergeGroups, meldet Index der ersten, passenden Gruppe bzw.
-    // -1 Details siehe bei der Implementierung
-    bool FindMergeGroup(short nX1, short nWidth, bool bExact, short& nMGrIdx);
+    WW8SelBoxInfo* FindMergeGroup(short nX1, short nWidth, bool bExact);
 
     // einzelne Box ggfs. in eine Merge-Gruppe aufnehmen
     // (die Merge-Gruppen werden dann spaeter auf einen Schlag abgearbeitet)
@@ -2567,7 +2563,7 @@ void WW8TabDesc::MergeCells()
             for( short j = 0; j < pActBand->nRows; j++, nRow++ )
                 for( short i = 0; i < pActBand->nWwCols; i++ )
                 {
-                    WW8SelBoxInfoPtr pActMGroup = 0;
+                    WW8SelBoxInfo* pActMGroup = 0;
                     //
                     // ggfs. eine neue Merge-Gruppe beginnen
                     //
@@ -2650,11 +2646,15 @@ void WW8TabDesc::MergeCells()
                         // 1. ggfs. alte Mergegruppe(n) schliessen, die
                         // den von unserer neuen Gruppe betroffenen
                         // X-Bereich ueberdecken
-                        short nMGrIdx;
-                        while ( FindMergeGroup( nX1, pActMGroup->nGroupWidth,
-                                                false, nMGrIdx ) )
+                        for (;;)
                         {
-                            aMergeGroups[ nMGrIdx ].bGroupLocked = true;
+                            WW8SelBoxInfo* p = FindMergeGroup(
+                                nX1, pActMGroup->nGroupWidth, false );
+                            if (p == 0)
+                            {
+                                break;
+                            }
+                            p->bGroupLocked = true;
                         }
 
                         // 3. und in Gruppen-Array eintragen
@@ -2736,8 +2736,8 @@ void WW8TabDesc::FinishSwTable()
         // bearbeite alle Merge-Gruppen nacheinander
         for (
                 WW8MergeGroups::iterator groupIt = aMergeGroups.begin();
-                groupIt < aMergeGroups.end();
-                groupIt++)
+                groupIt != aMergeGroups.end();
+                ++groupIt)
         {
             sal_uInt16 nActBoxCount = groupIt->size();
 
@@ -2769,16 +2769,12 @@ void WW8TabDesc::FinishSwTable()
 //            bExact    = Flag, ob Box in dieser Gruppe passen muss,
 //                          oder diese nur zu tangieren braucht
 //
-bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact,
-    short& nMGrIdx)
+WW8SelBoxInfo* WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact)
 {
-    nMGrIdx = -1;
     if( !aMergeGroups.empty() )
     {
         // noch als gueltig angesehener Bereich in der Naehe der Grenzen
         const short nToleranz = 4;
-        // die aktuell untersuchte Gruppe
-
         // Boxgrenzen
         short nX2 = nX1 + nWidth;
         // ungefaehre Gruppengrenzen
@@ -2801,7 +2797,7 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact,
                 //
                 if( ( nX1 > nGrX1 ) && ( nX2 < nGrX2 ) )
                 {
-                    nMGrIdx = iGr;  break;
+                    return &rActGroup;
                 }
                 //
                 // hat die Box Bereiche mit der Gruppe gemeinsam?
@@ -2817,13 +2813,13 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact,
                             || (     ( nX1 <=nGrX1 )
                                         && ( nX2 >=nGrX2 ) ) )
                     {
-                        nMGrIdx = iGr;  break;
+                        return &rActGroup;
                     }
                 }
             }
         }
     }
-    return ( -1 < nMGrIdx );
+    return 0;
 }
 
 bool WW8TabDesc::IsValidCell(short nCol) const
@@ -3330,10 +3326,8 @@ SwTableBox* WW8TabDesc::UpdateTableMergeGroup(  WW8_TCell&     rCell,
         else
         {
             // Gruppe finden
-            short nMGrIdx;
-            if( FindMergeGroup( pActBand->nCenter[ nCol ],
-                                pActBand->nWidth[  nCol ], true, nMGrIdx ) )
-                pTheMergeGroup = &aMergeGroups.at( nMGrIdx );
+            pTheMergeGroup = FindMergeGroup(
+                pActBand->nCenter[ nCol ], pActBand->nWidth[  nCol ], true );
         }
         if( pTheMergeGroup )
         {
commit 831a8e8f6dcadb48b9d240b8d8d5bfe67742bf67
Author: Arnaud Versini <arnaud.versini at gmail.com>
Date:   Sun Mar 18 10:20:37 2012 +0100

    Use ptr_vector instead of SV_DECL_PTRARR_DEL for WW8MergeGroups

diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx
index b78030c..84fcfc5 100644
--- a/sw/source/filter/ww8/ww8par2.cxx
+++ b/sw/source/filter/ww8/ww8par2.cxx
@@ -97,8 +97,7 @@ public:
 
 typedef WW8SelBoxInfo* WW8SelBoxInfoPtr;
 
-SV_DECL_PTRARR_DEL(WW8MergeGroups, WW8SelBoxInfoPtr, 16)
-SV_IMPL_PTRARR(WW8MergeGroups, WW8SelBoxInfoPtr)
+typedef boost::ptr_vector<WW8SelBoxInfo> WW8MergeGroups;
 
 struct WW8TabBandDesc
 {
@@ -186,7 +185,7 @@ class WW8TabDesc
     SwTableBoxes* pTabBoxes;        // Boxen-Array in akt. Zeile
     SwTableBox* pTabBox;            // akt. Zelle
 
-    WW8MergeGroups* pMergeGroups;   // Listen aller zu verknuepfenden Zellen
+    WW8MergeGroups aMergeGroups;   // Listen aller zu verknuepfenden Zellen
 
     WW8_TCell* pAktWWCell;
 
@@ -224,7 +223,7 @@ class WW8TabDesc
     void InsertCells( short nIns );
     void AdjustNewBand();
 
-    // durchsucht pMergeGroups, meldet Index der ersten, passenden Gruppe bzw.
+    // durchsucht aMergeGroups, meldet Index der ersten, passenden Gruppe bzw.
     // -1 Details siehe bei der Implementierung
     bool FindMergeGroup(short nX1, short nWidth, bool bExact, short& nMGrIdx);
 
@@ -1786,7 +1785,6 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) :
     pTabLine(0),
     pTabBoxes(0),
     pTabBox(0),
-    pMergeGroups(0),
     pAktWWCell(0),
     nRows(0),
     nDefaultSwCols(0),
@@ -2112,7 +2110,6 @@ WW8TabDesc::~WW8TabDesc()
     }
 
     delete pParentPos;
-    delete pMergeGroups;
 }
 
 void WW8TabDesc::CalcDefaults()
@@ -2630,11 +2627,6 @@ void WW8TabDesc::MergeCells()
                         short nX1    = pActBand->nCenter[ i ];
                         short nWidth = pActBand->nWidth[ i ];
 
-                        // 0. falls noetig das Array fuer die Merge-Gruppen
-                        // anlegen
-                        if( !pMergeGroups )
-                            pMergeGroups = new WW8MergeGroups;
-
                         // 2. aktuelle Merge-Gruppe anlegen
                         pActMGroup = new WW8SelBoxInfo( nX1, nWidth );
 
@@ -2662,11 +2654,11 @@ void WW8TabDesc::MergeCells()
                         while ( FindMergeGroup( nX1, pActMGroup->nGroupWidth,
                                                 false, nMGrIdx ) )
                         {
-                            (*pMergeGroups)[ nMGrIdx ]->bGroupLocked = true;
+                            aMergeGroups[ nMGrIdx ].bGroupLocked = true;
                         }
 
                         // 3. und in Gruppen-Array eintragen
-                        pMergeGroups->Insert(pActMGroup, pMergeGroups->Count());
+                        aMergeGroups.push_back(pActMGroup);
                     }
 
                     // ggfs. akt. Box zu einer Merge-Gruppe hinzufuegen (dies
@@ -2739,22 +2731,21 @@ void WW8TabDesc::FinishSwTable()
     MergeCells();
 
     // falls noetig, zu mergende Zellen gruppenweise zusammenfassen
-    if( pMergeGroups )
+    if( !aMergeGroups.empty() )
     {
         // bearbeite alle Merge-Gruppen nacheinander
-        WW8SelBoxInfo* pActMGroup;
-        sal_uInt16         nActBoxCount;
-
-        for (sal_uInt16 iGr = 0; iGr < pMergeGroups->Count(); ++iGr)
+        for (
+                WW8MergeGroups::iterator groupIt = aMergeGroups.begin();
+                groupIt < aMergeGroups.end();
+                groupIt++)
         {
-            pActMGroup   = (*pMergeGroups)[ iGr ];
-            nActBoxCount = pActMGroup->size();
+            sal_uInt16 nActBoxCount = groupIt->size();
 
-            if( ( 1 < nActBoxCount ) && pActMGroup && pActMGroup->begin()->second )
+            if( ( 1 < nActBoxCount ) && groupIt->begin()->second )
             {
-                const sal_uInt16 nRowSpan = pActMGroup->size();
+                const sal_uInt16 nRowSpan = groupIt->size();
                 sal_uInt16 n = 0;
-                for( SwSelBoxes::const_iterator it = pActMGroup->begin(); it != pActMGroup->end(); ++it )
+                for( SwSelBoxes::const_iterator it = groupIt->begin(); it != groupIt->end(); ++it )
                 {
                     SwTableBox* pCurrentBox = it->second;
                     const long nRowSpanSet = n == 0 ?
@@ -2766,12 +2757,12 @@ void WW8TabDesc::FinishSwTable()
             }
         }
         pIo->pFmtOfJustInsertedApo = 0;
-        DELETEZ( pMergeGroups );
+        aMergeGroups.clear();
     }
 }
 
 
-// durchsucht pMergeGroups, meldet Index der ersten, passenden Gruppe bzw. -1
+// durchsucht aMergeGroups, meldet Index der ersten, passenden Gruppe bzw. -1
 //
 // Parameter: nXcenter  = Mittenposition der anfragenden Box
 //            nWidth    = Breite der anfragenden Box
@@ -2782,12 +2773,12 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact,
     short& nMGrIdx)
 {
     nMGrIdx = -1;
-    if( pMergeGroups )
+    if( !aMergeGroups.empty() )
     {
         // noch als gueltig angesehener Bereich in der Naehe der Grenzen
         const short nToleranz = 4;
         // die aktuell untersuchte Gruppe
-        WW8SelBoxInfoPtr pActGroup;
+
         // Boxgrenzen
         short nX2 = nX1 + nWidth;
         // ungefaehre Gruppengrenzen
@@ -2795,16 +2786,16 @@ bool WW8TabDesc::FindMergeGroup(short nX1, short nWidth, bool bExact,
         short nGrX2;
 
         // improvement: search backwards
-        for ( short iGr = pMergeGroups->Count() - 1; iGr >= 0; --iGr )
+        for ( short iGr = aMergeGroups.size() - 1; iGr >= 0; --iGr )
         {
             // die aktuell untersuchte Gruppe
-            pActGroup = (*pMergeGroups)[ iGr ];
-            if (!pActGroup->bGroupLocked)
+            WW8SelBoxInfo& rActGroup = aMergeGroups[ iGr ];
+            if (!rActGroup.bGroupLocked)
             {
                 // ungefaehre Gruppengrenzen mit Toleranz nach *aussen* hin
-                nGrX1 = pActGroup->nGroupXStart - nToleranz;
-                nGrX2 = pActGroup->nGroupXStart
-                             +pActGroup->nGroupWidth  + nToleranz;
+                nGrX1 = rActGroup.nGroupXStart - nToleranz;
+                nGrX2 = rActGroup.nGroupXStart
+                             +rActGroup.nGroupWidth  + nToleranz;
                 //
                 // Falls Box reinpasst, melde auf jeden Fall den Erfolg
                 //
@@ -3342,7 +3333,7 @@ SwTableBox* WW8TabDesc::UpdateTableMergeGroup(  WW8_TCell&     rCell,
             short nMGrIdx;
             if( FindMergeGroup( pActBand->nCenter[ nCol ],
                                 pActBand->nWidth[  nCol ], true, nMGrIdx ) )
-                pTheMergeGroup = (*pMergeGroups)[ nMGrIdx ];
+                pTheMergeGroup = &aMergeGroups.at( nMGrIdx );
         }
         if( pTheMergeGroup )
         {


More information about the Libreoffice-commits mailing list