[Libreoffice-commits] .: sc/source

Petr Mladek pmladek at kemper.freedesktop.org
Wed Jun 8 06:19:15 PDT 2011


 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(-)

New commits:
commit 31a268eb01d9d808a35ffe3161acbec7d4134519
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Thu Jun 2 17:20:50 2011 -0430

    Replace List for std::vector<XclObj*>.
    
    Added extra functions to iterate and delete last element.

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..aa8ce0b 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 size_t size () const { return 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..ff72888 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" );
+
+    size_t 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 );


More information about the Libreoffice-commits mailing list