(I'm having trouble with logerrit)

This replaces the ScaList class used in scaddins with/source with std::vector.

Odd issues:
- I've written a wrap around to std::vector<ScaFuncData*> since the original
ScaFuncDataList class would generate its contents in the constructor and
supported looking contents up by name.
- ScaList, ScaOUStringList and ScaFuncDataList were all defined twice. This
patch has maintained doubling up the wrapper class for the moment.

-- 
Ryan McCoskrie
North Canterbury, New Zealand
diff --git a/scaddins/source/datefunc/datefunc.cxx b/scaddins/source/datefunc/datefunc.cxx
index 64679ff..3de398d 100644
--- a/scaddins/source/datefunc/datefunc.cxx
+++ b/scaddins/source/datefunc/datefunc.cxx
@@ -35,38 +35,6 @@ using namespace ::com::sun::star;
 
 #define STR_FROM_ANSI( s )      OUString( s, strlen( s ), RTL_TEXTENCODING_MS_1252 )
 
-const sal_uInt32 ScaList::nStartSize = 16;
-const sal_uInt32 ScaList::nIncrSize = 16;
-
-ScaList::ScaList() :
-    pData( new void*[ nStartSize ] ),
-    nSize( nStartSize ),
-    nCount( 0 ),
-    nCurr( 0 )
-{
-}
-
-ScaList::~ScaList()
-{
-    delete[] pData;
-}
-
-void ScaList::_Grow()
-{
-    nSize += nIncrSize;
-
-    void** pNewData = new void*[ nSize ];
-    memcpy( pNewData, pData, nCount * sizeof( void* ) );
-
-    delete[] pData;
-    pData = pNewData;
-}
-
-ScaStringList::~ScaStringList()
-{
-    for( OUString* pStr = First(); pStr; pStr = Next() )
-        delete pStr;
-}
 
 ScaResId::ScaResId( sal_uInt16 nId, ResMgr& rResMgr ) :
     ResId( nId, rResMgr )
@@ -109,7 +77,7 @@ ScaFuncData::ScaFuncData( const ScaFuncDataBase& rBaseData, ResMgr& rResMgr ) :
     const ResStringArray& rArr = aArrLoader.GetStringArray();
 
     for( sal_uInt32 nIndex = 0; nIndex < rArr.Count(); nIndex++ )
-        aCompList.Append( rArr.GetString( nIndex ) );
+        aCompList.push_back( rArr.GetString( nIndex ) );
 }
 
 ScaFuncData::~ScaFuncData()
@@ -125,31 +93,30 @@ sal_uInt16 ScaFuncData::GetStrIndex( sal_uInt16 nParam ) const
 
 
 ScaFuncDataList::ScaFuncDataList( ResMgr& rResMgr ) :
-    nLast( 0xFFFFFFFF )
+    nLast( contents.begin() )
 {
     for( sal_uInt16 nIndex = 0; nIndex < SAL_N_ELEMENTS(pFuncDataArr); nIndex++ )
-        Append( new ScaFuncData( pFuncDataArr[ nIndex ], rResMgr ) );
+        contents.push_back( new ScaFuncData( pFuncDataArr[ nIndex ], rResMgr ) );
 }
 
 ScaFuncDataList::~ScaFuncDataList()
 {
-    for( ScaFuncData* pFData = First(); pFData; pFData = Next() )
-        delete pFData;
+    for( std::vector<ScaFuncData*>::iterator it = contents.begin(); it != contents.end(); ++it )
+        delete *nLast;
 }
 
-const ScaFuncData* ScaFuncDataList::Get( const OUString& rProgrammaticName ) const
+const ScaFuncData* ScaFuncDataList::Get( const OUString& rProgrammaticName )
 {
     if( aLastName == rProgrammaticName )
-        return Get( nLast );
+        return *nLast;
 
-    for( sal_uInt32 nIndex = 0; nIndex < Count(); nIndex++ )
+    for( std::vector<ScaFuncData*>::iterator it = contents.begin(); it != contents.end(); ++it )
     {
-        const ScaFuncData* pCurr = Get( nIndex );
-        if( pCurr->Is( rProgrammaticName ) )
+        if( (*it)->Is( rProgrammaticName ) )
         {
-            const_cast< ScaFuncDataList* >( this )->aLastName = rProgrammaticName;
-            const_cast< ScaFuncDataList* >( this )->nLast = nIndex;
-            return pCurr;
+            aLastName = rProgrammaticName;
+            nLast = it;
+            return *it;
         }
     }
     return NULL;
@@ -446,13 +413,13 @@ uno::Sequence< sheet::LocalizedName > SAL_CALL ScaDateAddIn::getCompatibilityNam
         return uno::Sequence< sheet::LocalizedName >( 0 );
 
     const ScaStringList& rStrList = pFData->GetCompNameList();
-    sal_uInt32 nCount = rStrList.Count();
+    sal_uInt32 nCount = rStrList.size();
 
     uno::Sequence< sheet::LocalizedName > aRet( nCount );
     sheet::LocalizedName* pArray = aRet.getArray();
 
     for( sal_uInt32 nIndex = 0; nIndex < nCount; nIndex++ )
-        pArray[ nIndex ] = sheet::LocalizedName( GetLocale( nIndex ), *rStrList.Get( nIndex ) );
+        pArray[ nIndex ] = sheet::LocalizedName( GetLocale( nIndex ), rStrList[nIndex] );
 
     return aRet;
 }
diff --git a/scaddins/source/datefunc/datefunc.hxx b/scaddins/source/datefunc/datefunc.hxx
index 9922bdf..e2271a0 100644
--- a/scaddins/source/datefunc/datefunc.hxx
+++ b/scaddins/source/datefunc/datefunc.hxx
@@ -35,86 +35,8 @@
 #include <tools/rc.hxx>
 #include <tools/resary.hxx>
 
-class ScaList
-{
-private:
-    static const sal_uInt32     nStartSize;
-    static const sal_uInt32     nIncrSize;
-
-    void**                      pData;          // pointer array
-    sal_uInt32                  nSize;          // array size
-    sal_uInt32                  nCount;         // next index to be inserted at
-    sal_uInt32                  nCurr;          // current pos for iterations
-
-    void                        _Grow();
-    inline void                 Grow();
-
-public:
-                                ScaList();
-    virtual                     ~ScaList();
-
-    inline sal_uInt32           Count() const       { return nCount; }
-
-    inline const void*          GetObject( sal_uInt32 nIndex ) const
-                                    { return (nIndex < nCount) ? pData[ nIndex ] : NULL; }
-
-    inline void*                First() { return nCount ? pData[ nCurr = 0 ] : NULL; }
-    inline void*                Next()  { return (nCurr + 1 < nCount) ? pData[ ++nCurr ] : NULL; }
-
-    inline void                 Append( void* pNew );
-};
-
-
-inline void ScaList::Grow()
-{
-    if( nCount >= nSize )
-        _Grow();
-}
-
-inline void ScaList::Append( void* pNew )
-{
-    Grow();
-    pData[ nCount++ ] = pNew;
-}
-
-
-class ScaStringList : protected ScaList
-{
-public:
-    inline                      ScaStringList() : ScaList() {};
-    virtual                     ~ScaStringList();
-
-                                using ScaList::Count;
-
-    inline const OUString* Get( sal_uInt32 nIndex ) const;
-
-    inline OUString*     First();
-    inline OUString*     Next();
-
-    using ScaList::Append;
-    inline void                 Append( const OUString& rNew );
-};
 
-
-inline const OUString* ScaStringList::Get( sal_uInt32 nIndex ) const
-{
-    return static_cast< const OUString* >( ScaList::GetObject( nIndex ) );
-}
-
-inline OUString* ScaStringList::First()
-{
-    return static_cast< OUString* >( ScaList::First() );
-}
-
-inline OUString* ScaStringList::Next()
-{
-    return static_cast< OUString* >( ScaList::Next() );
-}
-
-inline void ScaStringList::Append( const OUString& rNew )
-{
-    ScaList::Append( new OUString( rNew ) );
-}
+typedef std::vector<OUString> ScaStringList;
 
 
 class ScaResId : public ResId
@@ -236,43 +158,22 @@ public:
 };
 
 
-class ScaFuncDataList : private ScaList
+class ScaFuncDataList
 {
-    OUString             aLastName;
-    sal_uInt32                  nLast;
+    OUString                                    aLastName;
+    std::vector<ScaFuncData*>::iterator         nLast;
+    std::vector<ScaFuncData*>                   contents;
 
 public:
                                 ScaFuncDataList( ResMgr& rResMgr );
     virtual                     ~ScaFuncDataList();
 
-                                using ScaList::Count;
-
-    inline const ScaFuncData*   Get( sal_uInt32 nIndex ) const;
-    const ScaFuncData*          Get( const OUString& rProgrammaticName ) const;
-    inline ScaFuncData*         First();
-    inline ScaFuncData*         Next();
+    const ScaFuncData*          Get( const OUString& rProgrammaticName );
 
-    using ScaList::Append;
-    inline void                 Append( ScaFuncData* pNew ) { ScaList::Append( pNew ); }
+    inline void                 Append( ScaFuncData* pNew ) { contents.push_back( pNew ); }
 };
 
 
-inline const ScaFuncData* ScaFuncDataList::Get( sal_uInt32 nIndex ) const
-{
-    return static_cast< const ScaFuncData* >( ScaList::GetObject( nIndex ) );
-}
-
-inline ScaFuncData* ScaFuncDataList::First()
-{
-    return static_cast< ScaFuncData* >( ScaList::First() );
-}
-
-inline ScaFuncData* ScaFuncDataList::Next()
-{
-    return static_cast< ScaFuncData* >( ScaList::Next() );
-}
-
-
 
 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL DateFunctionAddIn_CreateInstance(
     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& );
diff --git a/scaddins/source/pricing/pricing.cxx b/scaddins/source/pricing/pricing.cxx
index 21174c7..8139225 100644
--- a/scaddins/source/pricing/pricing.cxx
+++ b/scaddins/source/pricing/pricing.cxx
@@ -45,38 +45,6 @@ using namespace sca::pricing;
 
 #define STR_FROM_ANSI( s )      OUString( s, strlen( s ), RTL_TEXTENCODING_MS_1252 )
 
-const sal_uInt32 ScaList::nStartSize = 16;
-const sal_uInt32 ScaList::nIncrSize = 16;
-
-ScaList::ScaList() :
-    pData( new void*[ nStartSize ] ),
-    nSize( nStartSize ),
-    nCount( 0 ),
-    nCurr( 0 )
-{
-}
-
-ScaList::~ScaList()
-{
-    delete[] pData;
-}
-
-void ScaList::_Grow()
-{
-    nSize += nIncrSize;
-
-    void** pNewData = new void*[ nSize ];
-    memcpy( pNewData, pData, nCount * sizeof( void* ) );
-
-    delete[] pData;
-    pData = pNewData;
-}
-
-ScaStringList::~ScaStringList()
-{
-    for( OUString* pStr = First(); pStr; pStr = Next() )
-        delete pStr;
-}
 
 ScaResId::ScaResId( sal_uInt16 nId, ResMgr& rResMgr ) :
     ResId( nId, rResMgr )
@@ -114,7 +82,7 @@ ScaFuncData::ScaFuncData( const ScaFuncDataBase& rBaseData, ResMgr& rResMgr ) :
     const ResStringArray& rArr = aArrLoader.GetStringArray();
 
     for( sal_uInt32 nIndex = 0; nIndex < rArr.Count(); nIndex++ )
-        aCompList.Append( rArr.GetString( nIndex ) );
+        aCompList.push_back( rArr.GetString( nIndex ) );
 }
 
 ScaFuncData::~ScaFuncData()
@@ -129,32 +97,31 @@ sal_uInt16 ScaFuncData::GetStrIndex( sal_uInt16 nParam ) const
 }
 
 ScaFuncDataList::ScaFuncDataList( ResMgr& rResMgr ) :
-    nLast( 0xFFFFFFFF )
+    nLast( contents.end() )
 {
     for( sal_uInt16 nIndex = 0; nIndex < SAL_N_ELEMENTS(pFuncDataArr); nIndex++ )
-        Append( new ScaFuncData( pFuncDataArr[ nIndex ], rResMgr ) );
+        contents.push_back( new ScaFuncData( pFuncDataArr[ nIndex ], rResMgr ) );
 }
 
 ScaFuncDataList::~ScaFuncDataList()
 {
-    for( ScaFuncData* pFData = First(); pFData; pFData = Next() )
-        delete pFData;
+    for( std::vector<ScaFuncData*>::iterator it = contents.begin(); it != contents.end();  ++it )
+        delete *it;
 }
 
-const ScaFuncData* ScaFuncDataList::Get( const OUString& rProgrammaticName ) const
+const ScaFuncData* ScaFuncDataList::Get( const OUString& rProgrammaticName )
 {
     if( aLastName == rProgrammaticName ){
-        return Get( nLast );
+        return *nLast;
     }
 
-    for( sal_uInt32 nIndex = 0; nIndex < Count(); nIndex++ )
+    for( std::vector<ScaFuncData*>::iterator it = contents.begin(); it != contents.end(); ++it )
     {
-        const ScaFuncData* pCurr = Get( nIndex );
-        if( pCurr->Is( rProgrammaticName ) )
+        if( (*it)->Is( rProgrammaticName ) )
         {
-            const_cast< ScaFuncDataList* >( this )->aLastName = rProgrammaticName;
-            const_cast< ScaFuncDataList* >( this )->nLast = nIndex;
-            return pCurr;
+            aLastName = rProgrammaticName;
+            nLast = it;
+            return *it;
         }
     }
     return NULL;
@@ -453,13 +420,13 @@ uno::Sequence< sheet::LocalizedName > SAL_CALL ScaPricingAddIn::getCompatibility
         return uno::Sequence< sheet::LocalizedName >( 0 );
 
     const ScaStringList& rStrList = pFData->GetCompNameList();
-    sal_uInt32 nCount = rStrList.Count();
+    sal_uInt32 nCount = rStrList.size();
 
     uno::Sequence< sheet::LocalizedName > aRet( nCount );
     sheet::LocalizedName* pArray = aRet.getArray();
 
     for( sal_uInt32 nIndex = 0; nIndex < nCount; nIndex++ )
-        pArray[ nIndex ] = sheet::LocalizedName( GetLocale( nIndex ), *rStrList.Get( nIndex ) );
+        pArray[ nIndex ] = sheet::LocalizedName( GetLocale( nIndex ), rStrList[nIndex] );
 
     return aRet;
 }
diff --git a/scaddins/source/pricing/pricing.hxx b/scaddins/source/pricing/pricing.hxx
index 21a3c49..bd80096 100644
--- a/scaddins/source/pricing/pricing.hxx
+++ b/scaddins/source/pricing/pricing.hxx
@@ -47,87 +47,8 @@
 namespace sca {
 namespace pricing {
 
-class ScaList
-{
-private:
-    static const sal_uInt32     nStartSize;
-    static const sal_uInt32     nIncrSize;
-
-    void**                      pData;          // pointer array
-    sal_uInt32                  nSize;          // array size
-    sal_uInt32                  nCount;         // next index to be inserted at
-    sal_uInt32                  nCurr;          // current pos for iterations
-
-    void                        _Grow();
-    inline void                 Grow();
-
-public:
-                                ScaList();
-    virtual                     ~ScaList();
-
-    inline sal_uInt32           Count() const       { return nCount; }
-
-    inline const void*          GetObject( sal_uInt32 nIndex ) const
-                                    { return (nIndex < nCount) ? pData[ nIndex ] : NULL; }
-
-    inline void*                First() { return nCount ? pData[ nCurr = 0 ] : NULL; }
-    inline void*                Next()  { return (nCurr + 1 < nCount) ? pData[ ++nCurr ] : NULL; }
-
-    inline void                 Append( void* pNew );
-};
-
-
-inline void ScaList::Grow()
-{
-    if( nCount >= nSize )
-        _Grow();
-}
-
-inline void ScaList::Append( void* pNew )
-{
-    Grow();
-    pData[ nCount++ ] = pNew;
-}
-
-
-class ScaStringList : protected ScaList
-{
-public:
-    inline                      ScaStringList() : ScaList() {};
-    virtual                     ~ScaStringList();
-
-                                using ScaList::Count;
-
-    inline const OUString* Get( sal_uInt32 nIndex ) const;
-
-    inline OUString*     First();
-    inline OUString*     Next();
-
-    using ScaList::Append;
-    inline void                 Append( const OUString& rNew );
-};
-
-
-inline const OUString* ScaStringList::Get( sal_uInt32 nIndex ) const
-{
-    return static_cast< const OUString* >( ScaList::GetObject( nIndex ) );
-}
-
-inline OUString* ScaStringList::First()
-{
-    return static_cast< OUString* >( ScaList::First() );
-}
-
-inline OUString* ScaStringList::Next()
-{
-    return static_cast< OUString* >( ScaList::Next() );
-}
-
-inline void ScaStringList::Append( const OUString& rNew )
-{
-    ScaList::Append( new OUString( rNew ) );
-}
 
+typedef std::vector<OUString> ScaStringList;
 
 class ScaResId : public ResId
 {
@@ -248,42 +169,23 @@ public:
 };
 
 
-class ScaFuncDataList : private ScaList
+class ScaFuncDataList
 {
-    OUString             aLastName;
-    sal_uInt32                  nLast;
+    OUString                                    aLastName;
+    std::vector<ScaFuncData*>::iterator         nLast;
+    std::vector<ScaFuncData*>                   contents;
 
 public:
                                 ScaFuncDataList( ResMgr& rResMgr );
     virtual                     ~ScaFuncDataList();
 
-                                using ScaList::Count;
-
     inline const ScaFuncData*   Get( sal_uInt32 nIndex ) const;
-    const ScaFuncData*          Get( const OUString& rProgrammaticName ) const;
-    inline ScaFuncData*         First();
-    inline ScaFuncData*         Next();
+    const ScaFuncData*          Get( const OUString& rProgrammaticName );
 
-    using ScaList::Append;
-    inline void                 Append( ScaFuncData* pNew ) { ScaList::Append( pNew ); }
+    inline void                 Append( ScaFuncData* pNew ) { contents.push_back( pNew ); }
 };
 
 
-inline const ScaFuncData* ScaFuncDataList::Get( sal_uInt32 nIndex ) const
-{
-    return static_cast< const ScaFuncData* >( ScaList::GetObject( nIndex ) );
-}
-
-inline ScaFuncData* ScaFuncDataList::First()
-{
-    return static_cast< ScaFuncData* >( ScaList::First() );
-}
-
-inline ScaFuncData* ScaFuncDataList::Next()
-{
-    return static_cast< ScaFuncData* >( ScaList::Next() );
-}
-
 } // namespace pricing
 } // namespace sca
 
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to