>
> Also haven't pushed
> 0002-Replace-List-with-std-vector-XclExpUserBView.calc.patch because I
> am not sure about
>
> --- cut ---
>  XclExpUserBViewList::XclExpUserBViewList( const ScChangeTrack&
> rChangeTrack )
> +    : aViews(rChangeTrack.GetUserCollection().GetCount())
> [...]
> -            List::Insert( new XclExpUserBView( pStrData->GetString(),
> aGUID ), LIST_APPEND );
> +            aViews.push_back( new XclExpUserBView( pStrData->GetString(),
> aGUID ) );
> --- cut ---
>
> Why do you initialize the vector with NULL pointers?
>
> IMHO, all the pointers will stay NULL because you later use .push_back().
>
> For example, rChangeTrack has the collection: A B C D and GetCount()
> returns 4.
> If you initialize the vector, you will end with the vector: 0 0 0 0 A B C D
>
> Or did I miss something?
>
>
Nope, heres a patch fixing those issues
From 317ae353106a4c71905fe168c3f4e2a0ab179c9e Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsra...@gmail.com>
Date: Tue, 7 Jun 2011 19:22:40 -0430
Subject: [PATCH] Replace List with std::vector<XclExpUserBView*>.

---
 sc/source/filter/excel/excdoc.cxx            |   10 ++++++----
 sc/source/filter/inc/XclExpChangeTrack.hxx   |   18 +++++++++++++-----
 sc/source/filter/xcl97/XclExpChangeTrack.cxx |   17 ++++++++++++-----
 3 files changed, 31 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..aa9d886 100644
--- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx
+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx
@@ -147,29 +147,36 @@ sal_Size XclExpUserBView::GetLen() const
 //___________________________________________________________________
 
 XclExpUserBViewList::XclExpUserBViewList( const ScChangeTrack& rChangeTrack )
+    : aViews(rChangeTrack.GetUserCollection().GetCount())
 {
     sal_uInt8 aGUID[ 16 ];
     sal_Bool bValidGUID = false;
+    XclExpUserBView *pView = NULL;
     const ScStrCollection& rStrColl = rChangeTrack.GetUserCollection();
     for( sal_uInt16 nIndex = 0; nIndex < rStrColl.GetCount(); nIndex++ )
     {
         const StrData* pStrData = (const StrData*) rStrColl.At( nIndex );
         lcl_GenerateGUID( aGUID, bValidGUID );
         if( pStrData )
-            List::Insert( new XclExpUserBView( pStrData->GetString(), aGUID ), LIST_APPEND );
+        {
+            pView = new XclExpUserBView( pStrData->GetString(), aGUID );
+
+            if (pView)
+                aViews.push_back( pView );
+        }
     }
 }
 
 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

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

Reply via email to