From cafc879f8978ea9f7fca1be9f6aa5057f0a59617 Mon Sep 17 00:00:00 2001 From: Thomas Arnhold Date: Sat, 23 Mar 2013 06:15:47 +0100 Subject: fdo#62525: use cow_wrapper for FillBitmapAttribute Change-Id: I0f666d4baaf6dc4e9f7ea30a518a8904f01d749f Reviewed-on: https://gerrit.libreoffice.org/2948 Reviewed-by: Thorsten Behrens Tested-by: Thorsten Behrens --- .../drawinglayer/attribute/fillbitmapattribute.hxx | 6 +- .../source/attribute/fillbitmapattribute.cxx | 80 +++++----------------- 2 files changed, 24 insertions(+), 62 deletions(-) (limited to 'drawinglayer') diff --git a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx index ced46b3e4078..851dc5ed0697 100644 --- a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx +++ b/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx @@ -21,6 +21,7 @@ #define INCLUDED_DRAWINGLAYER_ATTRIBUTE_FILLBITMAPATTRIBUTE_HXX #include +#include ////////////////////////////////////////////////////////////////////////////// // predefines @@ -44,8 +45,11 @@ namespace drawinglayer { class DRAWINGLAYER_DLLPUBLIC FillBitmapAttribute { + public: + typedef o3tl::cow_wrapper< ImpFillBitmapAttribute > ImplType; + private: - ImpFillBitmapAttribute* mpFillBitmapAttribute; + ImplType mpFillBitmapAttribute; public: /// constructors/assignmentoperator/destructor diff --git a/drawinglayer/source/attribute/fillbitmapattribute.cxx b/drawinglayer/source/attribute/fillbitmapattribute.cxx index b3151785f75f..e2bedb47d7e3 100644 --- a/drawinglayer/source/attribute/fillbitmapattribute.cxx +++ b/drawinglayer/source/attribute/fillbitmapattribute.cxx @@ -29,9 +29,6 @@ namespace drawinglayer class ImpFillBitmapAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // data definitions BitmapEx maBitmapEx; basegfx::B2DPoint maTopLeft; @@ -45,14 +42,21 @@ namespace drawinglayer const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize, bool bTiling) - : mnRefCount(0), - maBitmapEx(rBitmapEx), + : maBitmapEx(rBitmapEx), maTopLeft(rTopLeft), maSize(rSize), mbTiling(bTiling) { } + ImpFillBitmapAttribute() + : maBitmapEx(BitmapEx()), + maTopLeft(basegfx::B2DPoint()), + maSize(basegfx::B2DVector()), + mbTiling(false) + { + } + bool operator==(const ImpFillBitmapAttribute& rCandidate) const { return (maBitmapEx == rCandidate.maBitmapEx @@ -66,33 +70,20 @@ namespace drawinglayer const basegfx::B2DPoint& getTopLeft() const { return maTopLeft; } const basegfx::B2DVector& getSize() const { return maSize; } bool getTiling() const { return mbTiling; } - - static ImpFillBitmapAttribute* get_global_default() - { - static ImpFillBitmapAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpFillBitmapAttribute( - BitmapEx(), - basegfx::B2DPoint(), - basegfx::B2DVector(), - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } }; + namespace + { + struct theGlobalDefault : + public rtl::Static< FillBitmapAttribute::ImplType, theGlobalDefault > {}; + } + FillBitmapAttribute::FillBitmapAttribute( const BitmapEx& rBitmapEx, const basegfx::B2DPoint& rTopLeft, const basegfx::B2DVector& rSize, bool bTiling) - : mpFillBitmapAttribute(new ImpFillBitmapAttribute( + : mpFillBitmapAttribute(ImpFillBitmapAttribute( rBitmapEx, rTopLeft, rSize, bTiling)) { } @@ -100,59 +91,26 @@ namespace drawinglayer FillBitmapAttribute::FillBitmapAttribute(const FillBitmapAttribute& rCandidate) : mpFillBitmapAttribute(rCandidate.mpFillBitmapAttribute) { - mpFillBitmapAttribute->mnRefCount++; } FillBitmapAttribute::~FillBitmapAttribute() { - if(mpFillBitmapAttribute->mnRefCount) - { - mpFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpFillBitmapAttribute; - } } bool FillBitmapAttribute::isDefault() const { - return mpFillBitmapAttribute == ImpFillBitmapAttribute::get_global_default(); + return mpFillBitmapAttribute.same_object(theGlobalDefault::get()); } FillBitmapAttribute& FillBitmapAttribute::operator=(const FillBitmapAttribute& rCandidate) { - if(rCandidate.mpFillBitmapAttribute != mpFillBitmapAttribute) - { - if(mpFillBitmapAttribute->mnRefCount) - { - mpFillBitmapAttribute->mnRefCount--; - } - else - { - delete mpFillBitmapAttribute; - } - - mpFillBitmapAttribute = rCandidate.mpFillBitmapAttribute; - mpFillBitmapAttribute->mnRefCount++; - } - + mpFillBitmapAttribute = rCandidate.mpFillBitmapAttribute; return *this; } bool FillBitmapAttribute::operator==(const FillBitmapAttribute& rCandidate) const { - if(rCandidate.mpFillBitmapAttribute == mpFillBitmapAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpFillBitmapAttribute == *mpFillBitmapAttribute); + return rCandidate.mpFillBitmapAttribute == mpFillBitmapAttribute; } const BitmapEx& FillBitmapAttribute::getBitmapEx() const -- cgit