[Libreoffice-commits] core.git: sc/inc sc/source

Noel Grandin noel.grandin at collabora.co.uk
Fri Mar 16 12:11:03 UTC 2018


 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.grandin at 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 <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noel.grandin at 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


More information about the Libreoffice-commits mailing list