[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