Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/2948 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/48/2948/1 fdo#62525: use cow_wrapper for FillBitmapAttribute Change-Id: I0f666d4baaf6dc4e9f7ea30a518a8904f01d749f --- M drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx M drawinglayer/source/attribute/fillbitmapattribute.cxx 2 files changed, 24 insertions(+), 62 deletions(-) diff --git a/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx b/drawinglayer/inc/drawinglayer/attribute/fillbitmapattribute.hxx index ced46b3..851dc5e 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 <drawinglayer/drawinglayerdllapi.h> +#include <o3tl/cow_wrapper.hxx> ////////////////////////////////////////////////////////////////////////////// // predefines @@ -44,8 +45,11 @@ { 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 b315178..e2bedb4 100644 --- a/drawinglayer/source/attribute/fillbitmapattribute.cxx +++ b/drawinglayer/source/attribute/fillbitmapattribute.cxx @@ -29,9 +29,6 @@ class ImpFillBitmapAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // data definitions BitmapEx maBitmapEx; basegfx::B2DPoint maTopLeft; @@ -45,11 +42,18 @@ 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) { } @@ -66,33 +70,20 @@ 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 @@ 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 -- To view, visit https://gerrit.libreoffice.org/2948 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0f666d4baaf6dc4e9f7ea30a518a8904f01d749f Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: master Gerrit-Owner: Thomas Arnhold <tho...@arnhold.org> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice