summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-03-15 16:56:51 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-03-16 13:10:47 +0100
commit04caeef4fdb84d792f967e661073c8ba81d931b2 (patch)
treecc0215d13bebf40d511c235f501a80af949642bf
parentf7069aaa2aac8e120a21cba3905a513b194364ca (diff)
loplugin:useuniqueptr in ScDPSaveDimension
Change-Id: I169a8eff540c866958da37c25a03550542433f16 Reviewed-on: https://gerrit.libreoffice.org/51372 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sc/inc/dpsave.hxx23
-rw-r--r--sc/source/core/data/dpsave.cxx96
-rw-r--r--sc/source/filter/xml/xmldpimp.cxx13
-rw-r--r--sc/source/filter/xml/xmldpimp.hxx2
-rw-r--r--sc/source/ui/view/dbfunc3.cxx11
5 files changed, 60 insertions, 85 deletions
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