sc/source/filter/excel/excrecds.cxx | 4 +-- sc/source/filter/excel/xeescher.cxx | 13 ++++----- sc/source/filter/inc/xcl97rec.hxx | 19 ++++++-------- sc/source/filter/inc/xeescher.hxx | 4 +-- sc/source/filter/xcl97/xcl97esc.cxx | 10 +++---- sc/source/filter/xcl97/xcl97rec.cxx | 48 ++++++++++++++++-------------------- 6 files changed, 45 insertions(+), 53 deletions(-)
New commits: commit df8589bd49d7eb1bb42ae78abcb91d33cf9255ce Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Thu Jul 5 15:01:31 2018 +0200 loplugin:useuniqueptr in XclExpObjList Change-Id: Ia7f2be93d6306d72773ab611de2945c8a711a2d9 Reviewed-on: https://gerrit.libreoffice.org/57010 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/filter/excel/excrecds.cxx b/sc/source/filter/excel/excrecds.cxx index 61daa9295ee6..49988ed954a6 100644 --- a/sc/source/filter/excel/excrecds.cxx +++ b/sc/source/filter/excel/excrecds.cxx @@ -1013,8 +1013,8 @@ void ExcAutoFilterRecs::AddObjRecs() ScAddress aAddr( m_pFilterInfo->GetStartPos() ); for( SCCOL nObj = 0, nCount = m_pFilterInfo->GetColCount(); nObj < nCount; nObj++ ) { - XclObj* pObjRec = new XclObjDropDown( GetObjectManager(), aAddr, IsFiltered( nObj ) ); - GetObjectManager().AddObj( pObjRec ); + std::unique_ptr<XclObj> pObjRec(new XclObjDropDown( GetObjectManager(), aAddr, IsFiltered( nObj ) )); + GetObjectManager().AddObj( std::move(pObjRec) ); aAddr.IncCol(); } } diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx index c2e9aba3b175..971eb25998f6 100644 --- a/sc/source/filter/excel/xeescher.cxx +++ b/sc/source/filter/excel/xeescher.cxx @@ -39,6 +39,7 @@ #include <svx/svdocapt.hxx> #include <editeng/outlobj.hxx> #include <editeng/editobj.hxx> +#include <o3tl/make_unique.hxx> #include <unotools/tempfile.hxx> #include <unotools/ucbstreamhelper.hxx> #include <svtools/embedhlp.hxx> @@ -1200,7 +1201,7 @@ XclExpNote::XclExpNote(const XclExpRoot& rRoot, const ScAddress& rScPos, { lcl_GetFromTo( rRoot, pCaption->GetLogicRect(), maScPos.Tab(), maCommentFrom, maCommentTo ); if( const OutlinerParaObject* pOPO = pCaption->GetOutlinerParaObject() ) - mnObjId = rRoot.GetObjectManager().AddObj( new XclObjComment( rRoot.GetObjectManager(), pCaption->GetLogicRect(), pOPO->GetTextObject(), pCaption, mbVisible, maScPos, maCommentFrom, maCommentTo ) ); + mnObjId = rRoot.GetObjectManager().AddObj( o3tl::make_unique<XclObjComment>( rRoot.GetObjectManager(), pCaption->GetLogicRect(), pOPO->GetTextObject(), pCaption, mbVisible, maScPos, maCommentFrom, maCommentTo ) ); SfxItemSet aItemSet = pCaption->GetMergedItemSet(); meTVA = pCaption->GetTextVerticalAdjust(); @@ -1556,16 +1557,14 @@ bool XclExpObjectManager::HasObj() const return !mxObjList->empty(); } -sal_uInt16 XclExpObjectManager::AddObj( XclObj* pObjRec ) +sal_uInt16 XclExpObjectManager::AddObj( std::unique_ptr<XclObj> pObjRec ) { - return mxObjList->Add( pObjRec ); + return mxObjList->Add( std::move(pObjRec) ); } -XclObj* XclExpObjectManager::RemoveLastObj() +std::unique_ptr<XclObj> XclExpObjectManager::RemoveLastObj() { - XclObj* pLastObj = mxObjList->back(); - mxObjList->pop_back(); - return pLastObj; + return mxObjList->pop_back(); } void XclExpObjectManager::InitStream( bool bTempFile ) diff --git a/sc/source/filter/inc/xcl97rec.hxx b/sc/source/filter/inc/xcl97rec.hxx index d078128859b5..8efaf9768ca7 100644 --- a/sc/source/filter/inc/xcl97rec.hxx +++ b/sc/source/filter/inc/xcl97rec.hxx @@ -37,24 +37,21 @@ class XclExpObjList : public ExcEmptyRec, protected XclExpRoot { public: - typedef std::vector<XclObj*>::iterator iterator; + typedef std::vector<std::unique_ptr<XclObj>>::iterator iterator; explicit XclExpObjList( const XclExpRoot& rRoot, XclEscherEx& rEscherEx ); virtual ~XclExpObjList() override; /// return: 1-based ObjId ///! count>=0xFFFF: Obj will be deleted, return 0 - sal_uInt16 Add( XclObj* ); + sal_uInt16 Add( std::unique_ptr<XclObj> ); - XclObj* back () { return maObjs.empty() ? nullptr : maObjs.back(); } + XclObj* back () { return maObjs.empty() ? nullptr : maObjs.back().get(); } /** - * * @brief Remove last element in the list. - * */ - - void pop_back (); + std::unique_ptr<XclObj> pop_back (); bool empty () const { return maObjs.empty(); } @@ -64,7 +61,7 @@ public: iterator end () { return maObjs.end(); } - XclExpMsoDrawing* GetMsodrawingPerSheet() { return pMsodrawingPerSheet; } + XclExpMsoDrawing* GetMsodrawingPerSheet() { return pMsodrawingPerSheet.get(); } /// close groups and DgContainer opened in ctor void EndSheet(); @@ -79,10 +76,10 @@ private: SCTAB mnScTab; XclEscherEx& mrEscherEx; - XclExpMsoDrawing* pMsodrawingPerSheet; - XclExpMsoDrawing* pSolverContainer; + std::unique_ptr<XclExpMsoDrawing> pMsodrawingPerSheet; + std::unique_ptr<XclExpMsoDrawing> pSolverContainer; - std::vector<XclObj*> maObjs; + std::vector<std::unique_ptr<XclObj>> maObjs; }; // --- class XclObj -------------------------------------------------- diff --git a/sc/source/filter/inc/xeescher.hxx b/sc/source/filter/inc/xeescher.hxx index 46cc7519fbcc..3f5fa308e261 100644 --- a/sc/source/filter/inc/xeescher.hxx +++ b/sc/source/filter/inc/xeescher.hxx @@ -407,8 +407,8 @@ public: XclEscherEx& GetEscherEx() { return *mxEscherEx; } XclExpMsoDrawing* GetMsodrawingPerSheet(); bool HasObj() const; - sal_uInt16 AddObj( XclObj* pObjRec ); - XclObj* RemoveLastObj(); + sal_uInt16 AddObj( std::unique_ptr<XclObj> pObjRec ); + std::unique_ptr<XclObj> RemoveLastObj(); protected: explicit XclExpObjectManager( const XclExpObjectManager& rParent ); diff --git a/sc/source/filter/xcl97/xcl97esc.cxx b/sc/source/filter/xcl97/xcl97esc.cxx index 198b23ef5c33..b5030ce78304 100644 --- a/sc/source/filter/xcl97/xcl97esc.cxx +++ b/sc/source/filter/xcl97/xcl97esc.cxx @@ -27,6 +27,7 @@ #include <svx/svdpage.hxx> #include <editeng/outlobj.hxx> +#include <o3tl/make_unique.hxx> #include <svx/svdotext.hxx> #include <svx/svdobj.hxx> #include <svx/svdoole2.hxx> @@ -222,7 +223,7 @@ EscherExHostAppData* XclEscherEx::StartShape( const Reference< XShape >& rxShape SvGlobalName aObjClsId( xObj->getClassID() ); if ( SotExchange::IsChart( aObjClsId ) ) { // yes, it's a chart diagram - mrObjMgr.AddObj( new XclExpChartObj( mrObjMgr, rxShape, pChildAnchor ) ); + mrObjMgr.AddObj( o3tl::make_unique<XclExpChartObj>( mrObjMgr, rxShape, pChildAnchor ) ); pCurrXclObj = nullptr; // no metafile or whatsoever } else // metafile and OLE object @@ -265,7 +266,7 @@ EscherExHostAppData* XclEscherEx::StartShape( const Reference< XShape >& rxShape } if ( pCurrXclObj ) { - if ( !mrObjMgr.AddObj( pCurrXclObj ) ) + if ( !mrObjMgr.AddObj( std::unique_ptr<XclObj>(pCurrXclObj) ) ) { // maximum count reached, object got deleted pCurrXclObj = nullptr; } @@ -353,9 +354,8 @@ void XclEscherEx::EndShape( sal_uInt16 nShapeType, sal_uInt32 nShapeID ) // escher data of last shape not written? -> delete it from object list if( nShapeID == 0 ) { - XclObj* pLastObj = mrObjMgr.RemoveLastObj(); - OSL_ENSURE( pLastObj == pCurrXclObj, "XclEscherEx::EndShape - wrong object" ); - DELETEZ( pLastObj ); + std::unique_ptr<XclObj> pLastObj = mrObjMgr.RemoveLastObj(); + OSL_ENSURE( pLastObj.get() == pCurrXclObj, "XclEscherEx::EndShape - wrong object" ); pCurrXclObj = nullptr; } diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx index 2eb32f70f558..b8a9919ca5dd 100644 --- a/sc/source/filter/xcl97/xcl97rec.cxx +++ b/sc/source/filter/xcl97/xcl97rec.cxx @@ -98,10 +98,9 @@ sal_Int32 XclExpObjList::mnVmlCount; XclExpObjList::XclExpObjList( const XclExpRoot& rRoot, XclEscherEx& rEscherEx ) : XclExpRoot( rRoot ), mnScTab( rRoot.GetCurrScTab() ), - mrEscherEx( rEscherEx ), - pSolverContainer( nullptr ) + mrEscherEx( rEscherEx ) { - pMsodrawingPerSheet = new XclExpMsoDrawing( rEscherEx ); + pMsodrawingPerSheet.reset( new XclExpMsoDrawing( rEscherEx ) ); // open the DGCONTAINER and the patriarch group shape mrEscherEx.OpenContainer( ESCHER_DgContainer ); tools::Rectangle aRect( 0, 0, 0, 0 ); @@ -111,12 +110,12 @@ XclExpObjList::XclExpObjList( const XclExpRoot& rRoot, XclEscherEx& rEscherEx ) XclExpObjList::~XclExpObjList() { - std::for_each(maObjs.begin(), maObjs.end(), std::default_delete<XclObj>()); - delete pMsodrawingPerSheet; - delete pSolverContainer; + maObjs.clear(); + pMsodrawingPerSheet.reset(); + pSolverContainer.reset(); } -sal_uInt16 XclExpObjList::Add( XclObj* pObj ) +sal_uInt16 XclExpObjList::Add( std::unique_ptr<XclObj> pObj ) { OSL_ENSURE( maObjs.size() < 0xFFFF, "XclExpObjList::Add: too much for Xcl" ); @@ -124,30 +123,31 @@ sal_uInt16 XclExpObjList::Add( XclObj* pObj ) if ( nSize < 0xFFFF ) { - maObjs.push_back(pObj); - ++nSize; - pObj->SetId( nSize ); + pObj->SetId( nSize+1 ); pObj->SetTab( mnScTab ); + maObjs.push_back(std::move(pObj)); + ++nSize; } else { - delete pObj; nSize = 0; } return nSize; } -void XclExpObjList::pop_back () +std::unique_ptr<XclObj> XclExpObjList::pop_back () { + auto ret = std::move(maObjs.back()); maObjs.pop_back(); + return ret; } void XclExpObjList::EndSheet() { // Is there still something in the stream? -> The solver container if( mrEscherEx.HasPendingDffData() ) - pSolverContainer = new XclExpMsoDrawing( mrEscherEx ); + pSolverContainer.reset( new XclExpMsoDrawing( mrEscherEx ) ); // close the DGCONTAINER created by XclExpObjList ctor MSODRAWING mrEscherEx.CloseContainer(); @@ -158,8 +158,7 @@ void XclExpObjList::Save( XclExpStream& rStrm ) //! Escher must be written, even if there are no objects pMsodrawingPerSheet->Save( rStrm ); - std::vector<XclObj*>::iterator pIter; - for ( pIter = maObjs.begin(); pIter != maObjs.end(); ++pIter ) + for ( auto pIter = maObjs.begin(); pIter != maObjs.end(); ++pIter ) (*pIter)->Save( rStrm ); if( pSolverContainer ) @@ -183,9 +182,8 @@ sal_Int32 GetVmlObjectCount( XclExpObjList& rList ) { sal_Int32 nNumVml = 0; - std::vector<XclObj*>::iterator pIter; - for ( pIter = rList.begin(); pIter != rList.end(); ++pIter ) - if( IsVmlObject( *pIter ) ) + for ( auto pIter = rList.begin(); pIter != rList.end(); ++pIter ) + if( IsVmlObject( pIter->get() ) ) ++nNumVml; return nNumVml; @@ -236,13 +234,12 @@ void SaveDrawingMLObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_Int { std::vector<XclObj*> aList; aList.reserve(rList.size()); - std::vector<XclObj*>::iterator it = rList.begin(), itEnd = rList.end(); - for (; it != itEnd; ++it) + for (auto it = rList.begin(), itEnd = rList.end(); it != itEnd; ++it) { - if (IsVmlObject(*it) || !IsValidObject(**it)) + if (IsVmlObject(it->get()) || !IsValidObject(**it)) continue; - aList.push_back(*it); + aList.push_back(it->get()); } if (aList.empty()) @@ -269,7 +266,7 @@ void SaveDrawingMLObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_Int FSNS( XML_xmlns, XML_r ), XclXmlUtils::ToOString(rStrm.getNamespaceURL(OOX_NS(officeRel))).getStr(), FSEND ); - for (it = aList.begin(), itEnd = aList.end(); it != itEnd; ++it) + for (auto it = aList.begin(), itEnd = aList.end(); it != itEnd; ++it) (*it)->SaveXml(rStrm); pDrawing->endElement( FSNS( XML_xdr, XML_wsDr ) ); @@ -304,10 +301,9 @@ void SaveVmlObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_Int32& nV FSNS( XML_xmlns, XML_w10 ), XclXmlUtils::ToOString(rStrm.getNamespaceURL(OOX_NS(vmlWord))).getStr(), FSEND ); - std::vector<XclObj*>::iterator pIter; - for ( pIter = rList.begin(); pIter != rList.end(); ++pIter ) + for ( auto pIter = rList.begin(); pIter != rList.end(); ++pIter ) { - if( !IsVmlObject( *pIter ) ) + if( !IsVmlObject( pIter->get() ) ) continue; (*pIter)->SaveXml( rStrm ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits