diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-02-14 20:22:53 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-02-14 20:58:32 -0500 |
commit | c669d9e645b7600cf8ed0cc696e99f4552b167a4 (patch) | |
tree | 4b40d2482407918e31979d83db0969a1e1102bd5 | |
parent | edbf1da237b3f276495637b477113618a7b8453b (diff) |
Use std::vector instead of C-style arrays.
Change-Id: I593c6c50aeb4ead723076d01e7113de154e2557d
-rw-r--r-- | sc/inc/dptabres.hxx | 13 | ||||
-rw-r--r-- | sc/source/core/data/dptabres.cxx | 62 |
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) { |