From 4e188ae252322485c54b4c3a6c081bde2f966a9f Mon Sep 17 00:00:00 2001 From: Thomas Arnhold Date: Tue, 2 Apr 2013 14:46:32 +0200 Subject: fdo#62525: use cow_wrapper for LineStartEndAttribute Change-Id: Id8803574245298c6d15b3c59bbfd3b7c812b5794 --- .../source/attribute/linestartendattribute.cxx | 82 ++++++---------------- 1 file changed, 20 insertions(+), 62 deletions(-) (limited to 'drawinglayer/source/attribute') diff --git a/drawinglayer/source/attribute/linestartendattribute.cxx b/drawinglayer/source/attribute/linestartendattribute.cxx index e1208ff7a73e..0e3936157c08 100644 --- a/drawinglayer/source/attribute/linestartendattribute.cxx +++ b/drawinglayer/source/attribute/linestartendattribute.cxx @@ -20,6 +20,7 @@ #include #include #include +#include ////////////////////////////////////////////////////////////////////////////// @@ -30,9 +31,6 @@ namespace drawinglayer class ImpLineStartEndAttribute { public: - // refcounter - sal_uInt32 mnRefCount; - // data definitions double mfWidth; // absolute line StartEndGeometry base width basegfx::B2DPolyPolygon maPolyPolygon; // the StartEndGeometry PolyPolygon @@ -44,13 +42,19 @@ namespace drawinglayer double fWidth, const basegfx::B2DPolyPolygon& rPolyPolygon, bool bCentered) - : mnRefCount(0), - mfWidth(fWidth), + : mfWidth(fWidth), maPolyPolygon(rPolyPolygon), mbCentered(bCentered) { } + ImpLineStartEndAttribute() + : mfWidth(0.0), + maPolyPolygon(basegfx::B2DPolyPolygon()), + mbCentered(false) + { + } + // data read access double getWidth() const { return mfWidth; } const basegfx::B2DPolyPolygon& getB2DPolyPolygon() const { return maPolyPolygon; } @@ -62,97 +66,51 @@ namespace drawinglayer && getB2DPolyPolygon() == rCandidate.getB2DPolyPolygon() && isCentered() == rCandidate.isCentered()); } - - static ImpLineStartEndAttribute* get_global_default() - { - static ImpLineStartEndAttribute* pDefault = 0; - - if(!pDefault) - { - pDefault = new ImpLineStartEndAttribute( - 0.0, - basegfx::B2DPolyPolygon(), - false); - - // never delete; start with RefCount 1, not 0 - pDefault->mnRefCount++; - } - - return pDefault; - } }; + namespace + { + struct theGlobalDefault : + public rtl::Static< LineStartEndAttribute::ImplType, theGlobalDefault > {}; + } + LineStartEndAttribute::LineStartEndAttribute( double fWidth, const basegfx::B2DPolyPolygon& rPolyPolygon, bool bCentered) - : mpLineStartEndAttribute(new ImpLineStartEndAttribute( + : mpLineStartEndAttribute(ImpLineStartEndAttribute( fWidth, rPolyPolygon, bCentered)) { } LineStartEndAttribute::LineStartEndAttribute() - : mpLineStartEndAttribute(ImpLineStartEndAttribute::get_global_default()) + : mpLineStartEndAttribute(theGlobalDefault::get()) { - mpLineStartEndAttribute->mnRefCount++; } LineStartEndAttribute::LineStartEndAttribute(const LineStartEndAttribute& rCandidate) : mpLineStartEndAttribute(rCandidate.mpLineStartEndAttribute) { - mpLineStartEndAttribute->mnRefCount++; } LineStartEndAttribute::~LineStartEndAttribute() { - if(mpLineStartEndAttribute->mnRefCount) - { - mpLineStartEndAttribute->mnRefCount--; - } - else - { - delete mpLineStartEndAttribute; - } } bool LineStartEndAttribute::isDefault() const { - return mpLineStartEndAttribute == ImpLineStartEndAttribute::get_global_default(); + return mpLineStartEndAttribute.same_object(theGlobalDefault::get()); } LineStartEndAttribute& LineStartEndAttribute::operator=(const LineStartEndAttribute& rCandidate) { - if(rCandidate.mpLineStartEndAttribute != mpLineStartEndAttribute) - { - if(mpLineStartEndAttribute->mnRefCount) - { - mpLineStartEndAttribute->mnRefCount--; - } - else - { - delete mpLineStartEndAttribute; - } - - mpLineStartEndAttribute = rCandidate.mpLineStartEndAttribute; - mpLineStartEndAttribute->mnRefCount++; - } - + mpLineStartEndAttribute = rCandidate.mpLineStartEndAttribute; return *this; } bool LineStartEndAttribute::operator==(const LineStartEndAttribute& rCandidate) const { - if(rCandidate.mpLineStartEndAttribute == mpLineStartEndAttribute) - { - return true; - } - - if(rCandidate.isDefault() != isDefault()) - { - return false; - } - - return (*rCandidate.mpLineStartEndAttribute == *mpLineStartEndAttribute); + return rCandidate.mpLineStartEndAttribute == mpLineStartEndAttribute; } double LineStartEndAttribute::getWidth() const -- cgit stro/lhm/libreoffice-7-2+backports LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author