summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-02-14 20:22:53 -0500
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-02-14 20:58:32 -0500
commitc669d9e645b7600cf8ed0cc696e99f4552b167a4 (patch)
tree4b40d2482407918e31979d83db0969a1e1102bd5
parentedbf1da237b3f276495637b477113618a7b8453b (diff)
Use std::vector instead of C-style arrays.
Change-Id: I593c6c50aeb4ead723076d01e7113de154e2557d
-rw-r--r--sc/inc/dptabres.hxx13
-rw-r--r--sc/source/core/data/dptabres.cxx62
2 files changed, 31 insertions, 44 deletions
diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx
index dda33f681f45..989e8d377446 100644
--- a/sc/inc/dptabres.hxx
+++ b/sc/inc/dptabres.hxx
@@ -289,11 +289,11 @@ class ScDPResultData
ScDPSource& mrSource;
//! keep things like measure lists here
- long nMeasCount;
- ScSubTotalFunc* pMeasFuncs;
- ::com::sun::star::sheet::DataPilotFieldReference* pMeasRefs;
- sal_uInt16* pMeasRefOrient;
+ std::vector<ScSubTotalFunc> maMeasureFuncs;
+ std::vector<com::sun::star::sheet::DataPilotFieldReference> maMeasureRefs;
+ std::vector<sal_uInt16> maMeasureRefOrients;
std::vector<rtl::OUString> maMeasureNames;
+
bool bLateInit:1;
bool bDataAtCol:1;
bool bDataAtRow:1;
@@ -310,7 +310,7 @@ public:
void SetDataLayoutOrientation( sal_uInt16 nOrient );
void SetLateInit( bool bSet );
- long GetMeasureCount() const { return nMeasCount; }
+ long GetMeasureCount() const { return maMeasureFuncs.size(); }
ScSubTotalFunc GetMeasureFunction(long nMeasure) const;
rtl::OUString GetMeasureString(long nMeasure, bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const;
rtl::OUString GetMeasureDimensionName(long nMeasure) const;
@@ -324,8 +324,7 @@ public:
long GetColStartMeasure() const;
long GetRowStartMeasure() const;
- long GetCountForMeasure( long nMeas ) const
- { return ( nMeas == SC_DPMEASURE_ALL ) ? nMeasCount : 1; }
+ long GetCountForMeasure( long nMeas ) const { return (nMeas == SC_DPMEASURE_ALL) ? maMeasureFuncs.size() : 1; }
bool IsBaseForGroup( long nDim ) const; // any group
long GetGroupBase( long nGroupDim ) const;
diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx
index bcb4dfe23295..3499300f325f 100644
--- a/sc/source/core/data/dptabres.cxx
+++ b/sc/source/core/data/dptabres.cxx
@@ -713,10 +713,6 @@ static ScSubTotalFunc lcl_GetForceFunc( const ScDPLevel* pLevel, long nFuncNo )
ScDPResultData::ScDPResultData( ScDPSource& rSrc ) :
mrSource(rSrc),
- nMeasCount( 0 ),
- pMeasFuncs( NULL ),
- pMeasRefs( NULL ),
- pMeasRefOrient( NULL ),
bLateInit( false ),
bDataAtCol( false ),
bDataAtRow( false )
@@ -725,10 +721,6 @@ ScDPResultData::ScDPResultData( ScDPSource& rSrc ) :
ScDPResultData::~ScDPResultData()
{
- delete[] pMeasFuncs;
- delete[] pMeasRefs;
- delete[] pMeasRefOrient;
-
std::for_each(maDimMembers.begin(), maDimMembers.end(), ScDeleteObjectByPtr<ResultMembers>());
}
@@ -736,33 +728,25 @@ void ScDPResultData::SetMeasureData( long nCount, const ScSubTotalFunc* pFunctio
const sheet::DataPilotFieldReference* pRefs, const sal_uInt16* pRefOrient,
std::vector<rtl::OUString>& rNames )
{
- delete[] pMeasFuncs;
- delete[] pMeasRefs;
- delete[] pMeasRefOrient;
+ maMeasureFuncs.clear();
+ maMeasureRefs.clear();
+ maMeasureRefOrients.clear();
+
if ( nCount )
{
OSL_ASSERT(nCount == static_cast<long>(rNames.size()));
- nMeasCount = nCount;
- pMeasFuncs = new ScSubTotalFunc[nCount];
- pMeasRefs = new sheet::DataPilotFieldReference[nCount];
- pMeasRefOrient = new sal_uInt16[nCount];
+ maMeasureFuncs.assign(pFunctions, pFunctions+nCount);
+ maMeasureRefs.assign(pRefs, pRefs+nCount);
+ maMeasureRefOrients.assign(pRefOrient, pRefOrient+nCount);
maMeasureNames.swap(rNames);
- for (long i=0; i<nCount; i++)
- {
- pMeasFuncs[i] = pFunctions[i];
- pMeasRefs[i] = pRefs[i];
- pMeasRefOrient[i] = pRefOrient[i];
- }
}
else
{
// use one dummy measure
- nMeasCount = 1;
- pMeasFuncs = new ScSubTotalFunc[1];
- pMeasFuncs[0] = SUBTOTAL_FUNC_NONE;
- pMeasRefs = new sheet::DataPilotFieldReference[1]; // default ctor is ok
- pMeasRefOrient = new sal_uInt16[1];
- pMeasRefOrient[0] = sheet::DataPilotFieldOrientation_HIDDEN;
+ maMeasureFuncs.push_back(SUBTOTAL_FUNC_NONE);
+ maMeasureRefs.push_back(sheet::DataPilotFieldReference()); // default ctor is ok
+ maMeasureRefOrients.push_back(sheet::DataPilotFieldOrientation_HIDDEN);
+
std::vector<rtl::OUString> aMeasureName;
aMeasureName.push_back(ScGlobal::GetRscString(STR_EMPTYDATA));
maMeasureNames.swap(aMeasureName);
@@ -782,32 +766,36 @@ void ScDPResultData::SetLateInit( bool bSet )
long ScDPResultData::GetColStartMeasure() const
{
- if ( nMeasCount == 1 ) return 0;
+ if (maMeasureFuncs.size() == 1)
+ return 0;
+
return bDataAtCol ? SC_DPMEASURE_ALL : SC_DPMEASURE_ANY;
}
long ScDPResultData::GetRowStartMeasure() const
{
- if ( nMeasCount == 1 ) return 0;
+ if (maMeasureFuncs.size() == 1)
+ return 0;
+
return bDataAtRow ? SC_DPMEASURE_ALL : SC_DPMEASURE_ANY;
}
ScSubTotalFunc ScDPResultData::GetMeasureFunction(long nMeasure) const
{
- OSL_ENSURE( pMeasFuncs && nMeasure < nMeasCount, "bumm" );
- return pMeasFuncs[nMeasure];
+ OSL_ENSURE(nMeasure < maMeasureFuncs.size(), "bumm");
+ return maMeasureFuncs[nMeasure];
}
const sheet::DataPilotFieldReference& ScDPResultData::GetMeasureRefVal(long nMeasure) const
{
- OSL_ENSURE( pMeasRefs && nMeasure < nMeasCount, "bumm" );
- return pMeasRefs[nMeasure];
+ OSL_ENSURE(nMeasure < maMeasureRefs.size(), "bumm");
+ return maMeasureRefs[nMeasure];
}
sal_uInt16 ScDPResultData::GetMeasureRefOrient(long nMeasure) const
{
- OSL_ENSURE( pMeasRefOrient && nMeasure < nMeasCount, "bumm" );
- return pMeasRefOrient[nMeasure];
+ OSL_ENSURE(nMeasure < maMeasureRefOrients.size(), "bumm");
+ return maMeasureRefOrients[nMeasure];
}
rtl::OUString ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSubTotalFunc eForceFunc, bool& rbTotalResult) const
@@ -815,7 +803,7 @@ rtl::OUString ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSub
// with bForce==true, return function instead of "result" for single measure
// with eForceFunc != SUBTOTAL_FUNC_NONE, always use eForceFunc
rbTotalResult = false;
- if ( nMeasure < 0 || ( nMeasCount == 1 && !bForce && eForceFunc == SUBTOTAL_FUNC_NONE ) )
+ if ( nMeasure < 0 || (maMeasureFuncs.size() == 1 && !bForce && eForceFunc == SUBTOTAL_FUNC_NONE) )
{
// for user-specified subtotal function with all measures,
// display only function name
@@ -827,7 +815,7 @@ rtl::OUString ScDPResultData::GetMeasureString(long nMeasure, bool bForce, ScSub
}
else
{
- OSL_ENSURE( nMeasure < nMeasCount, "bumm" );
+ OSL_ENSURE(nMeasure < maMeasureFuncs.size(), "bumm");
const ScDPDimension* pDataDim = mrSource.GetDataDimension(nMeasure);
if (pDataDim)
{