[Libreoffice-commits] .: 3 commits - sc/inc sc/source

Kohei Yoshida kohei at kemper.freedesktop.org
Fri Mar 9 19:25:08 PST 2012


 sc/inc/dpgroup.hxx               |    2 -
 sc/inc/dptabsrc.hxx              |    8 ++++--
 sc/source/core/data/dpgroup.cxx  |   27 +++++++++++-----------
 sc/source/core/data/dptabres.cxx |    4 +--
 sc/source/core/data/dptabsrc.cxx |   47 +++++++++++++--------------------------
 5 files changed, 38 insertions(+), 50 deletions(-)

New commits:
commit 137b53e0e2763d41c43e62ecc85b38d7f3cb71f7
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Mar 9 22:25:10 2012 -0500

    vector and rtl::Reference over manual ref-counting.

diff --git a/sc/inc/dptabsrc.hxx b/sc/inc/dptabsrc.hxx
index b43e795..b69846b 100644
--- a/sc/inc/dptabsrc.hxx
+++ b/sc/inc/dptabsrc.hxx
@@ -54,6 +54,7 @@
 #include <cppuhelper/implbase3.hxx>
 #include <cppuhelper/implbase5.hxx>
 #include <cppuhelper/implbase6.hxx>
+#include "rtl/ref.hxx"
 
 #include "dptabdat.hxx"
 #include "dpglobal.hxx"
@@ -683,12 +684,13 @@ class ScDPMembers : public cppu::WeakImplHelper2<
                             com::sun::star::lang::XServiceInfo >
 {
 private:
+    typedef std::vector<rtl::Reference<ScDPMember> > MembersType;
     ScDPSource*     pSource;
     long            nDim;
     long            nHier;
     long            nLev;
     long            nMbrCount;
-    ScDPMember**    ppMbrs;
+    mutable MembersType maMembers;
     mutable ScDPMembersHashMap aHashMap;
 
 public:
diff --git a/sc/source/core/data/dptabsrc.cxx b/sc/source/core/data/dptabsrc.cxx
index 9514046..3d41f86 100644
--- a/sc/source/core/data/dptabsrc.cxx
+++ b/sc/source/core/data/dptabsrc.cxx
@@ -2284,8 +2284,7 @@ ScDPMembers::ScDPMembers( ScDPSource* pSrc, long nD, long nH, long nL ) :
     pSource( pSrc ),
     nDim( nD ),
     nHier( nH ),
-    nLev( nL ),
-    ppMbrs( NULL )
+    nLev( nL )
 {
     //! hold pSource
 
@@ -2357,15 +2356,6 @@ ScDPMembers::ScDPMembers( ScDPSource* pSrc, long nD, long nH, long nL ) :
 
 ScDPMembers::~ScDPMembers()
 {
-    //! release pSource
-
-    if (ppMbrs)
-    {
-        for (long i=0; i<nMbrCount; i++)
-            if ( ppMbrs[i] )
-                ppMbrs[i]->release();   // ref-counted
-        delete[] ppMbrs;
-    }
 }
 
 // XNameAccess implementation using getCount/getByIndex
@@ -2451,13 +2441,14 @@ long ScDPMembers::getMinMembers() const
     // used in lcl_CountMinMembers
 
     long nVisCount = 0;
-    if ( ppMbrs )
+    if (!maMembers.empty())
     {
-        for (long i=0; i<nMbrCount; i++)
+        MembersType::const_iterator it = maMembers.begin(), itEnd = maMembers.end();
+        for (; it != itEnd; ++it)
         {
             //  count only visible with details (default is true for both)
-            const ScDPMember* pMbr = ppMbrs[i];
-            if ( !pMbr || ( pMbr->isVisible() && pMbr->getShowDetails() ) )
+            const rtl::Reference<ScDPMember>& pMbr = *it;
+            if (!pMbr.get() || (pMbr->isVisible() && pMbr->getShowDetails()))
                 ++nVisCount;
         }
     }
@@ -2474,20 +2465,17 @@ ScDPMember* ScDPMembers::getByIndex(long nIndex) const
 
     if ( nIndex >= 0 && nIndex < nMbrCount )
     {
-        if ( !ppMbrs )
-        {
-            ((ScDPMembers*)this)->ppMbrs = new ScDPMember*[nMbrCount];
-            for (long i=0; i<nMbrCount; i++)
-                ppMbrs[i] = NULL;
-        }
-        if ( !ppMbrs[nIndex] )
+        if (maMembers.empty())
+            maMembers.resize(nMbrCount);
+
+        if (!maMembers[nIndex].get())
         {
-            ScDPMember* pNew;
+            rtl::Reference<ScDPMember> pNew;
             long nSrcDim = pSource->GetSourceDim( nDim );
             if ( pSource->IsDataLayoutDimension(nSrcDim) )
             {
                 // empty name (never shown, not used for lookup)
-                pNew = new ScDPMember( pSource, nDim, nHier, nLev, 0 );
+                pNew.set(new ScDPMember(pSource, nDim, nHier, nLev, 0));
             }
             else if ( nHier != SC_DAPI_HIERARCHY_FLAT && pSource->IsDateDimension( nSrcDim ) )
             {
@@ -2549,20 +2537,17 @@ ScDPMember* ScDPMembers::getByIndex(long nIndex) const
 
                 ScDPItemData aData(nGroupBy, nVal);
                 SCROW nId = pSource->GetCache()->GetIdByItemData(nDim, aData);
-                pNew = new ScDPMember(pSource, nDim, nHier, nLev, nId);
+                pNew.set(new ScDPMember(pSource, nDim, nHier, nLev, nId));
             }
             else
             {
                 const std::vector<SCROW>& memberIndexs = pSource->GetData()->GetColumnEntries(nSrcDim);
-                pNew = new ScDPMember(pSource, nDim, nHier, nLev, memberIndexs[nIndex]);
+                pNew.set(new ScDPMember(pSource, nDim, nHier, nLev, memberIndexs[nIndex]));
             }
-            pNew->acquire();            // ref-counted
-            ppMbrs[nIndex] = pNew;
+            maMembers[nIndex] = pNew;
         }
 
-        OSL_ENSURE( ppMbrs[nIndex] ," member is not initialized " );
-
-        return ppMbrs[nIndex];
+        return maMembers[nIndex].get();
     }
 
     return NULL;    //! exception?
commit 3ec7ba96cf945b203297cf597c0514dc6bd9eeeb
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Mar 9 21:54:02 2012 -0500

    These don't have to be virtual.

diff --git a/sc/inc/dptabsrc.hxx b/sc/inc/dptabsrc.hxx
index 6db6ea4..b43e795 100644
--- a/sc/inc/dptabsrc.hxx
+++ b/sc/inc/dptabsrc.hxx
@@ -718,8 +718,8 @@ public:
     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
                                 throw(::com::sun::star::uno::RuntimeException);
 
-    virtual long            getCount() const;
-    virtual ScDPMember*     getByIndex(long nIndex) const;
+    long getCount() const;
+    ScDPMember* getByIndex(long nIndex) const;
 
     long                    getMinMembers() const;
 
commit bdd349501eb3df24830d2daf2338a7a422a8e00c
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Mar 9 21:29:31 2012 -0500

    Keep vector as vector.

diff --git a/sc/inc/dpgroup.hxx b/sc/inc/dpgroup.hxx
index be7d39c..b81db64 100644
--- a/sc/inc/dpgroup.hxx
+++ b/sc/inc/dpgroup.hxx
@@ -163,7 +163,7 @@ class ScDPGroupTableData : public ScDPTableData
     ScDocument*             pDoc;
     StringHashSet           aGroupNames;
 
-    void                         FillGroupValues( SCROW* pItemDataIndex, long nCount, const long* pDims );
+    void FillGroupValues(std::vector<SCROW>& rItems, const std::vector<long>& rDims);
     virtual long                GetSourceDim( long nDim );
 
     bool        IsNumGroupDimension( long nDimension ) const;
diff --git a/sc/source/core/data/dpgroup.cxx b/sc/source/core/data/dpgroup.cxx
index 73a9d10..bcd7032 100644
--- a/sc/source/core/data/dpgroup.cxx
+++ b/sc/source/core/data/dpgroup.cxx
@@ -788,11 +788,11 @@ void ScDPGroupTableData::CalcResults(CalcInfo& rInfo, bool bAutoShow)
         FillRowDataFromCacheTable(nRow, rCacheTable, rInfo, aData);
 
         if ( !rInfo.aColLevelDims.empty() )
-            FillGroupValues(&aData.aColData[0], rInfo.aColLevelDims.size(), &rInfo.aColLevelDims[0]);
+            FillGroupValues(aData.aColData, rInfo.aColLevelDims);
         if ( !rInfo.aRowLevelDims.empty() )
-            FillGroupValues(&aData.aRowData[0], rInfo.aRowLevelDims.size(), &rInfo.aRowLevelDims[0]);
+            FillGroupValues(aData.aRowData, rInfo.aRowLevelDims);
         if ( !rInfo.aPageDims.empty() )
-            FillGroupValues(&aData.aPageData[0], rInfo.aPageDims.size(), &rInfo.aPageDims[0]);
+            FillGroupValues(aData.aPageData, rInfo.aPageDims);
 
         ProcessRowData(rInfo, aData, bAutoShow);
     }
@@ -803,16 +803,17 @@ const ScDPCacheTable& ScDPGroupTableData::GetCacheTable() const
     return pSourceData->GetCacheTable();
 }
 
-void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, const long* pDims)
+void ScDPGroupTableData::FillGroupValues(vector<SCROW>& rItems, const vector<long>& rDims)
 {
     long nGroupedColumns = aGroups.size();
 
     const ScDPCache* pCache = GetCacheTable().getCache();
-    for (long nDim = 0; nDim < nCount; ++nDim)
+    vector<long>::const_iterator it = rDims.begin(), itEnd = rDims.end();
+    for (size_t i = 0; it != itEnd; ++it, ++i)
     {
+        long nColumn = *it;
         const ScDPDateGroupHelper* pDateHelper = NULL;
 
-        long nColumn = pDims[nDim];
         long nSourceDim = nColumn;
         if ( nColumn >= nSourceCount && nColumn < nSourceCount + nGroupedColumns )
         {
@@ -821,15 +822,15 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con
             pDateHelper = rGroupDim.GetDateHelper();
             if (!pDateHelper)                         // date is handled below
             {
-                const ScDPItemData& rItem = *GetMemberById(nSourceDim, pItemDataIndex[nDim]);
+                const ScDPItemData& rItem = *GetMemberById(nSourceDim, rItems[i]);
                 const ScDPGroupItem* pGroupItem = rGroupDim.GetGroupForData(rItem);
                 if (pGroupItem)
                 {
-                    pItemDataIndex[nDim] =
+                    rItems[i] =
                         pCache->GetIdByItemData(nColumn, pGroupItem->GetName());
                 }
                 else
-                    pItemDataIndex[nDim] = pCache->GetIdByItemData(nColumn, rItem);
+                    rItems[i] = pCache->GetIdByItemData(nColumn, rItem);
             }
         }
         else if ( IsNumGroupDimension( nColumn ) )
@@ -837,7 +838,7 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con
             pDateHelper = pNumGroups[nColumn].GetDateHelper();
             if (!pDateHelper)                         // date is handled below
             {
-                const ScDPItemData* pData = pCache->GetItemDataById(nSourceDim, pItemDataIndex[nDim]);
+                const ScDPItemData* pData = pCache->GetItemDataById(nSourceDim, rItems[i]);
                 if (pData->GetType() == ScDPItemData::Value)
                 {
                     ScDPNumGroupInfo aNumInfo;
@@ -845,7 +846,7 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con
                     double fGroupValue = ScDPUtil::getNumGroupStartValue(pData->GetValue(), aNumInfo);
                     ScDPItemData aItemData;
                     aItemData.SetRangeStart(fGroupValue);
-                    pItemDataIndex[nDim] = pCache->GetIdByItemData(nSourceDim, aItemData);
+                    rItems[i] = pCache->GetIdByItemData(nSourceDim, aItemData);
                 }
                 // else (textual) keep original value
             }
@@ -854,7 +855,7 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con
         if ( pDateHelper )
         {
             const ScDPItemData* pData  =
-                GetCacheTable().getCache()->GetItemDataById(nSourceDim, pItemDataIndex[nDim]);
+                GetCacheTable().getCache()->GetItemDataById(nSourceDim, rItems[i]);
             if (pData->GetType() == ScDPItemData::Value)
             {
                 SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
@@ -865,7 +866,7 @@ void ScDPGroupTableData::FillGroupValues(SCROW* pItemDataIndex, long nCount, con
                     pDateHelper->GetDatePart(), nPartValue, pFormatter, rNumInfo.mfStart, rNumInfo.mfEnd);
 
                 ScDPItemData aItem(pDateHelper->GetDatePart(), nPartValue);
-                pItemDataIndex[nDim] = GetCacheTable().getCache()->GetIdByItemData(nColumn, aItem);
+                rItems[i] = GetCacheTable().getCache()->GetIdByItemData(nColumn, aItem);
             }
         }
     }
diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx
index a14c53a..3372d68 100644
--- a/sc/source/core/data/dptabres.cxx
+++ b/sc/source/core/data/dptabres.cxx
@@ -3012,10 +3012,10 @@ void ScDPResultDimension::ProcessData( const vector< SCROW >& aMembers,
     ScDPResultMember* pMember = FindMember( aMembers[0] );
     if ( NULL != pMember )
     {
-        vector</*ScDPItemData*/SCROW > aChildMembers;
+        vector<SCROW> aChildMembers;
         if (aMembers.size() > 1)
         {
-            vector</*ScDPItemData*/SCROW >::const_iterator itr = aMembers.begin();
+            vector<SCROW>::const_iterator itr = aMembers.begin();
             aChildMembers.insert(aChildMembers.begin(), ++itr, aMembers.end());
         }
         pMember->ProcessData( aChildMembers, pDataDim, aDataMembers, aValues );


More information about the Libreoffice-commits mailing list