diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-01-17 08:49:15 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2017-01-17 08:49:36 +0200 |
commit | 998f635fb4caeaf3b9f010d6bb6da023569c5791 (patch) | |
tree | c4f918b4d109d444aef2e6ee7b3045276c513dd9 /sc | |
parent | 10cb59eb914ba722c203242272de244d795a51e8 (diff) |
convert subtotalfuncs from manual array to std::vector
Change-Id: I6af7e8c8d001c92edd364aa32224da1e4e1d1d9b
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/dpsave.hxx | 9 | ||||
-rw-r--r-- | sc/source/core/data/dpobject.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/dpsave.cxx | 47 | ||||
-rw-r--r-- | sc/source/filter/excel/xipivot.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/xml/xmldpimp.cxx | 24 | ||||
-rw-r--r-- | sc/source/filter/xml/xmldpimp.hxx | 7 | ||||
-rw-r--r-- | sc/source/ui/unoobj/dapiuno.cxx | 23 |
7 files changed, 30 insertions, 90 deletions
diff --git a/sc/inc/dpsave.hxx b/sc/inc/dpsave.hxx index 8338e0ef4862..db5b8ace0ae0 100644 --- a/sc/inc/dpsave.hxx +++ b/sc/inc/dpsave.hxx @@ -103,8 +103,7 @@ private: sal_uInt16 nShowEmptyMode; //! at level bool bRepeatItemLabels; //! at level bool bSubTotalDefault; //! at level - long nSubTotalCount; - sal_uInt16* pSubTotalFuncs; // GeneralFunction2 + std::vector<sal_uInt16> maSubTotalFuncs; // GeneralFunction2 css::sheet::DataPilotFieldReference* pReferenceValue; css::sheet::DataPilotFieldSortInfo* pSortInfo; // (level) css::sheet::DataPilotFieldAutoShowInfo* pAutoShowInfo; // (level) @@ -146,12 +145,12 @@ public: void SetName( const OUString& rNew ); // used if the source dim was renamed (groups) void SetOrientation(sal_uInt16 nNew); - void SetSubTotals(long nCount, const sal_uInt16* pFuncs); + void SetSubTotals(std::vector<sal_uInt16> const & rFuncs); long GetSubTotalsCount() const - { return nSubTotalCount; } + { return maSubTotalFuncs.size(); } sal_uInt16 GetSubTotalFunc(long nIndex) const - { return pSubTotalFuncs[nIndex]; } + { return maSubTotalFuncs[nIndex]; } bool HasShowEmpty() const; void SetShowEmpty(bool bSet); diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index ab220f18651d..26b41778db13 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -2698,16 +2698,16 @@ void ScDPObject::ConvertOrientation( { pDim->SetOrientation( nOrient ); - sal_uInt16 nFuncArray[16]; - sal_uInt16 nFuncCount = 0; + std::vector<sal_uInt16> nSubTotalFuncs; + nSubTotalFuncs.reserve(16); sal_uInt16 nMask = 1; for (sal_uInt16 nBit=0; nBit<16; nBit++) { if ( nFuncs & (PivotFunc)nMask ) - nFuncArray[nFuncCount++] = sal::static_int_cast<sal_uInt16>(ScDataPilotConversion::FirstFunc( (PivotFunc)nMask )); + nSubTotalFuncs.push_back( sal::static_int_cast<sal_uInt16>(ScDataPilotConversion::FirstFunc( (PivotFunc)nMask )) ); nMask *= 2; } - pDim->SetSubTotals( nFuncCount, nFuncArray ); + pDim->SetSubTotals( nSubTotalFuncs ); // ShowEmpty was implicit in old tables, // must be set for data layout dimension (not accessible in dialog) diff --git a/sc/source/core/data/dpsave.cxx b/sc/source/core/data/dpsave.cxx index 2e7102dcbfdb..1a77c814c819 100644 --- a/sc/source/core/data/dpsave.cxx +++ b/sc/source/core/data/dpsave.cxx @@ -31,6 +31,7 @@ #include <o3tl/make_unique.hxx> #include <comphelper/string.hxx> #include <comphelper/stl_types.hxx> +#include <comphelper/sequence.hxx> #include <com/sun/star/sheet/GeneralFunction.hpp> #include <com/sun/star/sheet/GeneralFunction2.hpp> @@ -200,8 +201,6 @@ ScDPSaveDimension::ScDPSaveDimension(const OUString& rName, bool bDataLayout) : nShowEmptyMode( SC_DPSAVEMODE_DONTKNOW ), bRepeatItemLabels( false ), bSubTotalDefault( true ), - nSubTotalCount( 0 ), - pSubTotalFuncs( nullptr ), pReferenceValue( nullptr ), pSortInfo( nullptr ), pAutoShowInfo( nullptr ), @@ -221,16 +220,8 @@ ScDPSaveDimension::ScDPSaveDimension(const ScDPSaveDimension& r) : nShowEmptyMode( r.nShowEmptyMode ), bRepeatItemLabels( r.bRepeatItemLabels ), bSubTotalDefault( r.bSubTotalDefault ), - nSubTotalCount( r.nSubTotalCount ), - pSubTotalFuncs( nullptr ) + maSubTotalFuncs( r.maSubTotalFuncs ) { - if ( nSubTotalCount && r.pSubTotalFuncs ) - { - pSubTotalFuncs = new sal_uInt16[nSubTotalCount]; - for (long nSub=0; nSub<nSubTotalCount; nSub++) - pSubTotalFuncs[nSub] = r.pSubTotalFuncs[nSub]; - } - for (MemberList::const_iterator i=r.maMemberList.begin(); i != r.maMemberList.end() ; ++i) { const OUString& rName = (*i)->GetName(); @@ -268,7 +259,6 @@ ScDPSaveDimension::~ScDPSaveDimension() delete pSortInfo; delete pAutoShowInfo; delete pLayoutInfo; - delete [] pSubTotalFuncs; } bool ScDPSaveDimension::operator== ( const ScDPSaveDimension& r ) const @@ -282,17 +272,9 @@ bool ScDPSaveDimension::operator== ( const ScDPSaveDimension& r ) const nShowEmptyMode != r.nShowEmptyMode || bRepeatItemLabels!= r.bRepeatItemLabels|| bSubTotalDefault != r.bSubTotalDefault || - nSubTotalCount != r.nSubTotalCount ) + maSubTotalFuncs != r.maSubTotalFuncs ) return false; - if ( nSubTotalCount && ( !pSubTotalFuncs || !r.pSubTotalFuncs ) ) // should not happen - return false; - - long i; - for (i=0; i<nSubTotalCount; i++) - if ( pSubTotalFuncs[i] != r.pSubTotalFuncs[i] ) - return false; - if (maMemberHash.size() != r.maMemberHash.size() ) return false; @@ -370,20 +352,9 @@ void ScDPSaveDimension::SetOrientation(sal_uInt16 nNew) nOrientation = nNew; } -void ScDPSaveDimension::SetSubTotals(long nCount, const sal_uInt16* pFuncs) +void ScDPSaveDimension::SetSubTotals(std::vector<sal_uInt16> const & rFuncs) { - if (pSubTotalFuncs) - delete [] pSubTotalFuncs; - nSubTotalCount = nCount; - if ( nCount && pFuncs ) - { - pSubTotalFuncs = new sal_uInt16[nCount]; - for (long i=0; i<nCount; i++) - pSubTotalFuncs[i] = pFuncs[i]; - } - else - pSubTotalFuncs = nullptr; - + maSubTotalFuncs = rFuncs; bSubTotalDefault = false; } @@ -627,13 +598,7 @@ void ScDPSaveDimension::WriteToSource( const uno::Reference<uno::XInterface>& xD { if ( !bSubTotalDefault ) { - if ( !pSubTotalFuncs ) - nSubTotalCount = 0; - - uno::Sequence<sal_Int16> aSeq(nSubTotalCount); - sal_Int16* pArray = aSeq.getArray(); - for (long i=0; i<nSubTotalCount; i++) - pArray[i] = static_cast<sal_Int16>(pSubTotalFuncs[i]); + uno::Sequence<sal_Int16> aSeq(comphelper::containerToSequence<sal_Int16>(maSubTotalFuncs)); xLevProp->setPropertyValue( SC_UNO_DP_SUBTOTAL2, uno::Any(aSeq) ); } if ( nShowEmptyMode != SC_DPSAVEMODE_DONTKNOW ) diff --git a/sc/source/filter/excel/xipivot.cxx b/sc/source/filter/excel/xipivot.cxx index 4e40fa26448f..9888e08d6581 100644 --- a/sc/source/filter/excel/xipivot.cxx +++ b/sc/source/filter/excel/xipivot.cxx @@ -1092,7 +1092,7 @@ ScDPSaveDimension* XclImpPTField::ConvertRCPField( ScDPSaveData& rSaveData ) con XclPTSubtotalVec aSubtotalVec; maFieldInfo.GetSubtotals( aSubtotalVec ); if( !aSubtotalVec.empty() ) - rSaveDim.SetSubTotals( static_cast< long >( aSubtotalVec.size() ), &aSubtotalVec[ 0 ] ); + rSaveDim.SetSubTotals( aSubtotalVec ); // sorting DataPilotFieldSortInfo aSortInfo; diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx index cc39b95ce0aa..fda35975a24a 100644 --- a/sc/source/filter/xml/xmldpimp.cxx +++ b/sc/source/filter/xml/xmldpimp.cxx @@ -1435,9 +1435,7 @@ ScXMLDataPilotSubTotalsContext::ScXMLDataPilotSubTotalsContext( ScXMLImport& rIm const css::uno::Reference<css::xml::sax::XAttributeList>& /* xAttrList */, ScXMLDataPilotFieldContext* pTempDataPilotField) : ScXMLImportContext( rImport, nPrfx, rLName ), - pDataPilotField(pTempDataPilotField), - nFunctionCount(0), - pFunctions(nullptr) + pDataPilotField(pTempDataPilotField) { // has no attributes @@ -1445,7 +1443,6 @@ ScXMLDataPilotSubTotalsContext::ScXMLDataPilotSubTotalsContext( ScXMLImport& rIm ScXMLDataPilotSubTotalsContext::~ScXMLDataPilotSubTotalsContext() { - delete[] pFunctions; } SvXMLImportContext *ScXMLDataPilotSubTotalsContext::CreateChildContext( sal_uInt16 nPrefix, @@ -1470,29 +1467,14 @@ SvXMLImportContext *ScXMLDataPilotSubTotalsContext::CreateChildContext( sal_uInt void ScXMLDataPilotSubTotalsContext::EndElement() { - pDataPilotField->SetSubTotals(pFunctions, nFunctionCount); + pDataPilotField->SetSubTotals(maFunctions); if (!maDisplayName.isEmpty()) pDataPilotField->SetSubTotalName(maDisplayName); } void ScXMLDataPilotSubTotalsContext::AddFunction(sal_Int16 nFunction) { - if (nFunctionCount) - { - ++nFunctionCount; - sal_uInt16* pTemp = new sal_uInt16[nFunctionCount]; - for (sal_Int16 i = 0; i < nFunctionCount - 1; ++i) - pTemp[i] = pFunctions[i]; - pTemp[nFunctionCount - 1] = nFunction; - delete[] pFunctions; - pFunctions = pTemp; - } - else - { - nFunctionCount = 1; - pFunctions = new sal_uInt16[nFunctionCount]; - pFunctions[0] = nFunction; - } + maFunctions.push_back(nFunction); } void ScXMLDataPilotSubTotalsContext::SetDisplayName(const OUString& rName) diff --git a/sc/source/filter/xml/xmldpimp.hxx b/sc/source/filter/xml/xmldpimp.hxx index d67e730633e3..6749b1d5a126 100644 --- a/sc/source/filter/xml/xmldpimp.hxx +++ b/sc/source/filter/xml/xmldpimp.hxx @@ -318,7 +318,7 @@ public: void SetShowEmpty(const bool bValue) { if (xDim) xDim->SetShowEmpty(bValue); } void SetRepeatItemLabels(const bool bSet) { if (xDim) xDim->SetRepeatItemLabels(bSet); } - void SetSubTotals(const sal_uInt16* pFunctions, const sal_Int16 nCount) { if (xDim) xDim->SetSubTotals(nCount, pFunctions); } + void SetSubTotals(std::vector<sal_uInt16> const & rFunctions) { if (xDim) xDim->SetSubTotals(rFunctions); } void AddMember(ScDPSaveMember* pMember); void SetSubTotalName(const OUString& rName); void SetFieldReference(const css::sheet::DataPilotFieldReference& aRef) { if (xDim) xDim->SetReferenceValue(&aRef); } @@ -413,9 +413,8 @@ class ScXMLDataPilotSubTotalsContext : public ScXMLImportContext { ScXMLDataPilotFieldContext* pDataPilotField; - sal_Int16 nFunctionCount; - sal_uInt16* pFunctions; - OUString maDisplayName; + std::vector<sal_uInt16> maFunctions; + OUString maDisplayName; public: ScXMLDataPilotSubTotalsContext( ScXMLImport& rImport, sal_uInt16 nPrfx, diff --git a/sc/source/ui/unoobj/dapiuno.cxx b/sc/source/ui/unoobj/dapiuno.cxx index 8166bb535370..9d2af2afb35e 100644 --- a/sc/source/ui/unoobj/dapiuno.cxx +++ b/sc/source/ui/unoobj/dapiuno.cxx @@ -2173,13 +2173,12 @@ void ScDataPilotFieldObj::setFunction(sal_Int16 eNewFunc) if( pDim->GetOrientation() != DataPilotFieldOrientation_DATA ) { // for non-data fields, property Function is the subtotals - if ( eNewFunc == GeneralFunction2::NONE ) - pDim->SetSubTotals( 0, nullptr ); - else + std::vector<sal_uInt16> nSubTotalFuncs; + if ( eNewFunc != GeneralFunction2::NONE ) { - sal_uInt16 nFunc = sal::static_int_cast<sal_uInt16>( eNewFunc ); - pDim->SetSubTotals( 1, &nFunc ); + nSubTotalFuncs.push_back( sal::static_int_cast<sal_uInt16>( eNewFunc ) ); } + pDim->SetSubTotals( nSubTotalFuncs ); } else pDim->SetFunction( sal::static_int_cast<sal_uInt16>( eNewFunc ) ); @@ -2220,13 +2219,12 @@ void ScDataPilotFieldObj::setSubtotals( const Sequence< sal_Int16 >& rSubtotals if( nCount == 1 ) { // count 1: all values are allowed (including NONE and AUTO) - if( rSubtotals[ 0 ] == GeneralFunction2::NONE ) - pDim->SetSubTotals( 0, nullptr ); - else + std::vector<sal_uInt16> nTmpFuncs; + if( rSubtotals[ 0 ] != GeneralFunction2::NONE ) { - sal_uInt16 nFunc = sal::static_int_cast<sal_uInt16>( rSubtotals[ 0 ] ); - pDim->SetSubTotals( 1, &nFunc ); + nTmpFuncs.push_back( sal::static_int_cast<sal_uInt16>( rSubtotals[ 0 ] ) ); } + pDim->SetSubTotals( nTmpFuncs ); } else if( nCount > 1 ) { @@ -2244,10 +2242,7 @@ void ScDataPilotFieldObj::setSubtotals( const Sequence< sal_Int16 >& rSubtotals } } // set values from vector to ScDPSaveDimension - if ( aSubt.empty() ) - pDim->SetSubTotals( 0, nullptr ); - else - pDim->SetSubTotals( static_cast< long >( aSubt.size() ), &aSubt.front() ); + pDim->SetSubTotals( aSubt ); } } SetDPObject( pDPObj ); |