[PATCH] Get rid of SvULongs in writer

Maciej Rumianowski maciej.rumianowski at gmail.com
Wed Aug 3 15:38:26 PDT 2011


Replace SvULongs with std::vector. In SwHTMLWriter simultaneously replace aOutlineMarks with boost::ptr_vector.
---
 sw/source/filter/html/htmlfly.cxx |   10 ++--
 sw/source/filter/html/wrthtml.cxx |   18 ++++----
 sw/source/filter/html/wrthtml.hxx |    7 ++-
 sw/source/filter/ww8/wrtw8esh.cxx |    4 +-
 sw/source/filter/ww8/wrtw8sty.cxx |   84 +++++++++++++++++--------------------
 sw/source/filter/ww8/wrtww8.cxx   |   24 +++++------
 sw/source/filter/ww8/wrtww8.hxx   |   24 ++++-------
 7 files changed, 78 insertions(+), 93 deletions(-)

diff --git a/sw/source/filter/html/htmlfly.cxx b/sw/source/filter/html/htmlfly.cxx
index d278127..da7dcd0 100644
--- a/sw/source/filter/html/htmlfly.cxx
+++ b/sw/source/filter/html/htmlfly.cxx
@@ -1832,20 +1832,20 @@ void SwHTMLWriter::AddLinkTarget( const String& rURL )
         SwPosition aPos( *pCurPam->GetPoint() );
         if( pDoc->GotoOutline( aPos, aOutline ) )
         {
-            sal_uLong nIdx = aPos.nNode.GetIndex();
+            sal_uInt32 nIdx = aPos.nNode.GetIndex();
 
-            sal_uInt16 nIns=0;
-            while( nIns < aOutlineMarkPoss.Count() &&
+            sal_uInt32 nIns=0;
+            while( nIns < aOutlineMarkPoss.size() &&
                    aOutlineMarkPoss[nIns] < nIdx )
                 nIns++;
 
-            aOutlineMarkPoss.Insert( nIdx, nIns );
+            aOutlineMarkPoss.insert( aOutlineMarkPoss.begin()+nIns, nIdx );
             if( bEncoded )
             {
                 aURL.Erase( nPos, 2 );
                 aURL.SetChar( nPos-1, cMarkSeperator );
             }
-            aOutlineMarks.Insert( new String( aURL ), nIns );
+            aOutlineMarks.insert( aOutlineMarks.begin()+nIns, new String( aURL ) );
         }
     }
     else if( sCmp.EqualsAscii( pMarkToText ) )
diff --git a/sw/source/filter/html/wrthtml.cxx b/sw/source/filter/html/wrthtml.cxx
index 1d5975a..ae4fee6 100644
--- a/sw/source/filter/html/wrthtml.cxx
+++ b/sw/source/filter/html/wrthtml.cxx
@@ -402,11 +402,9 @@ sal_uLong SwHTMLWriter::WriteStream()
     if( aImplicitMarks.Count() )
         aImplicitMarks.DeleteAndDestroy( sal_uInt16(0), aImplicitMarks.Count() );
 
-    if( aOutlineMarks.Count() )
-        aOutlineMarks.DeleteAndDestroy( sal_uInt16(0), aOutlineMarks.Count() );
+    aOutlineMarks.clear();
 
-    if( aOutlineMarkPoss.Count() )
-        aOutlineMarkPoss.Remove( sal_uInt16(0), aOutlineMarkPoss.Count() );
+    aOutlineMarkPoss.clear();
 
     if( aNumRuleNames.Count() )
         aNumRuleNames.DeleteAndDestroy( sal_uInt16(0), aNumRuleNames.Count() );
@@ -1066,18 +1064,18 @@ void SwHTMLWriter::OutBookmarks()
             pBookmark = (pMarkAccess->getMarksBegin() + nBkmkTabPos)->get();
     }
 
-    sal_uInt16 nPos;
-    for( nPos = 0; nPos < aOutlineMarkPoss.Count() &&
+    sal_uInt32 nPos;
+    for( nPos = 0; nPos < aOutlineMarkPoss.size() &&
                    aOutlineMarkPoss[nPos] < nNode; nPos++ )
         ; 
 
-    while( nPos < aOutlineMarkPoss.Count() && aOutlineMarkPoss[nPos] == nNode )
+    while( nPos < aOutlineMarkPoss.size() && aOutlineMarkPoss[nPos] == nNode )
     {
-        String sMark( *aOutlineMarks[nPos] );
+        String sMark( aOutlineMarks[nPos] );
         sMark.SearchAndReplaceAll( '?', '_' );  // '?' causes problems in IE/Netscape 5
         OutAnchor( sMark );
-        aOutlineMarkPoss.Remove( nPos, 1 );
-        aOutlineMarks.DeleteAndDestroy( nPos, 1 );
+        aOutlineMarkPoss.erase( aOutlineMarkPoss.begin()+nPos );
+        aOutlineMarks.erase( aOutlineMarks.begin() + nPos );
     }
 }
 
diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx
index 4e040f1..83f93f4 100644
--- a/sw/source/filter/html/wrthtml.hxx
+++ b/sw/source/filter/html/wrthtml.hxx
@@ -28,13 +28,14 @@
 #ifndef _WRTHTML_HXX
 #define _WRTHTML_HXX
 
+#include <boost/ptr_container/ptr_vector.hpp>
+#include <vector>
 
 #include <com/sun/star/container/XIndexContainer.hpp>
 #include <com/sun/star/form/XForm.hpp>
 #include <vcl/field.hxx>
 #define _SVSTDARR_STRINGSDTOR
 #define _SVSTDARR_STRINGSSORTDTOR
-#define _SVSTDARR_ULONGS
 #include <svl/svstdarr.hxx>
 #include <i18npool/lang.h>
 #include <tools/stream.hxx>
@@ -227,11 +228,11 @@ public:
 
     SvStringsDtor aImgMapNames;		// geschriebene Image Maps
     SvStringsSortDtor aImplicitMarks;// implizite Stprungmarken
-    SvStringsDtor aOutlineMarks;		// geschriebene Image Maps
     SvStringsSortDtor aNumRuleNames;// Names of exported num rules
     SvStringsSortDtor aScriptParaStyles;// script dependent para styles
     SvStringsSortDtor aScriptTextStyles;// script dependent text styles
-    SvULongs aOutlineMarkPoss;
+    boost::ptr_vector<String> aOutlineMarks;
+    std::vector<sal_uInt32> aOutlineMarkPoss;
     HTMLControls aHTMLControls;		// die zu schreibenden ::com::sun::star::form::Forms
     SwHTMLFmtInfos aChrFmtInfos;
     SwHTMLFmtInfos aTxtCollInfos;
diff --git a/sw/source/filter/ww8/wrtw8esh.cxx b/sw/source/filter/ww8/wrtw8esh.cxx
index d0e85d8..2995c85 100644
--- a/sw/source/filter/ww8/wrtw8esh.cxx
+++ b/sw/source/filter/ww8/wrtw8esh.cxx
@@ -782,10 +782,10 @@ void WW8_WrPlcTxtBoxes::Append( const SdrObject& rObj, sal_uInt32 nShapeId )
 {
     void* p = (void*)&rObj;
     aCntnt.Insert( p, aCntnt.Count() );
-    aShapeIds.Insert( nShapeId, aShapeIds.Count() );
+    aShapeIds.push_back( nShapeId );
 }
 
-const SvULongs* WW8_WrPlcTxtBoxes::GetShapeIdArr() const
+const std::vector<sal_uInt32>* WW8_WrPlcTxtBoxes::GetShapeIdArr() const
 {
     return &aShapeIds;
 }
diff --git a/sw/source/filter/ww8/wrtw8sty.cxx b/sw/source/filter/ww8/wrtw8sty.cxx
index d297a9c..93e4c79 100644
--- a/sw/source/filter/ww8/wrtw8sty.cxx
+++ b/sw/source/filter/ww8/wrtw8sty.cxx
@@ -93,14 +93,12 @@ struct WW8_SED
                         //  cbSED is 12 (decimal)), C (hex).
 };
 
-SV_IMPL_VARARR( WW8_WrSepInfoPtrs, WW8_SepInfo )
-
 // class WW8_WrPlc0 ist erstmal nur fuer Header / Footer-Positionen, d.h. es
 // gibt keine inhaltstragende Struktur.
 class WW8_WrPlc0
 {
 private:
-    SvULongs aPos;      // PTRARR von CPs / FCs
+    std::vector<sal_uLong> aPos;      // PTRARR von CPs / FCs
     sal_uLong nOfs;
 
     //No copying
@@ -108,7 +106,7 @@ private:
     WW8_WrPlc0 &operator=(const WW8_WrPlc0&);
 public:
     WW8_WrPlc0( sal_uLong nOffset );
-    sal_uInt16 Count() const                { return aPos.Count(); }
+    sal_uInt16 Count() const                { return aPos.size(); }
     void Append( sal_uLong nStartCpOrFc );
     void Write( SvStream& rStrm );
 };
@@ -903,22 +901,22 @@ void wwFontHelper::WriteFontTable( const RtfAttributeOutput& rAttrOutput )
 
 
 WW8_WrPlc0::WW8_WrPlc0( sal_uLong nOffset )
-    : aPos( 4, 4 ), nOfs( nOffset )
+    : nOfs( nOffset )
 {
 }
 
 void WW8_WrPlc0::Append( sal_uLong nStartCpOrFc )
 {
-    aPos.Insert( nStartCpOrFc - nOfs, aPos.Count() );
+    aPos.push_back( nStartCpOrFc - nOfs );
 }
 
 void WW8_WrPlc0::Write( SvStream& rStrm )
 {
-    sal_uInt16 nLen = aPos.Count();
-    for( sal_uInt16 i = 0; i < nLen; ++i )
+    std::vector<sal_uLong>::const_iterator iter;
+    for( iter = aPos.begin(); iter != aPos.end(); ++iter )
     {
         SVBT32 nP;
-        UInt32ToSVBT32( aPos[i], nP );
+        UInt32ToSVBT32( *iter, nP );
         rStrm.Write( nP, 4 );
     }
 }
@@ -931,8 +929,7 @@ void WW8_WrPlc0::Write( SvStream& rStrm )
 //------------------------------------------------------------------------------
 
 MSWordSections::MSWordSections( MSWordExportBase& rExport )
-    : mbDocumentIsProtected( false ),
-      aSects( 4, 4 )
+    : mbDocumentIsProtected( false )
 {
     const SwSectionFmt *pFmt = 0;
     rExport.pAktPageDesc = &const_cast<const SwDoc *>(rExport.pDoc)->GetPageDesc( 0 );
@@ -981,14 +978,13 @@ MSWordSections::MSWordSections( MSWordExportBase& rExport )
 
 WW8_WrPlcSepx::WW8_WrPlcSepx( MSWordExportBase& rExport )
     : MSWordSections( rExport ),
-      aCps( 4, 4 ),
       pAttrs( 0 ),
       pTxtPos( 0 ),
       bNoMoreSections( false )
 {
     // to be in sync with the AppendSection() call in the MSWordSections
     // constructor
-    aCps.Insert( sal_uLong( 0 ), aCps.Count() );
+    aCps.push_back( 0 );
 }
 
 MSWordSections::~MSWordSections()
@@ -997,7 +993,7 @@ MSWordSections::~MSWordSections()
 
 WW8_WrPlcSepx::~WW8_WrPlcSepx()
 {
-    sal_uInt16 nLen = aSects.Count();
+    sal_uInt16 nLen = aSects.size();
     if( pAttrs )
     {
         while( nLen )
@@ -1009,11 +1005,11 @@ WW8_WrPlcSepx::~WW8_WrPlcSepx()
 
 sal_uInt16 MSWordSections::CurrentNumberOfColumns( const SwDoc &rDoc ) const
 {
-    OSL_ENSURE( aSects.Count(), "no segement inserted yet" );
-    if ( !aSects.Count() )
+    OSL_ENSURE( !aSects.empty(), "no segement inserted yet" );
+    if ( aSects.empty() )
         return 1;
 
-    return NumberOfColumns( rDoc, aSects[aSects.Count() - 1] );
+    return NumberOfColumns( rDoc, aSects.back() );
 }
 
 sal_uInt16 MSWordSections::NumberOfColumns( const SwDoc &rDoc, const WW8_SepInfo& rInfo ) const
@@ -1043,8 +1039,8 @@ sal_uInt16 MSWordSections::NumberOfColumns( const SwDoc &rDoc, const WW8_SepInfo
 
 const WW8_SepInfo* MSWordSections::CurrentSectionInfo()
 {
-    if ( aSects.Count() > 0 )
-        return &aSects[aSects.Count() - 1];
+    if ( !aSects.empty() )
+        return &aSects.back();
 
     return NULL;
 }
@@ -1052,9 +1048,8 @@ const WW8_SepInfo* MSWordSections::CurrentSectionInfo()
 void MSWordSections::AppendSection( const SwPageDesc* pPd,
     const SwSectionFmt* pSectionFmt, sal_uLong nLnNumRestartNo )
 {
-    aSects.Insert( WW8_SepInfo( pPd, pSectionFmt, nLnNumRestartNo ),
-            aSects.Count() );
-    NeedsDocumentProtected( aSects[aSects.Count()-1] );
+    aSects.push_back( WW8_SepInfo( pPd, pSectionFmt, nLnNumRestartNo ) );
+    NeedsDocumentProtected( aSects.back() );
 }
 
 void WW8_WrPlcSepx::AppendSep( WW8_CP nStartCp, const SwPageDesc* pPd,
@@ -1062,7 +1057,7 @@ void WW8_WrPlcSepx::AppendSep( WW8_CP nStartCp, const SwPageDesc* pPd,
 {
     if ( !bNoMoreSections )
     {
-        aCps.Insert( nStartCp, aCps.Count() );
+        aCps.push_back( nStartCp );
 
         AppendSection( pPd, pSectionFmt, nLnNumRestartNo );
     }
@@ -1073,7 +1068,7 @@ void MSWordSections::AppendSection( const SwFmtPageDesc& rPD,
 {
     WW8_SepInfo aI( rPD.GetPageDesc(), pSectionFmt, nLnNumRestartNo,
             rPD.GetNumOffset(), &rNd );
-    aSects.Insert( aI, aSects.Count() );
+    aSects.push_back( aI );
     NeedsDocumentProtected( aI );
 }
 
@@ -1082,7 +1077,7 @@ void WW8_WrPlcSepx::AppendSep( WW8_CP nStartCp, const SwFmtPageDesc& rPD,
 {
     if ( !bNoMoreSections )
     {
-        aCps.Insert(nStartCp, aCps.Count());
+        aCps.push_back( nStartCp );
 
         AppendSection( rPD, rNd, pSectionFmt, nLnNumRestartNo );
     }
@@ -1094,7 +1089,7 @@ void WW8_WrPlcSepx::AppendSep( WW8_CP nStartCp, const SwFmtPageDesc& rPD,
 
 void MSWordSections::SetNum( const SwTxtNode* pNumNd )
 {
-    WW8_SepInfo& rInfo = aSects[ aSects.Count() - 1 ];
+    WW8_SepInfo& rInfo = aSects.back();
     if ( !rInfo.pNumNd ) // noch nicht belegt
         rInfo.pNumNd = pNumNd;
 }
@@ -1234,9 +1229,10 @@ void MSWordSections::CheckForFacinPg( WW8Export& rWrt ) const
     // 2 Werte werden gesetzt
     //      Dop.fFacingPages            == Kopf-/Fusszeilen unterschiedlich
     //      Dop.fSwapBordersFacingPgs   == gespiegelte Raender
-    for( sal_uInt16 i = 0, nEnde = 0; i < aSects.Count(); ++i )
+    std::vector<WW8_SepInfo>::const_iterator iter = aSects.begin();
+    for( sal_uInt16 nEnde = 0; iter != aSects.end(); ++iter )
     {
-        WW8_SepInfo& rSepInfo = aSects[i];
+        const WW8_SepInfo& rSepInfo = *iter;
         if( !rSepInfo.pSectionFmt )
         {
             const SwPageDesc* pPd = rSepInfo.pPageDesc;
@@ -1764,7 +1760,7 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt
 
 bool WW8_WrPlcSepx::WriteKFTxt( WW8Export& rWrt )
 {
-    pAttrs = new WW8_PdAttrDesc[ aSects.Count() ];
+    pAttrs = new WW8_PdAttrDesc[ aSects.size() ];
     sal_uLong nCpStart = rWrt.Fc2Cp( rWrt.Strm().Tell() );
 
     OSL_ENSURE( !pTxtPos, "wer hat den Pointer gesetzt?" );
@@ -1775,7 +1771,7 @@ bool WW8_WrPlcSepx::WriteKFTxt( WW8Export& rWrt )
 
     unsigned int nOldIndex = rWrt.GetHdFtIndex();
     rWrt.SetHdFtIndex( 0 );
-    for ( sal_uInt16 i = 0; i < aSects.Count(); ++i )
+    for ( sal_uInt16 i = 0; i < aSects.size(); ++i )
     {
         WW8_PdAttrDesc* pA = pAttrs + i;
         pA->pData = 0;
@@ -1814,7 +1810,7 @@ bool WW8_WrPlcSepx::WriteKFTxt( WW8Export& rWrt )
 void WW8_WrPlcSepx::WriteSepx( SvStream& rStrm ) const
 {
     sal_uInt16 i;
-    for( i = 0; i < aSects.Count(); i++ ) // ueber alle Sections
+    for( i = 0; i < aSects.size(); i++ )
     {
         WW8_PdAttrDesc* pA = pAttrs + i;
         if( pA->nLen && pA->pData != NULL)
@@ -1830,12 +1826,11 @@ void WW8_WrPlcSepx::WriteSepx( SvStream& rStrm ) const
 
 void WW8_WrPlcSepx::WritePlcSed( WW8Export& rWrt ) const
 {
-    OSL_ENSURE( aCps.Count() == aSects.Count() + 1, "WrPlcSepx: DeSync" );
+    OSL_ENSURE( aCps.size() == aSects.size() + 1, "WrPlcSepx: DeSync" );
     sal_uLong nFcStart = rWrt.pTableStrm->Tell();
 
     sal_uInt16 i;
-    // ( ueber alle Sections )
-    for( i = 0; i <= aSects.Count(); i++ )
+    for( i = 0; i <= aSects.size(); i++ )
     {
         sal_uInt32 nP = aCps[i];
         SVBT32 nPos;
@@ -1845,8 +1840,7 @@ void WW8_WrPlcSepx::WritePlcSed( WW8Export& rWrt ) const
 
     static WW8_SED aSed = {{4, 0},{0, 0, 0, 0},{0, 0},{0xff, 0xff, 0xff, 0xff}};
 
-    // ( ueber alle Sections )
-    for( i = 0; i < aSects.Count(); i++ )
+    for( i = 0; i < aSects.size(); i++ )
     {
         WW8_PdAttrDesc* pA = pAttrs + i;
         UInt32ToSVBT32( pA->nSepxFcPos, aSed.fcSepx );    // Sepx-Pos
@@ -1921,7 +1915,7 @@ void MSWordExportBase::WriteHeaderFooterText( const SwFmt& rFmt, bool bHeader )
 // WW8_WrPlcFtnEdn ist die Klasse fuer Fuss- und Endnoten
 //------------------------------------------------------------------------------
 WW8_WrPlcSubDoc::WW8_WrPlcSubDoc()
-    : aCps( 0, 16 ), aCntnt( 0, 16 ), pTxtPos( 0 )
+    : aCntnt( 0, 16 ), pTxtPos( 0 )
 {
 }
 
@@ -1932,7 +1926,7 @@ WW8_WrPlcSubDoc::~WW8_WrPlcSubDoc()
 
 void WW8_WrPlcFtnEdn::Append( WW8_CP nCp, const SwFmtFtn& rFtn )
 {
-    aCps.Insert( nCp, aCps.Count() );
+    aCps.push_back( nCp );
     void* p = (void*)&rFtn;
     aCntnt.Insert( p, aCntnt.Count() );
 }
@@ -1955,7 +1949,7 @@ WW8_Annotation::WW8_Annotation(const SwRedlineData* pRedline) : mpRichText(0)
 
 void WW8_WrPlcAnnotations::Append( WW8_CP nCp, const SwPostItField *pPostIt )
 {
-    aCps.Insert( nCp, aCps.Count() );
+    aCps.push_back( nCp );
     WW8_Annotation* p = new WW8_Annotation(pPostIt);
     aCntnt.Insert( p, aCntnt.Count() );
 }
@@ -1963,7 +1957,7 @@ void WW8_WrPlcAnnotations::Append( WW8_CP nCp, const SwPostItField *pPostIt )
 void WW8_WrPlcAnnotations::Append( WW8_CP nCp, const SwRedlineData *pRedline )
 {
     maProcessedRedlines.insert(pRedline);
-    aCps.Insert( nCp, aCps.Count() );
+    aCps.push_back( nCp );
     WW8_Annotation* p = new WW8_Annotation(pRedline);
     aCntnt.Insert( p, aCntnt.Count() );
 }
@@ -2017,7 +2011,7 @@ bool WW8_WrPlcSubDoc::WriteGenericTxt( WW8Export& rWrt, sal_uInt8 nTTyp,
             {
                 // textbox - content
                 WW8_CP nCP = rWrt.Fc2Cp( rWrt.Strm().Tell() );
-                aCps.Insert( nCP, i );
+                aCps.insert( aCps.begin()+i, nCP );
                 pTxtPos->Append( nCP );
 
                 // is it an writer or sdr - textbox?
@@ -2111,11 +2105,11 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
     typedef ::std::vector<String>::iterator myiter;
 
     sal_uLong nFcStart = rWrt.pTableStrm->Tell();
-    sal_uInt16 nLen = aCps.Count();
+    sal_uInt16 nLen = aCps.size();
     if ( !nLen )
         return;
 
-    OSL_ENSURE( aCps.Count() + 2 == pTxtPos->Count(), "WritePlc: DeSync" );
+    OSL_ENSURE( aCps.size() + 2 == pTxtPos->Count(), "WritePlc: DeSync" );
 
     ::std::vector<String> aStrArr;
     WW8Fib& rFib = *rWrt.pFib;              // n+1-te CP-Pos nach Handbuch
@@ -2191,7 +2185,7 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
         case TXT_HFTXTBOX:
             {
                 pTxtPos->Write( *rWrt.pTableStrm );
-                const SvULongs* pShapeIds = GetShapeIdArr();
+                const std::vector<sal_uInt32>* pShapeIds = GetShapeIdArr();
                 OSL_ENSURE( pShapeIds, "wo sind die ShapeIds?" );
 
                 for ( i = 0; i < nLen; ++i )
@@ -2330,7 +2324,7 @@ void WW8_WrPlcSubDoc::WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp,
     rTxtCount = rWrt.pTableStrm->Tell() - nFcStart;
 }
 
-const SvULongs* WW8_WrPlcSubDoc::GetShapeIdArr() const
+const std::vector<sal_uInt32>* WW8_WrPlcSubDoc::GetShapeIdArr() const
 {
     return 0;
 }
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index cf07bc8..ae98d30 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -42,8 +42,6 @@
 #include <osl/endian.h>
 #include <docsh.hxx>
 
-#include <svl/svstdarr.hxx>
-
 #include <unotools/fltrcfg.hxx>
 #include <vcl/salbtype.hxx>
 #include <sot/storage.hxx>
@@ -602,7 +600,7 @@ const SfxPoolItem& MSWordExportBase::GetItem(sal_uInt16 nWhich) const
 //------------------------------------------------------------------------------
 
 WW8_WrPlc1::WW8_WrPlc1( sal_uInt16 nStructSz )
-    : aPos( 16, 16 ), nStructSiz( nStructSz )
+    : nStructSiz( nStructSz )
 {
     nDataLen = 16 * nStructSz;
     pData = new sal_uInt8[ nDataLen ];
@@ -615,15 +613,15 @@ WW8_WrPlc1::~WW8_WrPlc1()
 
 WW8_CP WW8_WrPlc1::Prev() const
 {
-    sal_uInt16 nLen = aPos.Count();
-    OSL_ENSURE(nLen,"Prev called on empty list");
-    return nLen ? aPos[nLen-1] : 0;
+    bool b = !aPos.empty();
+    OSL_ENSURE(b,"Prev called on empty list");
+    return b ? aPos.back() : 0;
 }
 
 void WW8_WrPlc1::Append( WW8_CP nCp, const void* pNewData )
 {
-    sal_uLong nInsPos = aPos.Count() * nStructSiz;
-    aPos.Insert( nCp, aPos.Count() );
+    sal_uLong nInsPos = aPos.size() * nStructSiz;
+    aPos.push_back( nCp );
     if( nDataLen < nInsPos + nStructSiz )
     {
         sal_uInt8* pNew = new sal_uInt8[ 2 * nDataLen ];
@@ -637,11 +635,11 @@ void WW8_WrPlc1::Append( WW8_CP nCp, const void* pNewData )
 
 void WW8_WrPlc1::Finish( sal_uLong nLastCp, sal_uLong nSttCp )
 {
-    if( aPos.Count() )
+    if( !aPos.empty() )
     {
-        aPos.Insert( nLastCp, aPos.Count() );
+        aPos.push_back( nLastCp );
         if( nSttCp )
-            for( sal_uInt16 n = 0; n < aPos.Count(); ++n )
+            for( sal_uInt32 n = 0; n < aPos.size(); ++n )
                 aPos[ n ] -= nSttCp;
     }
 }
@@ -649,8 +647,8 @@ void WW8_WrPlc1::Finish( sal_uLong nLastCp, sal_uLong nSttCp )
 
 void WW8_WrPlc1::Write( SvStream& rStrm )
 {
-    sal_uInt16 i;
-    for( i = 0; i < aPos.Count(); ++i )
+    sal_uInt32 i;
+    for( i = 0; i < aPos.size(); ++i )
         SwWW8Writer::WriteLong( rStrm, aPos[i] );
     if( i )
         rStrm.Write( pData, (i-1) * nStructSiz );
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index c3cbd09..2d606c9 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -31,10 +31,6 @@
 
 #include <tools/solar.h>        // UINTXX
 #include <tools/gen.hxx>
-#ifndef _SVSTDARR_HXX
-#define _SVSTDARR_ULONGS
-#include <svl/svstdarr.hxx>
-#endif
 #include <editeng/editdata.hxx>
 
 #include <map>
@@ -179,15 +175,13 @@ struct WW8_SepInfo
     bool IsProtected() const;
 };
 
-SV_DECL_VARARR( WW8_WrSepInfoPtrs, WW8_SepInfo, 4, 4 )
-
 /// Class to collect and output the sections/headers/footers.
 // Plc fuer PageDescs -> Sepx ( Section Extensions )
 class MSWordSections
 {
 protected:
     bool mbDocumentIsProtected;
-    WW8_WrSepInfoPtrs aSects;   // PTRARR von SwPageDesc und SwSectionFmt
+    std::vector<WW8_SepInfo> aSects;
 
     void CheckForFacinPg( WW8Export& rWrt ) const;
     void WriteOlst( WW8Export& rWrt, const WW8_SepInfo& rSectionInfo );
@@ -231,7 +225,7 @@ public:
 
 class WW8_WrPlcSepx : public MSWordSections
 {
-    SvULongs aCps;              // PTRARR von CPs
+    std::vector<WW8_CP> aCps;
     WW8_PdAttrDesc* pAttrs;
     WW8_WrPlc0* pTxtPos;        // Pos der einzelnen Header / Footer
     bool bNoMoreSections;
@@ -252,7 +246,7 @@ public:
                     const SwNode& rNd,
                     const SwSectionFmt* pSectionFmt,
                     sal_uLong nLnNumRestartNo );
-    void Finish( WW8_CP nEndCp ) { aCps.Insert( nEndCp, aCps.Count() ); }
+    void Finish( WW8_CP nEndCp ) { aCps.push_back( nEndCp ); }
 
     bool WriteKFTxt( WW8Export& rWrt );
     void WriteSepx( SvStream& rStrm ) const;
@@ -1157,7 +1151,7 @@ private:
     WW8_WrPlcSubDoc(const WW8_WrPlcSubDoc&);
     WW8_WrPlcSubDoc& operator=(const WW8_WrPlcSubDoc&);
 protected:
-    SvULongs aCps;                  // PTRARR CP-Pos der Verweise
+    std::vector<WW8_CP> aCps;
     SvPtrarr aCntnt;                // PTRARR von SwFmtFtn/PostIts/..
     WW8_WrPlc0* pTxtPos;            // Pos der einzelnen Texte
 
@@ -1168,7 +1162,7 @@ protected:
     void WriteGenericPlc( WW8Export& rWrt, sal_uInt8 nTTyp, WW8_FC& rTxtStt,
         sal_Int32& rTxtCnt, WW8_FC& rRefStt, sal_Int32& rRefCnt ) const;
 
-    virtual const SvULongs* GetShapeIdArr() const;
+    virtual const std::vector<sal_uInt32>* GetShapeIdArr() const;
 };
 
 // Doppel-Plc fuer Footnotes/Endnotes
@@ -1221,8 +1215,8 @@ class WW8_WrPlcTxtBoxes : public WW8_WrPlcSubDoc // Doppel-Plc fuer Textboxen
 {                        // Rahmen/DrawTextboxes!
 private:
     sal_uInt8 nTyp;
-    SvULongs aShapeIds;        // VARARR of ShapeIds for the SwFrmFmts
-    virtual const SvULongs* GetShapeIdArr() const;
+    std::vector<sal_uInt32> aShapeIds;        // VARARR of ShapeIds for the SwFrmFmts
+    virtual const std::vector<sal_uInt32>* GetShapeIdArr() const;
 
     //No copying
     WW8_WrPlcTxtBoxes(const WW8_WrPlcTxtBoxes&);
@@ -1266,7 +1260,7 @@ public:
 class WW8_WrPlc1
 {
 private:
-    SvULongs aPos;              // PTRARR von CPs
+    std::vector<WW8_CP> aPos;
     sal_uInt8* pData;                // Inhalte ( Strukturen )
     sal_uLong nDataLen;
     sal_uInt16 nStructSiz;
@@ -1275,7 +1269,7 @@ private:
     WW8_WrPlc1(const WW8_WrPlc1&);
     WW8_WrPlc1& operator=(const WW8_WrPlc1&);
 protected:
-    sal_uInt16 Count() const { return aPos.Count(); }
+    sal_uInt16 Count() const { return aPos.size(); }
     void Write( SvStream& rStrm );
     WW8_CP Prev() const;
 public:
-- 
1.7.4.1


--=-4IaUljWrZDWG8Qwxhs9X--



More information about the LibreOffice mailing list