sc/inc/dptabres.hxx                 |   13 +++----------
 sc/source/core/data/column.cxx      |   19 +++++--------------
 sc/source/core/data/column4.cxx     |    1 +
 sc/source/core/data/dptabres.cxx    |   22 ++++++++++------------
 sd/source/filter/eppt/pptx-text.cxx |   15 ++++-----------
 5 files changed, 23 insertions(+), 47 deletions(-)

New commits:
commit 96a032743339f315ffff13fd8dc9191acffcc636
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Oct 3 15:23:13 2018 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Oct 4 08:15:48 2018 +0200

    reserve space before appending to vector in a loop
    
    Change-Id: Ib0017fc2a57ab90596aa494934c9579cae4bf4aa
    Reviewed-on: https://gerrit.libreoffice.org/61301
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index a63cc1193254..2617a72b115b 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -3345,11 +3345,10 @@ namespace {
 class TransferListenersHandler
 {
 public:
-    typedef std::vector<SvtListener*> ListenersType;
     struct Entry
     {
         size_t mnRow;
-        ListenersType maListeners;
+        std::vector<SvtListener*> maListeners;
     };
     typedef std::vector<Entry> ListenerListType;
 
@@ -3362,22 +3361,14 @@ public:
     {
         assert(pBroadcaster);
 
-        // It's important to make a copy here.
-        SvtBroadcaster::ListenersType aLis = pBroadcaster->GetAllListeners();
-        if (aLis.empty())
+        // It's important to make a copy of the broadcasters listener list here
+        Entry aEntry { nRow, pBroadcaster->GetAllListeners() };
+        if (aEntry.maListeners.empty())
             // No listeners to transfer.
             return;
 
-        Entry aEntry;
-        aEntry.mnRow = nRow;
-
-        SvtBroadcaster::ListenersType::iterator it = aLis.begin(), itEnd = 
aLis.end();
-        for (; it != itEnd; ++it)
-        {
-            SvtListener* pLis = *it;
+        for (SvtListener* pLis : aEntry.maListeners)
             pLis->EndListening(*pBroadcaster);
-            aEntry.maListeners.push_back(pLis);
-        }
 
         maListenerList.push_back(aEntry);
 
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index 608cef4609e2..3fac1ea00947 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -1226,6 +1226,7 @@ public:
     void operator() ( size_t /*nRow*/, SvtBroadcaster* p )
     {
         SvtBroadcaster::ListenersType& rLis = p->GetAllListeners();
+        mrListeners.reserve(mrListeners.size() + rLis.size());
         std::copy(rLis.begin(), rLis.end(), std::back_inserter(mrListeners));
     }
 };
commit 5c7de51f908e866cdab7dbf4aa22aa48f42dc153
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Oct 2 10:55:46 2018 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Oct 4 08:15:37 2018 +0200

    loplugin:useuniqueptr in ResultMembers
    
    no need to store a small structure separately on the heap
    
    Change-Id: I054ca078242225d12cf8abc86e25813586e6495f
    Reviewed-on: https://gerrit.libreoffice.org/61299
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/inc/dptabres.hxx b/sc/inc/dptabres.hxx
index 276392fbe6be..990fbe8172e8 100644
--- a/sc/inc/dptabres.hxx
+++ b/sc/inc/dptabres.hxx
@@ -218,11 +218,6 @@ class ScDPDataMember;
 #define SC_DPMEASURE_ALL    -1
 #define SC_DPMEASURE_ANY    -2
 
-struct MemberHashIndexFunc
-{
-    size_t operator() (SCROW rDataIndex) const { return rDataIndex; }
-};
-
 struct ScDPParentDimData
 {
     const SCROW                     mnOrder;                //! Ref
@@ -234,15 +229,13 @@ struct ScDPParentDimData
     ScDPParentDimData(SCROW nIndex, const ScDPDimension* pDim, const 
ScDPLevel* pLev, const ScDPMember* pMember);
 };
 
-typedef std::unordered_map < SCROW, ScDPParentDimData *, MemberHashIndexFunc>  
DimMemberHash;
-
 class ResultMembers final
 {
-    DimMemberHash      maMemberHash;
+    std::unordered_map<SCROW, ScDPParentDimData> maMemberHash;
     bool mbHasHideDetailsMember;
 public:
-    ScDPParentDimData* FindMember( SCROW nIndex ) const;
-    void                             InsertMember(  ScDPParentDimData* pNew );
+    const ScDPParentDimData* FindMember( SCROW nIndex ) const;
+    void InsertMember( ScDPParentDimData const & rNew );
     bool IsHasHideDetailsMembers() const { return mbHasHideDetailsMember; }
     void SetHasHideDetailsMembers( bool b ) { mbHasHideDetailsMember = b; }
     ResultMembers();
diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx
index e5bef46c3256..7b9e9aa9c792 100644
--- a/sc/source/core/data/dptabres.cxx
+++ b/sc/source/core/data/dptabres.cxx
@@ -929,8 +929,8 @@ ResultMembers& ScDPResultData::GetDimResultMembers(long 
nDim, const ScDPDimensio
         ScDPMember* pMember = pMembers->getByIndex(nSorted);
         if (!pResultMembers->FindMember(pMember->GetItemDataId()))
         {
-            ScDPParentDimData* pNew = new ScDPParentDimData(i, pDim, pLevel, 
pMember);
-            pResultMembers->InsertMember(pNew);
+            ScDPParentDimData aNew(i, pDim, pLevel, pMember);
+            pResultMembers->InsertMember(aNew);
         }
     }
 
@@ -4021,7 +4021,7 @@ void ScDPResultDimension::InitWithMembers(
 
         if ( pResultMember == nullptr )
         { //only insert found item
-            ScDPParentDimData* pMemberData = rMembers.FindMember( nDataID );
+            const ScDPParentDimData* pMemberData = rMembers.FindMember( 
nDataID );
             if ( pMemberData && aCompare.IsIncluded( *( 
pMemberData->mpMemberDesc ) ) )
                 pResultMember = InsertMember( pMemberData );
         }
@@ -4041,20 +4041,20 @@ ScDPParentDimData::ScDPParentDimData(
     SCROW nIndex, const ScDPDimension* pDim, const ScDPLevel* pLev, const 
ScDPMember* pMember) :
     mnOrder(nIndex), mpParentDim(pDim), mpParentLevel(pLev), 
mpMemberDesc(pMember) {}
 
-ScDPParentDimData* ResultMembers::FindMember( SCROW nIndex ) const
+const ScDPParentDimData* ResultMembers::FindMember( SCROW nIndex ) const
 {
-    DimMemberHash::const_iterator aRes = maMemberHash.find( nIndex );
+    auto aRes = maMemberHash.find( nIndex );
     if( aRes != maMemberHash.end()) {
-           if (  aRes->second->mpMemberDesc && 
aRes->second->mpMemberDesc->GetItemDataId()==nIndex )
-            return aRes->second;
+        if ( aRes->second.mpMemberDesc && 
aRes->second.mpMemberDesc->GetItemDataId()==nIndex )
+            return &aRes->second;
     }
     return nullptr;
 }
-void  ResultMembers::InsertMember(  ScDPParentDimData* pNew )
+void  ResultMembers::InsertMember(  const ScDPParentDimData& rNew )
 {
-    if ( !pNew->mpMemberDesc->getShowDetails() )
+    if ( !rNew.mpMemberDesc->getShowDetails() )
         mbHasHideDetailsMember = true;
-    maMemberHash.insert( std::pair< const SCROW, ScDPParentDimData *>( 
pNew->mpMemberDesc->GetItemDataId(), pNew ) );
+    maMemberHash.emplace( rNew.mpMemberDesc->GetItemDataId(), rNew );
 }
 
 ResultMembers::ResultMembers():
@@ -4063,8 +4063,6 @@ ResultMembers::ResultMembers():
 }
 ResultMembers::~ResultMembers()
 {
-    for ( DimMemberHash::const_iterator iter = maMemberHash.begin(); iter != 
maMemberHash.end(); ++iter )
-        delete iter->second;
 }
 
 LateInitParams::LateInitParams(
diff --git a/sd/source/filter/eppt/pptx-text.cxx 
b/sd/source/filter/eppt/pptx-text.cxx
index bbcc1a1a7312..71d05d0910cd 100644
--- a/sd/source/filter/eppt/pptx-text.cxx
+++ b/sd/source/filter/eppt/pptx-text.cxx
@@ -1267,11 +1267,10 @@ struct ImplTextObj
 {
     sal_uInt32      mnTextSize;
     int             mnInstance;
-    std::vector<ParagraphObj*> maList;
+    std::vector<std::unique_ptr<ParagraphObj>> maList;
     bool        mbHasExtendedBullets;
 
     explicit ImplTextObj( int nInstance );
-    ~ImplTextObj();
 };
 
 ImplTextObj::ImplTextObj( int nInstance )
@@ -1282,12 +1281,6 @@ ImplTextObj::ImplTextObj( int nInstance )
     mbHasExtendedBullets = false;
 }
 
-ImplTextObj::~ImplTextObj()
-{
-    for ( std::vector<ParagraphObj*>::const_iterator it = maList.begin(); it 
!= maList.end(); ++it )
-        delete *it;
-}
-
 TextObj::TextObj( css::uno::Reference< css::text::XSimpleText > const & 
rXTextRef,
             int nInstance, FontCollection& rFontCollection, 
PPTExBulletProvider& rProv ):
     mpImplTextObj(new ImplTextObj(nInstance))
@@ -1308,9 +1301,9 @@ TextObj::TextObj( css::uno::Reference< 
css::text::XSimpleText > const & rXTextRe
                 {
                     if ( !aXTextParagraphE->hasMoreElements() )
                         aParaFlags.bLastParagraph = true;
-                    ParagraphObj* pPara = new ParagraphObj( aXParagraph, 
aParaFlags, rFontCollection, rProv );
+                    std::unique_ptr<ParagraphObj> pPara(new ParagraphObj( 
aXParagraph, aParaFlags, rFontCollection, rProv ));
                     mpImplTextObj->mbHasExtendedBullets |= 
pPara->bExtendedBulletsUsed;
-                    mpImplTextObj->maList.push_back( pPara );
+                    mpImplTextObj->maList.push_back( std::move(pPara) );
                     aParaFlags.bFirstParagraph = false;
                 }
             }
@@ -1328,7 +1321,7 @@ void TextObj::ImplCalculateTextPositions()
 
 ParagraphObj* TextObj::GetParagraph(int idx)
 {
-    return mpImplTextObj->maList[idx];
+    return mpImplTextObj->maList[idx].get();
 }
 
 sal_uInt32 TextObj::ParagraphCount() const
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to