From 0ba99ef77cf0d52331a444a3563f984e760d0db2 Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsra...@gmail.com>
Date: Thu, 2 Jun 2011 15:47:04 -0430
Subject: [PATCH 2/5] Replace List with std::vector<XclExpUserBView*>.

Change how we iterate a XclExpUserBViewList to prevent oob access.
---
 sc/source/filter/excel/excdoc.cxx            |   10 ++++++----
 sc/source/filter/inc/XclExpChangeTrack.hxx   |   18 +++++++++++++-----
 sc/source/filter/xcl97/XclExpChangeTrack.cxx |   11 ++++++-----
 3 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx
index 180d57d..8dbc680 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -530,9 +530,10 @@ void ExcTable::FillAsTable( SCTAB nCodeNameIdx )
     // change tracking
     if( rR.pUserBViewList )
     {
-        for( const XclExpUserBView* pBView = rR.pUserBViewList->First(); pBView; pBView = rR.pUserBViewList->Next() )
+        XclExpUserBViewList::const_iterator iter;
+        for ( iter = rR.pUserBViewList->begin(); iter != rR.pUserBViewList->end(); ++iter)
         {
-            Add( new XclExpUsersViewBegin( pBView->GetGUID(), nExcTab ) );
+            Add( new XclExpUsersViewBegin( (*iter)->GetGUID(), nExcTab ) );
             Add( new XclExpUsersViewEnd );
         }
     }
@@ -619,9 +620,10 @@ void ExcTable::FillAsXmlTable( SCTAB nCodeNameIdx )
     // change tracking
     if( rR.pUserBViewList )
     {
-        for( const XclExpUserBView* pBView = rR.pUserBViewList->First(); pBView; pBView = rR.pUserBViewList->Next() )
+        XclExpUserBViewList::const_iterator iter;
+        for ( iter = rR.pUserBViewList->begin(); iter != rR.pUserBViewList->end(); ++iter )
         {
-            Add( new XclExpUsersViewBegin( pBView->GetGUID(), nExcTab ) );
+            Add( new XclExpUsersViewBegin( (*iter)->GetGUID(), nExcTab ) );
             Add( new XclExpUsersViewEnd );
         }
     }
diff --git a/sc/source/filter/inc/XclExpChangeTrack.hxx b/sc/source/filter/inc/XclExpChangeTrack.hxx
index ef98f77..2c71432 100644
--- a/sc/source/filter/inc/XclExpChangeTrack.hxx
+++ b/sc/source/filter/inc/XclExpChangeTrack.hxx
@@ -64,18 +64,26 @@ public:
 //___________________________________________________________________
 // XclExpUserBViewList - list of UserBView records
 
-class XclExpUserBViewList : public ExcEmptyRec, private List
+class XclExpUserBViewList : public ExcEmptyRec
 {
 private:
-    inline XclExpUserBView*		_First()	{ return (XclExpUserBView*) List::First(); }
-    inline XclExpUserBView*		_Next()		{ return (XclExpUserBView*) List::Next(); }
+    std::vector<XclExpUserBView*> aViews;
 
 public:
+
+    typedef std::vector<XclExpUserBView*>::iterator iterator;
+    typedef std::vector<XclExpUserBView*>::const_iterator const_iterator;
+
                                 XclExpUserBViewList( const ScChangeTrack& rChangeTrack );
     virtual						~XclExpUserBViewList();
 
-    inline const XclExpUserBView* First()	{ return (const XclExpUserBView*) List::First(); }
-    inline const XclExpUserBView* Next()	{ return (const XclExpUserBView*) List::Next(); }
+    inline iterator begin () { return aViews.begin(); }
+
+    inline iterator end () { return aViews.end(); }
+
+    inline const_iterator begin () const { return aViews.begin(); }
+
+    inline const_iterator end () const { return aViews.end(); }
 
     virtual void				Save( XclExpStream& rStrm );
 };
diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
index cd78aba..7184b63 100644
--- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx
+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
@@ -147,6 +147,7 @@ sal_Size XclExpUserBView::GetLen() const
 //___________________________________________________________________
 
 XclExpUserBViewList::XclExpUserBViewList( const ScChangeTrack& rChangeTrack )
+    : aViews(rChangeTrack.GetUserCollection().GetCount())
 {
     sal_uInt8 aGUID[ 16 ];
     sal_Bool bValidGUID = false;
@@ -156,20 +157,20 @@ XclExpUserBViewList::XclExpUserBViewList( const ScChangeTrack& rChangeTrack )
         const StrData* pStrData = (const StrData*) rStrColl.At( nIndex );
         lcl_GenerateGUID( aGUID, bValidGUID );
         if( pStrData )
-            List::Insert( new XclExpUserBView( pStrData->GetString(), aGUID ), LIST_APPEND );
+            aViews.push_back( new XclExpUserBView( pStrData->GetString(), aGUID ) );
     }
 }
 
 XclExpUserBViewList::~XclExpUserBViewList()
 {
-    for( XclExpUserBView* pRec = _First(); pRec; pRec = _Next() )
-        delete pRec;
+    for( iterator iter = aViews.begin(); iter != aViews.end(); ++iter )
+        delete *iter;
 }
 
 void XclExpUserBViewList::Save( XclExpStream& rStrm )
 {
-    for( XclExpUserBView* pRec = _First(); pRec; pRec = _Next() )
-        pRec->Save( rStrm );
+   for( iterator iter = aViews.begin(); iter != aViews.end(); ++iter )
+        (*iter)->Save( rStrm );
 }
 
 //___________________________________________________________________
-- 
1.7.3.4

From 12c03ae988a406a5332cf932bb1e068e6addde1d Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsra...@gmail.com>
Date: Thu, 2 Jun 2011 16:10:54 -0430
Subject: [PATCH 3/5] Replace List for std::vector<ExcEScenarioCell>.

---
 sc/source/filter/inc/xcl97rec.hxx   |    7 +++----
 sc/source/filter/xcl97/xcl97rec.cxx |   35 ++++++++++++++++++-----------------
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/sc/source/filter/inc/xcl97rec.hxx b/sc/source/filter/inc/xcl97rec.hxx
index c92557b..b679abe 100644
--- a/sc/source/filter/inc/xcl97rec.hxx
+++ b/sc/source/filter/inc/xcl97rec.hxx
@@ -374,17 +374,16 @@ public:
 
 
 
-class ExcEScenario : public ExcRecord, private List
+class ExcEScenario : public ExcRecord
 {
 private:
     sal_Size                    nRecLen;
     XclExpString                sName;
     XclExpString                sComment;
     XclExpString                sUserName;
-    sal_uInt8                       nProtected;
+    sal_uInt8                   nProtected;
 
-    inline ExcEScenarioCell*	_First()	{ return (ExcEScenarioCell*) List::First(); }
-    inline ExcEScenarioCell*	_Next()		{ return (ExcEScenarioCell*) List::Next(); }
+    std::vector<ExcEScenarioCell> aCells;
 
     sal_Bool						Append( sal_uInt16 nCol, sal_uInt16 nRow, const String& rTxt );
 
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 085c378..6e02c1a 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1244,25 +1244,25 @@ ExcEScenario::ExcEScenario( const XclExpRoot& rRoot, SCTAB nTab )
 
 ExcEScenario::~ExcEScenario()
 {
-    for( ExcEScenarioCell* pCell = _First(); pCell; pCell = _Next() )
-        delete pCell;
 }
 
 sal_Bool ExcEScenario::Append( sal_uInt16 nCol, sal_uInt16 nRow, const String& rTxt )
 {
-    if( List::Count() == EXC_SCEN_MAXCELL )
+    if( aCells.size() == EXC_SCEN_MAXCELL )
         return false;
 
-    ExcEScenarioCell* pCell = new ExcEScenarioCell( nCol, nRow, rTxt );
-    List::Insert( pCell, LIST_APPEND );
-    nRecLen += 6 + pCell->GetStringBytes();        // 4 bytes address, 2 bytes ifmt
+    ExcEScenarioCell aCell(nCol, nRow, rTxt);
+    aCells.push_back(aCell);
+    nRecLen += 6 + aCell.GetStringBytes();        // 4 bytes address, 2 bytes ifmt
     return sal_True;
 }
 
 void ExcEScenario::SaveCont( XclExpStream& rStrm )
 {
-    rStrm	<< (sal_uInt16) List::Count()		// number of cells
-            << nProtected		            // fProtection
+    sal_uInt16 count = aCells.size();
+
+    rStrm	<< (sal_uInt16) count       		// number of cells
+            << nProtected		                // fProtection
             << (sal_uInt8) 0					// fHidden
             << (sal_uInt8) sName.Len()          // length of scen name
             << (sal_uInt8) sComment.Len()       // length of comment
@@ -1275,13 +1275,13 @@ void ExcEScenario::SaveCont( XclExpStream& rStrm )
     if( sComment.Len() )
         rStrm << sComment;
 
-    ExcEScenarioCell* pCell;
-    for( pCell = _First(); pCell; pCell = _Next() )
-        pCell->WriteAddress( rStrm );			// pos of cell
-    for( pCell = _First(); pCell; pCell = _Next() )
-        pCell->WriteText( rStrm );				// string content
+    std::vector<ExcEScenarioCell>::iterator pIter;
+    for( pIter = aCells.begin(); pIter != aCells.end(); ++pIter )
+        pIter->WriteAddress( rStrm );			// pos of cell
+    for( pIter = aCells.begin(); pIter != aCells.end(); ++pIter )
+        pIter->WriteText( rStrm );				// string content
     rStrm.SetSliceSize( 2 );
-    rStrm.WriteZeroBytes( 2 * List::Count() );  // date format
+    rStrm.WriteZeroBytes( 2 * count );  // date format
 }
 
 sal_uInt16 ExcEScenario::GetNum() const
@@ -1301,13 +1301,14 @@ void ExcEScenario::SaveXml( XclExpXmlStream& rStrm )
             XML_name,       XclXmlUtils::ToOString( sName ).getStr(),
             XML_locked,     XclXmlUtils::ToPsz( nProtected ),
             // OOXTODO: XML_hidden,
-            XML_count,      OString::valueOf( (sal_Int32) List::Count() ).getStr(),
+            XML_count,      OString::valueOf( (sal_Int32) aCells.size() ).getStr(),
             XML_user,       XESTRING_TO_PSZ( sUserName ),
             XML_comment,    XESTRING_TO_PSZ( sComment ),
             FSEND );
 
-    for( ExcEScenarioCell* pCell = _First(); pCell; pCell = _Next() )
-        pCell->SaveXml( rStrm );
+    std::vector<ExcEScenarioCell>::iterator pIter;
+    for( pIter = aCells.begin(); pIter != aCells.end(); ++pIter )
+        pIter->SaveXml( rStrm );
 
     rWorkbook->endElement( XML_scenario );
 }
-- 
1.7.3.4

From 0c6c8718edec6d4bd91a32476d0f60821d210340 Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsra...@gmail.com>
Date: Thu, 2 Jun 2011 16:14:15 -0430
Subject: [PATCH 4/5] Make read only functions in ExcEScenarioCell const.

---
 sc/source/filter/inc/xcl97rec.hxx   |    8 ++++----
 sc/source/filter/xcl97/xcl97rec.cxx |    6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/sc/source/filter/inc/xcl97rec.hxx b/sc/source/filter/inc/xcl97rec.hxx
index b679abe..6f768c0 100644
--- a/sc/source/filter/inc/xcl97rec.hxx
+++ b/sc/source/filter/inc/xcl97rec.hxx
@@ -363,13 +363,13 @@ protected:
 public:
                                 ExcEScenarioCell( sal_uInt16 nC, sal_uInt16 nR, const String& rTxt );
 
-    inline sal_Size             GetStringBytes()
+    inline sal_Size             GetStringBytes() const
                                     { return sText.GetSize(); }
 
-    void						WriteAddress( XclExpStream& rStrm );
-    void						WriteText( XclExpStream& rStrm );
+    void						WriteAddress( XclExpStream& rStrm ) const ;
+    void						WriteText( XclExpStream& rStrm ) const;
 
-    void                        SaveXml( XclExpXmlStream& rStrm );
+    void                        SaveXml( XclExpXmlStream& rStrm ) const;
 };
 
 
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 6e02c1a..7c1c19d 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1164,17 +1164,17 @@ ExcEScenarioCell::ExcEScenarioCell( sal_uInt16 nC, sal_uInt16 nR, const String&
 {
 }
 
-void ExcEScenarioCell::WriteAddress( XclExpStream& rStrm )
+void ExcEScenarioCell::WriteAddress( XclExpStream& rStrm ) const
 {
     rStrm << nRow << nCol;
 }
 
-void ExcEScenarioCell::WriteText( XclExpStream& rStrm )
+void ExcEScenarioCell::WriteText( XclExpStream& rStrm ) const
 {
     rStrm << sText;
 }
 
-void ExcEScenarioCell::SaveXml( XclExpXmlStream& rStrm )
+void ExcEScenarioCell::SaveXml( XclExpXmlStream& rStrm ) const
 {
     rStrm.GetCurrentStream()->singleElement( XML_inputCells,
             // OOXTODO: XML_deleted,
-- 
1.7.3.4

From c6431dd64daec1e91841e1df2cb06cf1ce7b4e30 Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsra...@gmail.com>
Date: Thu, 2 Jun 2011 16:30:44 -0430
Subject: [PATCH 5/5] Replace List for std::vector<ExcEScenario*>.

---
 sc/source/filter/inc/xcl97rec.hxx   |    9 ++-------
 sc/source/filter/xcl97/xcl97rec.cxx |   25 ++++++++++++++-----------
 2 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/sc/source/filter/inc/xcl97rec.hxx b/sc/source/filter/inc/xcl97rec.hxx
index 6f768c0..7248bd9 100644
--- a/sc/source/filter/inc/xcl97rec.hxx
+++ b/sc/source/filter/inc/xcl97rec.hxx
@@ -402,16 +402,11 @@ public:
 
 
 
-class ExcEScenarioManager : public ExcRecord, private List
+class ExcEScenarioManager : public ExcRecord
 {
 private:
     sal_uInt16						nActive;
-
-    inline ExcEScenario*		_First()	{ return (ExcEScenario*) List::First(); }
-    inline ExcEScenario*		_Next()		{ return (ExcEScenario*) List::Next(); }
-
-    inline void					Append( ExcEScenario* pScen )
-                                    { List::Insert( pScen, LIST_APPEND ); }
+    std::vector<ExcEScenario*> aScenes;
 
     virtual void				SaveCont( XclExpStream& rStrm );
 
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 7c1c19d..7c8c921 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1328,7 +1328,7 @@ ExcEScenarioManager::ExcEScenarioManager( const XclExpRoot& rRoot, SCTAB nTab )
 
     while( rDoc.IsScenario( nNewTab ) )
     {
-        Append( new ExcEScenario( rRoot, nNewTab ) );
+        aScenes.push_back( new ExcEScenario( rRoot, nNewTab ) );
 
         if( rDoc.IsActiveScenario( nNewTab ) )
             nActive = static_cast<sal_uInt16>(nNewTab - nFirstTab);
@@ -1338,30 +1338,32 @@ ExcEScenarioManager::ExcEScenarioManager( const XclExpRoot& rRoot, SCTAB nTab )
 
 ExcEScenarioManager::~ExcEScenarioManager()
 {
-    for( ExcEScenario* pScen = _First(); pScen; pScen = _Next() )
-        delete pScen;
+    std::vector<ExcEScenario*>::iterator pIter;
+    for( pIter = aScenes.begin(); pIter != aScenes.end(); ++pIter )
+        delete *pIter;
 }
 
 void ExcEScenarioManager::SaveCont( XclExpStream& rStrm )
 {
-    rStrm	<< (sal_uInt16) List::Count()		// number of scenarios
+    rStrm	<< (sal_uInt16) aScenes.size()	// number of scenarios
             << nActive						// active scen
             << nActive						// last displayed
-            << (sal_uInt16) 0;					// reference areas
+            << (sal_uInt16) 0;				// reference areas
 }
 
 void ExcEScenarioManager::Save( XclExpStream& rStrm )
 {
-    if( List::Count() )
+    if( !aScenes.empty() )
         ExcRecord::Save( rStrm );
 
-    for( ExcEScenario* pScen = _First(); pScen; pScen = _Next() )
-        pScen->Save( rStrm );
+    std::vector<ExcEScenario*>::iterator pIter;
+    for( pIter = aScenes.begin(); pIter != aScenes.end(); ++pIter )
+        (*pIter)->Save( rStrm );
 }
 
 void ExcEScenarioManager::SaveXml( XclExpXmlStream& rStrm )
 {
-    if( ! List::Count() )
+    if( aScenes.empty() )
         return;
 
     sax_fastparser::FSHelperPtr& rWorkbook = rStrm.GetCurrentStream();
@@ -1371,8 +1373,9 @@ void ExcEScenarioManager::SaveXml( XclExpXmlStream& rStrm )
             // OOXTODO: XML_sqref,
             FSEND );
 
-    for( ExcEScenario* pScen = _First(); pScen; pScen = _Next() )
-        pScen->SaveXml( rStrm );
+    std::vector<ExcEScenario*>::iterator pIter;
+    for( pIter = aScenes.begin(); pIter != aScenes.end(); ++pIter )
+        (*pIter)->SaveXml( rStrm );
 
     rWorkbook->endElement( XML_scenarios );
 }
-- 
1.7.3.4

From 5f63a5c46dea18bb7a05f4fcc479c559c18f1fc9 Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsra...@gmail.com>
Date: Thu, 2 Jun 2011 17:20:50 -0430
Subject: [PATCH] Replace List for std::vector<XclObj*>.

Added extra functions to iterate and delete last element.
---
 sc/source/filter/excel/xeescher.cxx |    6 ++--
 sc/source/filter/inc/xcl97rec.hxx   |   28 ++++++++++++++--
 sc/source/filter/xcl97/xcl97rec.cxx |   60 +++++++++++++++++++++-------------
 3 files changed, 64 insertions(+), 30 deletions(-)

diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx
index c8b6cfc..e466614 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -1605,7 +1605,7 @@ XclExpMsoDrawing* XclExpObjectManager::GetMsodrawingPerSheet()
 
 bool XclExpObjectManager::HasObj() const
 {
-    return mxObjList->Count() > 0;
+    return !mxObjList->empty();
 }
 
 sal_uInt16 XclExpObjectManager::AddObj( XclObj* pObjRec )
@@ -1615,8 +1615,8 @@ sal_uInt16 XclExpObjectManager::AddObj( XclObj* pObjRec )
 
 XclObj* XclExpObjectManager::RemoveLastObj()
 {
-    XclObj* pLastObj = static_cast< XclObj* >( mxObjList->Last() );
-    mxObjList->Remove();    // remove current, which is the Last()
+    XclObj* pLastObj = mxObjList->back();
+    mxObjList->pop_back();
     return pLastObj;
 }
 
diff --git a/sc/source/filter/inc/xcl97rec.hxx b/sc/source/filter/inc/xcl97rec.hxx
index 7248bd9..147c9c9 100644
--- a/sc/source/filter/inc/xcl97rec.hxx
+++ b/sc/source/filter/inc/xcl97rec.hxx
@@ -39,19 +39,37 @@ class XclObj;
 class XclExpMsoDrawing;
 class SdrCaptionObj;
 
-class XclExpObjList : public List, public ExcEmptyRec, protected XclExpRoot
+class XclExpObjList : public ExcEmptyRec, protected XclExpRoot
 {
 public:
+
+    typedef std::vector<XclObj*>::iterator iterator;
+
     explicit            XclExpObjList( const XclExpRoot& rRoot, XclEscherEx& rEscherEx );
     virtual             ~XclExpObjList();
 
-    XclObj*             First() { return (XclObj*) List::First(); }
-    XclObj*             Next() { return (XclObj*) List::Next(); }
-
     /// return: 1-based ObjId
     ///! count>=0xFFFF: Obj will be deleted, return 0
     sal_uInt16              Add( XclObj* );
 
+    XclObj* back () { return maObjs.empty() ? NULL : maObjs.back(); }
+
+    /**
+     *
+     * @brief Remove last element in the list.
+     *
+     */
+
+    void pop_back ();
+
+    inline bool empty () const { return maObjs.empty(); }
+
+    inline sal_uInt16 size () const { return static_cast<sal_uInt16>(maObjs.size()); }
+
+    inline iterator begin () { return maObjs.begin(); }
+
+    inline iterator end () { return maObjs.end(); }
+
     inline XclExpMsoDrawing* GetMsodrawingPerSheet() { return pMsodrawingPerSheet; }
 
                                 /// close groups and DgContainer opened in ctor
@@ -69,6 +87,8 @@ private:
     XclEscherEx&        mrEscherEx;
     XclExpMsoDrawing*   pMsodrawingPerSheet;
     XclExpMsoDrawing*   pSolverContainer;
+
+    std::vector<XclObj*> maObjs;
 };
 
 
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 7c8c921..31c3419 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -118,28 +118,38 @@ XclExpObjList::XclExpObjList( const XclExpRoot& rRoot, XclEscherEx& rEscherEx )
 
 XclExpObjList::~XclExpObjList()
 {
-    for ( XclObj* p = First(); p; p = Next() )
-        delete p;
+    std::vector<XclObj*>::iterator pIter;
+    for ( pIter = maObjs.begin(); pIter != maObjs.end(); ++pIter )
+        delete *pIter;
     delete pMsodrawingPerSheet;
     delete pSolverContainer;
 }
 
 sal_uInt16 XclExpObjList::Add( XclObj* pObj )
 {
-    OSL_ENSURE( Count() < 0xFFFF, "XclExpObjList::Add: too much for Xcl" );
-    if ( Count() < 0xFFFF )
+    OSL_ENSURE( maObjs.size() < 0xFFFF, "XclExpObjList::Add: too much for Xcl" );
+
+    sal_uInt16 nSize = maObjs.size();
+
+    if ( nSize < 0xFFFF )
     {
-        Insert( pObj, LIST_APPEND );
-        sal_uInt16 nCnt = (sal_uInt16) Count();
-        pObj->SetId( nCnt );
+        maObjs.push_back(pObj);
+        ++nSize;
+        pObj->SetId( nSize );
         pObj->SetTab( mnScTab );
-        return nCnt;
     }
     else
     {
         delete pObj;
-        return 0;
+        nSize = 0;
     }
+
+    return nSize;
+}
+
+void XclExpObjList::pop_back ()
+{
+    maObjs.pop_back();
 }
 
 void XclExpObjList::EndSheet()
@@ -157,16 +167,17 @@ void XclExpObjList::Save( XclExpStream& rStrm )
     //! Escher must be written, even if there are no objects
     pMsodrawingPerSheet->Save( rStrm );
 
-    for ( XclObj* p = First(); p; p = Next() )
-        p->Save( rStrm );
+    std::vector<XclObj*>::iterator pIter;
+    for ( pIter = maObjs.begin(); pIter != maObjs.end(); ++pIter )
+        (*pIter)->Save( rStrm );
 
     if( pSolverContainer )
         pSolverContainer->Save( rStrm );
 }
 
-static bool IsVmlObject( const XclObj& rObj )
+static bool IsVmlObject( const XclObj *rObj )
 {
-    switch( rObj.GetObjType() )
+    switch( rObj->GetObjType() )
     {
         case EXC_OBJTYPE_NOTE:
             return true;
@@ -180,8 +191,9 @@ static sal_Int32 GetVmlObjectCount( XclExpObjList& rList )
 {
     sal_Int32 nNumVml = 0;
 
-    for ( XclObj* p = rList.First(); p; p = rList.Next() )
-        if( IsVmlObject( *p ) )
+    std::vector<XclObj*>::iterator pIter;
+    for ( pIter = rList.begin(); pIter != rList.end(); ++pIter )
+        if( IsVmlObject( *pIter ) )
             ++nNumVml;
 
     return nNumVml;
@@ -191,7 +203,7 @@ static sal_Int32 GetVmlObjectCount( XclExpObjList& rList )
 static void SaveDrawingMLObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_Int32& nDrawingMLCount )
 {
     sal_Int32 nVmlObjects = GetVmlObjectCount( rList );
-    if( (rList.Count() - nVmlObjects) == 0 )
+    if( (rList.size() - nVmlObjects) == 0 )
         return;
 
     sal_Int32 nDrawing = ++nDrawingMLCount;
@@ -215,11 +227,12 @@ static void SaveDrawingMLObjects( XclExpObjList& rList, XclExpXmlStream& rStrm,
             FSNS( XML_xmlns, XML_r ),   "http://schemas.openxmlformats.org/officeDocument/2006/relationships";,
             FSEND );
 
-    for ( XclObj* p = rList.First(); p; p = rList.Next() )
+    std::vector<XclObj*>::iterator pIter;
+    for ( pIter = rList.begin(); pIter != rList.end(); ++pIter )
     {
-        if( IsVmlObject( *p ) )
+        if( IsVmlObject( *pIter ) )
             continue;
-        p->SaveXml( rStrm );
+        (*pIter)->SaveXml( rStrm );
     }
 
     pDrawing->endElement( FSNS( XML_xdr, XML_wsDr ) );
@@ -254,11 +267,12 @@ static void SaveVmlObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_In
             FSNS( XML_xmlns, XML_x ),   "urn:schemas-microsoft-com:office:excel",
             FSEND );
 
-    for ( XclObj* p = rList.First(); p; p = rList.Next() )
+    std::vector<XclObj*>::iterator pIter;
+    for ( pIter = rList.begin(); pIter != rList.end(); ++pIter )
     {
-        if( !IsVmlObject( *p ) )
+        if( !IsVmlObject( *pIter ) )
             continue;
-        p->SaveXml( rStrm );
+        (*pIter)->SaveXml( rStrm );
     }
 
     pVmlDrawing->endElement( XML_xml );
@@ -272,7 +286,7 @@ void XclExpObjList::SaveXml( XclExpXmlStream& rStrm )
     if( pSolverContainer )
         pSolverContainer->SaveXml( rStrm );
 
-    if( Count() == 0 )
+    if( maObjs.empty())
         return;
 
     SaveDrawingMLObjects( *this, rStrm, mnDrawingMLCount );
-- 
1.7.3.4

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to