include/svx/xpoly.hxx | 2 +- svx/inc/xpolyimp.hxx | 4 ++-- svx/source/svdraw/svdopath.cxx | 14 +++++++------- svx/source/xoutdev/_xpoly.cxx | 36 ++++++++++-------------------------- 4 files changed, 20 insertions(+), 36 deletions(-)
New commits: commit 224db728733d1beb4709652ace948ff7d1f40f00 Author: Noel Grandin <noel.gran...@collabora.co.uk> Date: Tue Oct 3 17:15:46 2017 +0200 simplify memory management in ImpXPolyPolygon just use a std::vector<XPolygon> Change-Id: I1adb801faa8341e0759a86fd209a530b8f5c5a1c Reviewed-on: https://gerrit.libreoffice.org/43086 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/include/svx/xpoly.hxx b/include/svx/xpoly.hxx index a42f1410f79d..a9d53f57e42e 100644 --- a/include/svx/xpoly.hxx +++ b/include/svx/xpoly.hxx @@ -123,7 +123,7 @@ public: ~XPolyPolygon(); - void Insert( const XPolygon& rXPoly ); + void Insert( XPolygon&& rXPoly ); void Insert( const XPolyPolygon& rXPoly ); void Remove( sal_uInt16 nPos ); const XPolygon& GetObject( sal_uInt16 nPos ) const; diff --git a/svx/inc/xpolyimp.hxx b/svx/inc/xpolyimp.hxx index 02c9b08e1bef..335117f4ca84 100644 --- a/svx/inc/xpolyimp.hxx +++ b/svx/inc/xpolyimp.hxx @@ -51,12 +51,12 @@ public: void Remove( sal_uInt16 nPos, sal_uInt16 nCount ); }; -typedef ::std::vector< XPolygon* > XPolygonList; +typedef ::std::vector< XPolygon > XPolygonVector; class ImpXPolyPolygon { public: - XPolygonList aXPolyList; + XPolygonVector aXPolyList; ImpXPolyPolygon() {} ImpXPolyPolygon( const ImpXPolyPolygon& rImpXPolyPoly ); diff --git a/svx/source/svdraw/svdopath.cxx b/svx/source/svdraw/svdopath.cxx index 8b4eb625b127..f6cb2bcf48e7 100644 --- a/svx/source/svdraw/svdopath.cxx +++ b/svx/source/svdraw/svdopath.cxx @@ -1155,7 +1155,7 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const SdrDra if (rXP.GetPointCount()<=2) { XPolygon aXPoly(rXP); aXPoly[(sal_uInt16)rDrag.GetHdl()->GetPointNum()]=rDrag.GetNow(); - aRetval.Insert(aXPoly); + aRetval.Insert(std::move(aXPoly)); return aRetval.getB2DPolyPolygon(); } // copy certain data locally to use less code and have faster access times @@ -1241,11 +1241,11 @@ basegfx::B2DPolyPolygon ImpPathForDragAndCreate::getSpecialDragPoly(const SdrDra } } } - aRetval.Insert(aXPoly); - if (aLine1.GetPointCount()>1) aRetval.Insert(aLine1); - if (aLine2.GetPointCount()>1) aRetval.Insert(aLine2); - if (aLine3.GetPointCount()>1) aRetval.Insert(aLine3); - if (aLine4.GetPointCount()>1) aRetval.Insert(aLine4); + aRetval.Insert(std::move(aXPoly)); + if (aLine1.GetPointCount()>1) aRetval.Insert(std::move(aLine1)); + if (aLine2.GetPointCount()>1) aRetval.Insert(std::move(aLine2)); + if (aLine3.GetPointCount()>1) aRetval.Insert(std::move(aLine3)); + if (aLine4.GetPointCount()>1) aRetval.Insert(std::move(aLine4)); } return aRetval.getB2DPolyPolygon(); @@ -1462,7 +1462,7 @@ bool ImpPathForDragAndCreate::EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) rXPoly[nActPoint]=rXPoly[0]; XPolygon aXP; aXP[0]=rStat.GetNow(); - aPathPolygon.Insert(aXP); + aPathPolygon.Insert(std::move(aXP)); } } } diff --git a/svx/source/xoutdev/_xpoly.cxx b/svx/source/xoutdev/_xpoly.cxx index 57c850e67d6b..52f08a13ca05 100644 --- a/svx/source/xoutdev/_xpoly.cxx +++ b/svx/source/xoutdev/_xpoly.cxx @@ -862,16 +862,10 @@ XPolygon::XPolygon(const basegfx::B2DPolygon& rPolygon) ImpXPolyPolygon::ImpXPolyPolygon( const ImpXPolyPolygon& rImpXPolyPoly ) : aXPolyList( rImpXPolyPoly.aXPolyList ) { - // duplicate elements - for (XPolygon*& rp : aXPolyList) - rp = new XPolygon( *rp ); } ImpXPolyPolygon::~ImpXPolyPolygon() { - for (XPolygon* p : aXPolyList) - delete p; - aXPolyList.clear(); } XPolyPolygon::XPolyPolygon() @@ -895,8 +889,7 @@ XPolyPolygon::XPolyPolygon(const basegfx::B2DPolyPolygon& rPolyPolygon) for(sal_uInt32 a(0); a < rPolyPolygon.count(); a++) { const basegfx::B2DPolygon aCandidate = rPolyPolygon.getB2DPolygon(a); - XPolygon aNewPoly(aCandidate); - Insert(aNewPoly); + Insert(XPolygon(aCandidate)); } } @@ -904,10 +897,9 @@ XPolyPolygon::~XPolyPolygon() { } -void XPolyPolygon::Insert( const XPolygon& rXPoly ) +void XPolyPolygon::Insert( XPolygon&& rXPoly ) { - XPolygon* pXPoly = new XPolygon( rXPoly ); - pImpXPolyPolygon->aXPolyList.push_back( pXPoly ); + pImpXPolyPolygon->aXPolyList.emplace_back( std::move(rXPoly) ); } /// insert all XPolygons of a XPolyPolygon @@ -915,30 +907,22 @@ void XPolyPolygon::Insert( const XPolyPolygon& rXPolyPoly ) { for ( size_t i = 0; i < rXPolyPoly.Count(); i++) { - XPolygon* pXPoly = new XPolygon( rXPolyPoly[i] ); - - pImpXPolyPolygon->aXPolyList.push_back( pXPoly ); + pImpXPolyPolygon->aXPolyList.emplace_back( rXPolyPoly[i] ); } } void XPolyPolygon::Remove( sal_uInt16 nPos ) { - XPolygonList::iterator it = pImpXPolyPolygon->aXPolyList.begin(); - ::std::advance( it, nPos ); - XPolygon* pTmpXPoly = *it; - pImpXPolyPolygon->aXPolyList.erase( it ); - delete pTmpXPoly; + pImpXPolyPolygon->aXPolyList.erase( pImpXPolyPolygon->aXPolyList.begin() + nPos ); } const XPolygon& XPolyPolygon::GetObject( sal_uInt16 nPos ) const { - return *(pImpXPolyPolygon->aXPolyList[ nPos ]); + return pImpXPolyPolygon->aXPolyList[ nPos ]; } void XPolyPolygon::Clear() { - for(XPolygon* p : pImpXPolyPolygon->aXPolyList) - delete p; pImpXPolyPolygon->aXPolyList.clear(); } @@ -954,8 +938,8 @@ tools::Rectangle XPolyPolygon::GetBoundRect() const for ( size_t n = 0; n < nXPoly; n++ ) { - const XPolygon* pXPoly = pImpXPolyPolygon->aXPolyList[ n ]; - aRect.Union( pXPoly->GetBoundRect() ); + XPolygon const & rXPoly = pImpXPolyPolygon->aXPolyList[ n ]; + aRect.Union( rXPoly.GetBoundRect() ); } return aRect; @@ -963,7 +947,7 @@ tools::Rectangle XPolyPolygon::GetBoundRect() const XPolygon& XPolyPolygon::operator[]( sal_uInt16 nPos ) { - return *( pImpXPolyPolygon->aXPolyList[ nPos ] ); + return pImpXPolyPolygon->aXPolyList[ nPos ]; } XPolyPolygon& XPolyPolygon::operator=( const XPolyPolygon& rXPolyPoly ) @@ -992,7 +976,7 @@ void XPolyPolygon::Distort(const tools::Rectangle& rRefRect, const XPolygon& rDistortedRect) { for (size_t i = 0; i < Count(); i++) - pImpXPolyPolygon->aXPolyList[ i ]->Distort(rRefRect, rDistortedRect); + pImpXPolyPolygon->aXPolyList[ i ].Distort(rRefRect, rDistortedRect); } basegfx::B2DPolyPolygon XPolyPolygon::getB2DPolyPolygon() const _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits