sc/inc/dpsave.hxx | 23 ++++----- sc/source/core/data/dpsave.cxx | 96 ++++++++++++++------------------------ sc/source/filter/xml/xmldpimp.cxx | 13 ++--- sc/source/filter/xml/xmldpimp.hxx | 2 sc/source/ui/view/dbfunc3.cxx | 11 +--- 5 files changed, 60 insertions(+), 85 deletions(-)
New commits: commit 04caeef4fdb84d792f967e661073c8ba81d931b2 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Thu Mar 15 16:56:51 2018 +0200 loplugin:useuniqueptr in ScDPSaveDimension Change-Id: I169a8eff540c866958da37c25a03550542433f16 Reviewed-on: https://gerrit.libreoffice.org/51372 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/inc/dpsave.hxx b/sc/inc/dpsave.hxx index b88b08161495..4ba46fc0f1b5 100644 --- a/sc/inc/dpsave.hxx +++ b/sc/inc/dpsave.hxx @@ -105,18 +105,17 @@ private: bool bRepeatItemLabels; //! at level bool bSubTotalDefault; //! at level std::vector<ScGeneralFunction> maSubTotalFuncs; - css::sheet::DataPilotFieldReference* pReferenceValue; - css::sheet::DataPilotFieldSortInfo* pSortInfo; // (level) - css::sheet::DataPilotFieldAutoShowInfo* pAutoShowInfo; // (level) - css::sheet::DataPilotFieldLayoutInfo* pLayoutInfo; // (level) + std::unique_ptr<css::sheet::DataPilotFieldReference> pReferenceValue; + std::unique_ptr<css::sheet::DataPilotFieldSortInfo> pSortInfo; // (level) + std::unique_ptr<css::sheet::DataPilotFieldAutoShowInfo> pAutoShowInfo; // (level) + std::unique_ptr<css::sheet::DataPilotFieldLayoutInfo> pLayoutInfo; // (level) public: typedef std::unordered_set<OUString> MemberSetType; - typedef std::unordered_map <OUString, ScDPSaveMember*> MemberHash; - typedef std::list <ScDPSaveMember*> MemberList; + typedef std::vector<ScDPSaveMember*> MemberList; private: - MemberHash maMemberHash; + std::unordered_map<OUString, std::unique_ptr<ScDPSaveMember>> maMemberHash; MemberList maMemberList; public: @@ -129,7 +128,7 @@ public: const MemberList& GetMembers() const { return maMemberList; } - void AddMember(ScDPSaveMember* pMember); + void AddMember(std::unique_ptr<ScDPSaveMember> pMember); void SetDupFlag(bool bSet) { bDupFlag = bSet; } @@ -180,20 +179,20 @@ public: bool IsMemberNameInUse(const OUString& rName) const; const css::sheet::DataPilotFieldReference* GetReferenceValue() const - { return pReferenceValue; } + { return pReferenceValue.get(); } void SetReferenceValue(const css::sheet::DataPilotFieldReference* pNew); const css::sheet::DataPilotFieldSortInfo* GetSortInfo() const - { return pSortInfo; } + { return pSortInfo.get(); } void SetSortInfo(const css::sheet::DataPilotFieldSortInfo* pNew); const css::sheet::DataPilotFieldAutoShowInfo* GetAutoShowInfo() const - { return pAutoShowInfo; } + { return pAutoShowInfo.get(); } void SetAutoShowInfo(const css::sheet::DataPilotFieldAutoShowInfo* pNew); const css::sheet::DataPilotFieldLayoutInfo* GetLayoutInfo() const - { return pLayoutInfo; } + { return pLayoutInfo.get(); } void SetLayoutInfo(const css::sheet::DataPilotFieldLayoutInfo* pNew); diff --git a/sc/source/core/data/dpsave.cxx b/sc/source/core/data/dpsave.cxx index 834c1e7df3e4..a07908a223c6 100644 --- a/sc/source/core/data/dpsave.cxx +++ b/sc/source/core/data/dpsave.cxx @@ -223,26 +223,18 @@ ScDPSaveDimension::ScDPSaveDimension(const ScDPSaveDimension& r) : for (MemberList::const_iterator i=r.maMemberList.begin(); i != r.maMemberList.end() ; ++i) { const OUString& rName = (*i)->GetName(); - ScDPSaveMember* pNew = new ScDPSaveMember( **i ); - maMemberHash[rName] = pNew; - maMemberList.push_back( pNew ); + std::unique_ptr<ScDPSaveMember> pNew(new ScDPSaveMember( **i )); + maMemberList.push_back( pNew.get() ); + maMemberHash[rName] = std::move(pNew); } if (r.pReferenceValue) - pReferenceValue = new sheet::DataPilotFieldReference( *(r.pReferenceValue) ); - else - pReferenceValue = nullptr; + pReferenceValue.reset( new sheet::DataPilotFieldReference( *(r.pReferenceValue) ) ); if (r.pSortInfo) - pSortInfo = new sheet::DataPilotFieldSortInfo( *(r.pSortInfo) ); - else - pSortInfo = nullptr; + pSortInfo.reset( new sheet::DataPilotFieldSortInfo( *(r.pSortInfo) ) ); if (r.pAutoShowInfo) - pAutoShowInfo = new sheet::DataPilotFieldAutoShowInfo( *(r.pAutoShowInfo) ); - else - pAutoShowInfo = nullptr; + pAutoShowInfo.reset( new sheet::DataPilotFieldAutoShowInfo( *(r.pAutoShowInfo) ) ); if (r.pLayoutInfo) - pLayoutInfo = new sheet::DataPilotFieldLayoutInfo( *(r.pLayoutInfo) ); - else - pLayoutInfo = nullptr; + pLayoutInfo.reset(new sheet::DataPilotFieldLayoutInfo( *(r.pLayoutInfo) )); if (r.mpLayoutName) mpLayoutName.reset(new OUString(*r.mpLayoutName)); if (r.mpSubtotalName) @@ -251,12 +243,11 @@ ScDPSaveDimension::ScDPSaveDimension(const ScDPSaveDimension& r) : ScDPSaveDimension::~ScDPSaveDimension() { - for (MemberHash::const_iterator i=maMemberHash.begin(); i != maMemberHash.end() ; ++i) - delete i->second; - delete pReferenceValue; - delete pSortInfo; - delete pAutoShowInfo; - delete pLayoutInfo; + maMemberHash.clear(); + pReferenceValue.reset(); + pSortInfo.reset(); + pAutoShowInfo.reset(); + pLayoutInfo.reset(); } bool ScDPSaveDimension::operator== ( const ScDPSaveDimension& r ) const @@ -319,22 +310,21 @@ bool ScDPSaveDimension::operator== ( const ScDPSaveDimension& r ) const return true; } -void ScDPSaveDimension::AddMember(ScDPSaveMember* pMember) +void ScDPSaveDimension::AddMember(std::unique_ptr<ScDPSaveMember> pMember) { const OUString & rName = pMember->GetName(); - MemberHash::iterator aExisting = maMemberHash.find( rName ); + auto aExisting = maMemberHash.find( rName ); + auto tmp = pMember.get(); if ( aExisting == maMemberHash.end() ) { - std::pair< const OUString, ScDPSaveMember *> key( rName, pMember ); - maMemberHash.insert ( key ); + maMemberHash[rName] = std::move(pMember); } else { - maMemberList.remove( aExisting->second ); - delete aExisting->second; - aExisting->second = pMember; + maMemberList.erase(std::remove(maMemberList.begin(), maMemberList.end(), aExisting->second.get()), maMemberList.end()); + aExisting->second = std::move(pMember); } - maMemberList.push_back( pMember ); + maMemberList.push_back( tmp ); } void ScDPSaveDimension::SetName( const OUString& rNew ) @@ -429,38 +419,34 @@ void ScDPSaveDimension::RemoveLayoutName() void ScDPSaveDimension::SetReferenceValue(const sheet::DataPilotFieldReference* pNew) { - delete pReferenceValue; if (pNew) - pReferenceValue = new sheet::DataPilotFieldReference(*pNew); + pReferenceValue.reset( new sheet::DataPilotFieldReference(*pNew) ); else - pReferenceValue = nullptr; + pReferenceValue.reset(); } void ScDPSaveDimension::SetSortInfo(const sheet::DataPilotFieldSortInfo* pNew) { - delete pSortInfo; if (pNew) - pSortInfo = new sheet::DataPilotFieldSortInfo(*pNew); + pSortInfo.reset( new sheet::DataPilotFieldSortInfo(*pNew) ); else - pSortInfo = nullptr; + pSortInfo.reset(); } void ScDPSaveDimension::SetAutoShowInfo(const sheet::DataPilotFieldAutoShowInfo* pNew) { - delete pAutoShowInfo; if (pNew) - pAutoShowInfo = new sheet::DataPilotFieldAutoShowInfo(*pNew); + pAutoShowInfo.reset( new sheet::DataPilotFieldAutoShowInfo(*pNew) ); else - pAutoShowInfo = nullptr; + pAutoShowInfo.reset(); } void ScDPSaveDimension::SetLayoutInfo(const sheet::DataPilotFieldLayoutInfo* pNew) { - delete pLayoutInfo; if (pNew) - pLayoutInfo = new sheet::DataPilotFieldLayoutInfo(*pNew); + pLayoutInfo.reset( new sheet::DataPilotFieldLayoutInfo(*pNew) ); else - pLayoutInfo = nullptr; + pLayoutInfo.reset(); } void ScDPSaveDimension::SetCurrentPage( const OUString* pPage ) @@ -492,20 +478,20 @@ OUString ScDPSaveDimension::GetCurrentPage() const ScDPSaveMember* ScDPSaveDimension::GetExistingMemberByName(const OUString& rName) { - MemberHash::const_iterator res = maMemberHash.find (rName); + auto res = maMemberHash.find (rName); if (res != maMemberHash.end()) - return res->second; + return res->second.get(); return nullptr; } ScDPSaveMember* ScDPSaveDimension::GetMemberByName(const OUString& rName) { - MemberHash::const_iterator res = maMemberHash.find (rName); + auto res = maMemberHash.find (rName); if (res != maMemberHash.end()) - return res->second; + return res->second.get(); ScDPSaveMember* pNew = new ScDPSaveMember( rName ); - maMemberHash[rName] = pNew; + maMemberHash[rName] = std::unique_ptr<ScDPSaveMember>(pNew); maMemberList.push_back( pNew ); return pNew; } @@ -514,12 +500,9 @@ void ScDPSaveDimension::SetMemberPosition( const OUString& rName, sal_Int32 nNew { ScDPSaveMember* pMember = GetMemberByName( rName ); // make sure it exists and is in the hash - maMemberList.remove( pMember ); + maMemberList.erase(std::remove( maMemberList.begin(), maMemberList.end(), pMember), maMemberList.end() ); - MemberList::iterator aIter = maMemberList.begin(); - for (sal_Int32 i=0; i<nNewPos && aIter != maMemberList.end(); i++) - ++aIter; - maMemberList.insert( aIter, pMember ); + maMemberList.insert( maMemberList.begin() + nNewPos, pMember ); } void ScDPSaveDimension::WriteToSource( const uno::Reference<uno::XInterface>& xDim ) @@ -687,22 +670,17 @@ bool ScDPSaveDimension::HasInvisibleMember() const void ScDPSaveDimension::RemoveObsoleteMembers(const MemberSetType& rMembers) { - maMemberHash.clear(); MemberList aNew; - MemberList::iterator it = maMemberList.begin(), itEnd = maMemberList.end(); - for (; it != itEnd; ++it) + for (ScDPSaveMember* pMem : maMemberList) { - ScDPSaveMember* pMem = *it; if (rMembers.count(pMem->GetName())) { // This member still exists. - maMemberHash.emplace(pMem->GetName(), pMem); aNew.push_back(pMem); } else { - // This member no longer exists. - delete pMem; + maMemberHash.erase(pMem->GetName()); } } @@ -1325,7 +1303,7 @@ void ScDPSaveData::BuildAllDimensionMembers(ScDPTableData* pData) unique_ptr<ScDPSaveMember> pNewMember(new ScDPSaveMember(aMemName)); pNewMember->SetIsVisible(true); - iter->AddMember(pNewMember.release()); + iter->AddMember(std::move(pNewMember)); } } diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx index c6d3581ca7a3..0c4b583ca598 100644 --- a/sc/source/filter/xml/xmldpimp.cxx +++ b/sc/source/filter/xml/xmldpimp.cxx @@ -909,17 +909,16 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDataPilotFieldCont return pContext; } -void ScXMLDataPilotFieldContext::AddMember(ScDPSaveMember* pMember) +void ScXMLDataPilotFieldContext::AddMember(std::unique_ptr<ScDPSaveMember> pMember) { if (xDim) { - xDim->AddMember(pMember); - if (!pMember->GetIsVisible()) + bool isVisible = pMember->GetIsVisible(); + xDim->AddMember(std::move(pMember)); + if (!isVisible) // This member is hidden. mbHasHiddenMember = true; } - else - delete pMember; } void ScXMLDataPilotFieldContext::SetSubTotalName(const OUString& rName) @@ -1389,12 +1388,12 @@ void SAL_CALL ScXMLDataPilotMemberContext::endFastElement( sal_Int32 /*nElement* { if (bHasName) // #i53407# don't check sName, empty name is allowed { - ScDPSaveMember* pMember = new ScDPSaveMember(sName); + std::unique_ptr<ScDPSaveMember> pMember(new ScDPSaveMember(sName)); if (!maDisplayName.isEmpty()) pMember->SetLayoutName(maDisplayName); pMember->SetIsVisible(bDisplay); pMember->SetShowDetails(bDisplayDetails); - pDataPilotField->AddMember(pMember); + pDataPilotField->AddMember(std::move(pMember)); } } diff --git a/sc/source/filter/xml/xmldpimp.hxx b/sc/source/filter/xml/xmldpimp.hxx index 9cc139e0f08f..df8b2f279ae9 100644 --- a/sc/source/filter/xml/xmldpimp.hxx +++ b/sc/source/filter/xml/xmldpimp.hxx @@ -277,7 +277,7 @@ public: void SetShowEmpty(const bool bValue) { if (xDim) xDim->SetShowEmpty(bValue); } void SetRepeatItemLabels(const bool bSet) { if (xDim) xDim->SetRepeatItemLabels(bSet); } void SetSubTotals(std::vector<ScGeneralFunction> const & rFunctions) { if (xDim) xDim->SetSubTotals(rFunctions); } - void AddMember(ScDPSaveMember* pMember); + void AddMember(std::unique_ptr<ScDPSaveMember> pMember); void SetSubTotalName(const OUString& rName); void SetFieldReference(const css::sheet::DataPilotFieldReference& aRef) { if (xDim) xDim->SetReferenceValue(&aRef); } void SetAutoShowInfo(const css::sheet::DataPilotFieldAutoShowInfo& aInfo) { if (xDim) xDim->SetAutoShowInfo(&aInfo); } diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx index 38b6d6a54fb0..48f14dca7935 100644 --- a/sc/source/ui/view/dbfunc3.cxx +++ b/sc/source/ui/view/dbfunc3.cxx @@ -1623,13 +1623,13 @@ void ScDBFunc::DataPilotInput( const ScAddress& rPos, const OUString& rString ) static void lcl_MoveToEnd( ScDPSaveDimension& rDim, const OUString& rItemName ) { - ScDPSaveMember* pNewMember = nullptr; + std::unique_ptr<ScDPSaveMember> pNewMember; const ScDPSaveMember* pOldMember = rDim.GetExistingMemberByName( rItemName ); if ( pOldMember ) - pNewMember = new ScDPSaveMember( *pOldMember ); + pNewMember.reset(new ScDPSaveMember( *pOldMember )); else - pNewMember = new ScDPSaveMember( rItemName ); - rDim.AddMember( pNewMember ); + pNewMember.reset(new ScDPSaveMember( rItemName )); + rDim.AddMember( std::move(pNewMember) ); // AddMember takes ownership of the new pointer, // puts it to the end of the list even if it was in the list before. } @@ -1748,8 +1748,7 @@ void ScDBFunc::DataPilotSort(ScDPObject* pDPObj, long nDimIndex, bool bAscending // All members are supposed to be present. continue; - ScDPSaveMember* pNewMem = new ScDPSaveMember(*pOldMem); - pSaveDim->AddMember(pNewMem); + pSaveDim->AddMember(std::unique_ptr<ScDPSaveMember>(new ScDPSaveMember(*pOldMem))); } // Set the sorting mode to manual for now. We may introduce a new sorting _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits