From 4dc40659044566280c202e26cab97d682ae6ab54 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 17 Aug 2021 11:38:31 +0200 Subject: rtl::Static -> thread-safe static local Change-Id: I9f8fe250813f4f376dc46c6f3d7e25e90fdbb50e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120566 Tested-by: Jenkins Reviewed-by: Noel Grandin --- basic/source/basmgr/vbahelper.cxx | 7 +- basic/source/classes/global.cxx | 5 +- basic/source/classes/sb.cxx | 19 ++-- basic/source/classes/sbunoobj.cxx | 14 +-- basic/source/comp/token.cxx | 7 +- basic/source/runtime/runtime.cxx | 19 ++-- bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx | 6 +- canvas/source/cairo/cairo_canvashelper.cxx | 21 ++-- canvas/source/cairo/cairo_devicehelper.cxx | 15 +-- canvas/source/tools/canvastools.cxx | 24 +--- canvas/source/vcl/devicehelper.cxx | 18 +-- .../model/template/StockChartTypeTemplate.cxx | 80 +++++--------- chart2/source/tools/RegressionCurveModel.cxx | 62 ++++------- chart2/source/tools/RegressionEquation.cxx | 122 ++++++++------------- 14 files changed, 152 insertions(+), 267 deletions(-) diff --git a/basic/source/basmgr/vbahelper.cxx b/basic/source/basmgr/vbahelper.cxx index 83165374a8f1..7fa101a8259e 100644 --- a/basic/source/basmgr/vbahelper.cxx +++ b/basic/source/basmgr/vbahelper.cxx @@ -27,7 +27,6 @@ #include #include #include -#include namespace basic::vba { @@ -145,8 +144,6 @@ struct CurrDirPool std::map< OUString, OUString > maCurrDirs; }; -struct StaticCurrDirPool : public ::rtl::Static< CurrDirPool, StaticCurrDirPool > {}; - } // namespace @@ -167,7 +164,9 @@ void registerCurrentDirectory( const uno::Reference< frame::XModel >& rxModel, c if( rPath.isEmpty() ) return; - CurrDirPool& rPool = StaticCurrDirPool::get(); + static CurrDirPool StaticCurrDirPool; + + CurrDirPool& rPool = StaticCurrDirPool; ::osl::MutexGuard aGuard( rPool.maMutex ); try { diff --git a/basic/source/classes/global.cxx b/basic/source/classes/global.cxx index 1e72e242d94b..d2e3622b4d6f 100644 --- a/basic/source/classes/global.cxx +++ b/basic/source/classes/global.cxx @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -35,12 +34,12 @@ namespace utl::TransliterationWrapper& getTransliteration() { return m_aTransliteration; } }; - class theTransliterationWrapper : public rtl::Static {}; } utl::TransliterationWrapper& SbGlobal::GetTransliteration() { - return theTransliterationWrapper::get().getTransliteration(); + static lclTransliterationWrapper theTransliterationWrapper; + return theTransliterationWrapper.getTransliteration(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx index e4ee5b508451..f0ab981d62a5 100644 --- a/basic/source/classes/sb.cxx +++ b/basic/source/classes/sb.cxx @@ -177,31 +177,31 @@ namespace { typedef ::rtl::Reference< DocBasicItem > DocBasicItemRef; -class GaDocBasicItems : public rtl::Static,GaDocBasicItems> {}; +std::unordered_map< const StarBASIC *, DocBasicItemRef > gaDocBasicItems; const DocBasicItem* lclFindDocBasicItem( const StarBASIC* pDocBasic ) { - auto it = GaDocBasicItems::get().find( pDocBasic ); - auto end = GaDocBasicItems::get().end(); + auto it = gaDocBasicItems.find( pDocBasic ); + auto end = gaDocBasicItems.end(); return (it != end) ? it->second.get() : nullptr; } void lclInsertDocBasicItem( StarBASIC& rDocBasic ) { - DocBasicItemRef& rxDocBasicItem = GaDocBasicItems::get()[ &rDocBasic ]; + DocBasicItemRef& rxDocBasicItem = gaDocBasicItems[ &rDocBasic ]; rxDocBasicItem.set( new DocBasicItem( rDocBasic ) ); rxDocBasicItem->startListening(); } void lclRemoveDocBasicItem( StarBASIC& rDocBasic ) { - auto it = GaDocBasicItems::get().find( &rDocBasic ); - if( it != GaDocBasicItems::get().end() ) + auto it = gaDocBasicItems.find( &rDocBasic ); + if( it != gaDocBasicItems.end() ) { it->second->stopListening(); - GaDocBasicItems::get().erase( it ); + gaDocBasicItems.erase( it ); } - for( auto& rEntry : GaDocBasicItems::get() ) + for( auto& rEntry : gaDocBasicItems ) { rEntry.second->clearDependingVarsOnDelete( rDocBasic ); } @@ -1914,8 +1914,7 @@ Reference< frame::XModel > StarBASIC::GetModelFromBasic( SbxObject* pBasic ) void StarBASIC::DetachAllDocBasicItems() { - std::unordered_map< const StarBASIC *, DocBasicItemRef >& rItems = GaDocBasicItems::get(); - for (auto const& item : rItems) + for (auto const& item : gaDocBasicItems) { DocBasicItemRef xItem = item.second; xItem->setDisposed(true); diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx index edf112eca9e3..4131980848ba 100644 --- a/basic/source/classes/sbunoobj.cxx +++ b/basic/source/classes/sbunoobj.cxx @@ -449,30 +449,28 @@ typedef std::vector< ObjectItem > NativeObjectWrapperVector; namespace { -class GaNativeObjectWrapperVector : public rtl::Static {}; +NativeObjectWrapperVector gaNativeObjectWrapperVector; } void clearNativeObjectWrapperVector() { - GaNativeObjectWrapperVector::get().clear(); + gaNativeObjectWrapperVector.clear(); } static sal_uInt32 lcl_registerNativeObjectWrapper( SbxObject* pNativeObj ) { - NativeObjectWrapperVector &rNativeObjectWrapperVector = GaNativeObjectWrapperVector::get(); - sal_uInt32 nIndex = rNativeObjectWrapperVector.size(); - rNativeObjectWrapperVector.emplace_back( pNativeObj ); + sal_uInt32 nIndex = gaNativeObjectWrapperVector.size(); + gaNativeObjectWrapperVector.emplace_back( pNativeObj ); return nIndex; } static SbxObject* lcl_getNativeObject( sal_uInt32 nIndex ) { SbxObjectRef xRetObj; - NativeObjectWrapperVector &rNativeObjectWrapperVector = GaNativeObjectWrapperVector::get(); - if( nIndex < rNativeObjectWrapperVector.size() ) + if( nIndex < gaNativeObjectWrapperVector.size() ) { - ObjectItem& rItem = rNativeObjectWrapperVector[ nIndex ]; + ObjectItem& rItem = gaNativeObjectWrapperVector[ nIndex ]; xRetObj = rItem.m_xNativeObj; } return xRetObj.get(); diff --git a/basic/source/comp/token.cxx b/basic/source/comp/token.cxx index bf47a1b2aaa8..9be47bf41ba1 100644 --- a/basic/source/comp/token.cxx +++ b/basic/source/comp/token.cxx @@ -21,7 +21,6 @@ #include #include -#include #include #include #include @@ -192,8 +191,6 @@ public: { return m_pTokenCanBeLabelTab[eTok]; } }; -class StaticTokenLabelInfo: public ::rtl::Static< TokenLabelInfo, StaticTokenLabelInfo >{}; - } // #i109076 @@ -546,7 +543,9 @@ special: bool SbiTokenizer::MayBeLabel( bool bNeedsColon ) { - if( eCurTok == SYMBOL || StaticTokenLabelInfo::get().canTokenBeLabel( eCurTok ) ) + static TokenLabelInfo gaStaticTokenLabelInfo; + + if( eCurTok == SYMBOL || gaStaticTokenLabelInfo.canTokenBeLabel( eCurTok ) ) { return !bNeedsColon || DoesColonFollow(); } diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx index e88065225793..b100e93cac20 100644 --- a/basic/source/runtime/runtime.cxx +++ b/basic/source/runtime/runtime.cxx @@ -1769,17 +1769,16 @@ typedef std::unordered_map< SbxVariable*, DimAsNewRecoverItem, namespace { -class GaDimAsNewRecoverHash : public rtl::Static {}; +DimAsNewRecoverHash gaDimAsNewRecoverHash; } void removeDimAsNewRecoverItem( SbxVariable* pVar ) { - DimAsNewRecoverHash &rDimAsNewRecoverHash = GaDimAsNewRecoverHash::get(); - DimAsNewRecoverHash::iterator it = rDimAsNewRecoverHash.find( pVar ); - if( it != rDimAsNewRecoverHash.end() ) + DimAsNewRecoverHash::iterator it = gaDimAsNewRecoverHash.find( pVar ); + if( it != gaDimAsNewRecoverHash.end() ) { - rDimAsNewRecoverHash.erase( it ); + gaDimAsNewRecoverHash.erase( it ); } } @@ -1950,9 +1949,8 @@ void SbiRuntime::StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, b if( xPrevVarObj.is() ) { // Object is overwritten with NULL, instantiate init object - DimAsNewRecoverHash &rDimAsNewRecoverHash = GaDimAsNewRecoverHash::get(); - DimAsNewRecoverHash::iterator it = rDimAsNewRecoverHash.find( refVar.get() ); - if( it != rDimAsNewRecoverHash.end() ) + DimAsNewRecoverHash::iterator it = gaDimAsNewRecoverHash.find( refVar.get() ); + if( it != gaDimAsNewRecoverHash.end() ) { const DimAsNewRecoverItem& rItem = it->second; if( rItem.m_pClassModule != nullptr ) @@ -1985,16 +1983,15 @@ void SbiRuntime::StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, b OUString aObjClass = pValObj->GetClassName(); SbClassModuleObject* pClassModuleObj = dynamic_cast( pValObjBase ); - DimAsNewRecoverHash &rDimAsNewRecoverHash = GaDimAsNewRecoverHash::get(); if( pClassModuleObj != nullptr ) { SbModule* pClassModule = pClassModuleObj->getClassModule(); - rDimAsNewRecoverHash[refVar.get()] = + gaDimAsNewRecoverHash[refVar.get()] = DimAsNewRecoverItem( aObjClass, pValObj->GetName(), pValObj->GetParent(), pClassModule ); } else if( aObjClass.equalsIgnoreAsciiCase( "Collection" ) ) { - rDimAsNewRecoverHash[refVar.get()] = + gaDimAsNewRecoverHash[refVar.get()] = DimAsNewRecoverItem( aObjClass, pValObj->GetName(), pValObj->GetParent(), nullptr ); } } diff --git a/bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx b/bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx index 322656c126e5..d72295039282 100644 --- a/bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx +++ b/bridges/source/cpp_uno/gcc3_linux_x86-64/rtti.cxx @@ -29,7 +29,6 @@ #include #include -#include #include #include #include @@ -265,12 +264,11 @@ std::type_info * RTTI::getRTTI(typelib_TypeDescription const & pTypeDescr) return rtti; } -struct theRttiFactory: public rtl::Static {}; - } std::type_info * x86_64::getRtti(typelib_TypeDescription const & type) { - return theRttiFactory::get().getRTTI(type); + static RTTI theRttiFactory; + return theRttiFactory.getRTTI(type); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx index 7805da9bb56d..32124af830f9 100644 --- a/canvas/source/cairo/cairo_canvashelper.cxx +++ b/canvas/source/cairo/cairo_canvashelper.cxx @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -1973,22 +1972,16 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: } }; - struct CairoNoAlphaColorSpaceHolder : public rtl::StaticWithInit, - CairoNoAlphaColorSpaceHolder> + uno::Reference& GetCairoNoAlphaColorSpace() { - uno::Reference operator()() - { - return new CairoNoAlphaColorSpace(); - } + static uno::Reference SPACE = new CairoNoAlphaColorSpace(); + return SPACE; }; - struct CairoColorSpaceHolder : public rtl::StaticWithInit, - CairoColorSpaceHolder> + uno::Reference& GetCairoColorSpace() { - uno::Reference operator()() - { - return new CairoColorSpace(); - } + static uno::Reference SPACE = new CairoColorSpace(); + return SPACE; }; } @@ -2012,7 +2005,7 @@ constexpr OUStringLiteral PARAMETRICPOLYPOLYGON_IMPLEMENTATION_NAME = u"Canvas:: aLayout.ScanLineBytes = nWidth*4; aLayout.ScanLineStride = aLayout.ScanLineBytes; aLayout.PlaneStride = 0; - aLayout.ColorSpace = mbHaveAlpha ? CairoColorSpaceHolder::get() : CairoNoAlphaColorSpaceHolder::get(); + aLayout.ColorSpace = mbHaveAlpha ? GetCairoColorSpace() : GetCairoNoAlphaColorSpace(); aLayout.Palette.clear(); aLayout.IsMsbFirst = false; diff --git a/canvas/source/cairo/cairo_devicehelper.cxx b/canvas/source/cairo/cairo_devicehelper.cxx index e802e79cc2dd..1c44b4225560 100644 --- a/canvas/source/cairo/cairo_devicehelper.cxx +++ b/canvas/source/cairo/cairo_devicehelper.cxx @@ -210,22 +210,11 @@ namespace cairocanvas return uno::Any(); } - namespace - { - struct DeviceColorSpace: public rtl::StaticWithInit, - DeviceColorSpace> - { - uno::Reference operator()() - { - return vcl::unotools::createStandardColorSpace(); - } - }; - } - uno::Reference const & DeviceHelper::getColorSpace() const { + static uno::Reference SPACE = vcl::unotools::createStandardColorSpace(); // always the same - return DeviceColorSpace::get(); + return SPACE; } void DeviceHelper::dumpScreenContent() const diff --git a/canvas/source/tools/canvastools.cxx b/canvas/source/tools/canvastools.cxx index 02af4bb333db..b9b6190df18d 100644 --- a/canvas/source/tools/canvastools.cxx +++ b/canvas/source/tools/canvastools.cxx @@ -51,7 +51,6 @@ #include #include #include -#include #include #include #include @@ -843,33 +842,18 @@ namespace canvas::tools } }; - struct StandardColorSpaceHolder : public rtl::StaticWithInit, - StandardColorSpaceHolder> - { - uno::Reference operator()() - { - return new StandardColorSpace(); - } - }; - - struct StandardNoAlphaColorSpaceHolder : public rtl::StaticWithInit, - StandardNoAlphaColorSpaceHolder> - { - uno::Reference operator()() - { - return new StandardNoAlphaColorSpace(); - } - }; } uno::Reference const & getStdColorSpace() { - return StandardColorSpaceHolder::get(); + static uno::Reference SPACE = new StandardColorSpace(); + return SPACE; } uno::Reference const & getStdColorSpaceWithoutAlpha() { - return StandardNoAlphaColorSpaceHolder::get(); + static uno::Reference SPACE = new StandardNoAlphaColorSpace(); + return SPACE; } rendering::IntegerBitmapLayout getStdMemoryLayout( const geometry::IntegerSize2D& rBmpSize ) diff --git a/canvas/source/vcl/devicehelper.cxx b/canvas/source/vcl/devicehelper.cxx index b9d4138aade1..a16ede0f5236 100644 --- a/canvas/source/vcl/devicehelper.cxx +++ b/canvas/source/vcl/devicehelper.cxx @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -174,22 +173,23 @@ namespace vclcanvas namespace { - struct DeviceColorSpace: public rtl::StaticWithInit, - DeviceColorSpace> + uno::Reference& GetDeviceColorSpace() { - uno::Reference operator()() + static uno::Reference xColorSpace = + []() { - uno::Reference< rendering::XColorSpace > xColorSpace = canvas::tools::getStdColorSpace(); - assert( xColorSpace.is() ); - return xColorSpace; - } + auto xTmp = canvas::tools::getStdColorSpace(); + assert( xTmp.is() ); + return xTmp; + }(); + return xColorSpace; }; } uno::Reference const & DeviceHelper::getColorSpace() const { // always the same - return DeviceColorSpace::get(); + return GetDeviceColorSpace(); } void DeviceHelper::dumpScreenContent() const diff --git a/chart2/source/model/template/StockChartTypeTemplate.cxx b/chart2/source/model/template/StockChartTypeTemplate.cxx index 7eb0e1ca51da..464325ef10d1 100644 --- a/chart2/source/model/template/StockChartTypeTemplate.cxx +++ b/chart2/source/model/template/StockChartTypeTemplate.cxx @@ -78,65 +78,41 @@ void lcl_AddPropertiesToVector( | beans::PropertyAttribute::MAYBEDEFAULT ); } -struct StaticStockChartTypeTemplateDefaults_Initializer -{ - ::chart::tPropertyValueMap* operator()() - { - static ::chart::tPropertyValueMap aStaticDefaults; - lcl_AddDefaultsToMap( aStaticDefaults ); - return &aStaticDefaults; - } -private: - static void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) - { - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_STOCKCHARTTYPE_TEMPLATE_VOLUME, false ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_STOCKCHARTTYPE_TEMPLATE_OPEN, false ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_STOCKCHARTTYPE_TEMPLATE_LOW_HIGH, true ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_STOCKCHARTTYPE_TEMPLATE_JAPANESE, false ); - } -}; - -struct StaticStockChartTypeTemplateDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticStockChartTypeTemplateDefaults_Initializer > +::chart::tPropertyValueMap& GetStaticStockChartTypeTemplateDefaults() { + static ::chart::tPropertyValueMap aStaticDefaults = + [](){ + ::chart::tPropertyValueMap aTmp; + ::chart::PropertyHelper::setPropertyValueDefault( aTmp, PROP_STOCKCHARTTYPE_TEMPLATE_VOLUME, false ); + ::chart::PropertyHelper::setPropertyValueDefault( aTmp, PROP_STOCKCHARTTYPE_TEMPLATE_OPEN, false ); + ::chart::PropertyHelper::setPropertyValueDefault( aTmp, PROP_STOCKCHARTTYPE_TEMPLATE_LOW_HIGH, true ); + ::chart::PropertyHelper::setPropertyValueDefault( aTmp, PROP_STOCKCHARTTYPE_TEMPLATE_JAPANESE, false ); + return aTmp; + }(); + return aStaticDefaults; }; -struct StaticStockChartTypeTemplateInfoHelper_Initializer +::cppu::OPropertyArrayHelper& GetStaticStockChartTypeTemplateInfoHelper() { - ::cppu::OPropertyArrayHelper* operator()() - { - static ::cppu::OPropertyArrayHelper aPropHelper( lcl_GetPropertySequence() ); - return &aPropHelper; - } + static ::cppu::OPropertyArrayHelper aPropHelper = + [](){ + std::vector< css::beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); -private: - static Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticStockChartTypeTemplateInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticStockChartTypeTemplateInfoHelper_Initializer > -{ + return comphelper::containerToSequence( aProperties ); + }(); + return aPropHelper; }; -struct StaticStockChartTypeTemplateInfo_Initializer -{ - uno::Reference< beans::XPropertySetInfo >* operator()() - { - static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( - ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticStockChartTypeTemplateInfoHelper::get() ) ); - return &xPropertySetInfo; - } -}; -struct StaticStockChartTypeTemplateInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticStockChartTypeTemplateInfo_Initializer > +uno::Reference< beans::XPropertySetInfo >& GetStaticStockChartTypeTemplateInfo() { + static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( + ::cppu::OPropertySetHelper::createPropertySetInfo(GetStaticStockChartTypeTemplateInfoHelper() ) ); + return xPropertySetInfo; }; } // anonymous namespace @@ -172,7 +148,7 @@ StockChartTypeTemplate::~StockChartTypeTemplate() // ____ OPropertySet ____ uno::Any StockChartTypeTemplate::GetDefaultValue( sal_Int32 nHandle ) const { - const tPropertyValueMap& rStaticDefaults = *StaticStockChartTypeTemplateDefaults::get(); + const tPropertyValueMap& rStaticDefaults = GetStaticStockChartTypeTemplateDefaults(); tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( nHandle ) ); if( aFound == rStaticDefaults.end() ) return uno::Any(); @@ -181,13 +157,13 @@ uno::Any StockChartTypeTemplate::GetDefaultValue( sal_Int32 nHandle ) const ::cppu::IPropertyArrayHelper & SAL_CALL StockChartTypeTemplate::getInfoHelper() { - return *StaticStockChartTypeTemplateInfoHelper::get(); + return GetStaticStockChartTypeTemplateInfoHelper(); } // ____ XPropertySet ____ uno::Reference< beans::XPropertySetInfo > SAL_CALL StockChartTypeTemplate::getPropertySetInfo() { - return *StaticStockChartTypeTemplateInfo::get(); + return GetStaticStockChartTypeTemplateInfo(); } sal_Int32 StockChartTypeTemplate::getAxisCountByDimension( sal_Int32 nDimension ) diff --git a/chart2/source/tools/RegressionCurveModel.cxx b/chart2/source/tools/RegressionCurveModel.cxx index 0fb7662830af..03ff810fe1ef 100644 --- a/chart2/source/tools/RegressionCurveModel.cxx +++ b/chart2/source/tools/RegressionCurveModel.cxx @@ -99,31 +99,21 @@ void lcl_AddPropertiesToVector( beans::PropertyAttribute::BOUND ); } -struct StaticXXXDefaults_Initializer -{ - ::chart::tPropertyValueMap* operator()() - { - static ::chart::tPropertyValueMap aStaticDefaults; - ::chart::LinePropertiesHelper::AddDefaultsToMap( aStaticDefaults ); - return &aStaticDefaults; - } -}; - -struct StaticXXXDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticXXXDefaults_Initializer > -{ +::chart::tPropertyValueMap GetStaticXXXDefaults() +{ + static ::chart::tPropertyValueMap aStaticDefaults = + [](){ + ::chart::tPropertyValueMap aTmp; + ::chart::LinePropertiesHelper::AddDefaultsToMap( aTmp ); + return aTmp; + }(); + return aStaticDefaults; }; -struct StaticRegressionCurveInfoHelper_Initializer +::cppu::OPropertyArrayHelper& GetStaticRegressionCurveInfoHelper() { - ::cppu::OPropertyArrayHelper* operator()() - { - static ::cppu::OPropertyArrayHelper aPropHelper( lcl_GetPropertySequence() ); - return &aPropHelper; - } - -private: - static uno::Sequence< Property > lcl_GetPropertySequence() - { + static ::cppu::OPropertyArrayHelper aPropHelper = + [](){ std::vector< css::beans::Property > aProperties; lcl_AddPropertiesToVector( aProperties ); ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); @@ -132,25 +122,15 @@ private: ::chart::PropertyNameLess() ); return comphelper::containerToSequence( aProperties ); - } -}; - -struct StaticRegressionCurveInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticRegressionCurveInfoHelper_Initializer > -{ -}; - -struct StaticRegressionCurveInfo_Initializer -{ - uno::Reference< beans::XPropertySetInfo >* operator()() - { - static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( - ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticRegressionCurveInfoHelper::get() ) ); - return &xPropertySetInfo; - } + }(); + return aPropHelper; }; -struct StaticRegressionCurveInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticRegressionCurveInfo_Initializer > +uno::Reference< beans::XPropertySetInfo >& GetStaticRegressionCurveInfo() { + static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( + ::cppu::OPropertySetHelper::createPropertySetInfo(GetStaticRegressionCurveInfoHelper() ) ); + return xPropertySetInfo; }; } // anonymous namespace @@ -286,7 +266,7 @@ void RegressionCurveModel::fireModifyEvent() // ____ OPropertySet ____ uno::Any RegressionCurveModel::GetDefaultValue( sal_Int32 nHandle ) const { - const tPropertyValueMap& rStaticDefaults = *StaticXXXDefaults::get(); + const tPropertyValueMap& rStaticDefaults = GetStaticXXXDefaults(); tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( nHandle ) ); if( aFound == rStaticDefaults.end() ) return uno::Any(); @@ -295,13 +275,13 @@ uno::Any RegressionCurveModel::GetDefaultValue( sal_Int32 nHandle ) const ::cppu::IPropertyArrayHelper & SAL_CALL RegressionCurveModel::getInfoHelper() { - return *StaticRegressionCurveInfoHelper::get(); + return GetStaticRegressionCurveInfoHelper(); } // ____ XPropertySet ____ uno::Reference< beans::XPropertySetInfo > SAL_CALL RegressionCurveModel::getPropertySetInfo() { - return *StaticRegressionCurveInfo::get(); + return GetStaticRegressionCurveInfo(); } // needed by MSC compiler diff --git a/chart2/source/tools/RegressionEquation.cxx b/chart2/source/tools/RegressionEquation.cxx index 1c46dc69f054..021ad686af6f 100644 --- a/chart2/source/tools/RegressionEquation.cxx +++ b/chart2/source/tools/RegressionEquation.cxx @@ -105,84 +105,58 @@ void lcl_AddPropertiesToVector( | beans::PropertyAttribute::MAYBEVOID ); } -struct StaticRegressionEquationDefaults_Initializer -{ - ::chart::tPropertyValueMap* operator()() - { - static ::chart::tPropertyValueMap aStaticDefaults; - lcl_AddDefaultsToMap( aStaticDefaults ); - return &aStaticDefaults; - } -private: - static void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) - { - ::chart::LinePropertiesHelper::AddDefaultsToMap( rOutMap ); - ::chart::FillProperties::AddDefaultsToMap( rOutMap ); - ::chart::CharacterProperties::AddDefaultsToMap( rOutMap ); - - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_SHOW, false ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_XNAME, OUString("x") ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_YNAME, OUString("f(x)") ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_SHOW_CORRELATION_COEFF, false ); - //::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_EQUATION_SEPARATOR, OUString( '\n' )); - - // override other defaults - ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::FillProperties::PROP_FILL_STYLE, drawing::FillStyle_NONE ); - ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::LinePropertiesHelper::PROP_LINE_STYLE, drawing::LineStyle_NONE ); - - float fDefaultCharHeight = 10.0; - ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::CharacterProperties::PROP_CHAR_CHAR_HEIGHT, fDefaultCharHeight ); - ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::CharacterProperties::PROP_CHAR_ASIAN_CHAR_HEIGHT, fDefaultCharHeight ); - ::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::CharacterProperties::PROP_CHAR_COMPLEX_CHAR_HEIGHT, fDefaultCharHeight ); - } -}; - -struct StaticRegressionEquationDefaults : public rtl::StaticAggregate< ::chart::tPropertyValueMap, StaticRegressionEquationDefaults_Initializer > +::chart::tPropertyValueMap& GetStaticRegressionEquationDefaults() { + static ::chart::tPropertyValueMap aStaticDefaults = + [](){ + ::chart::tPropertyValueMap aOutMap; + ::chart::LinePropertiesHelper::AddDefaultsToMap( aOutMap ); + ::chart::FillProperties::AddDefaultsToMap( aOutMap ); + ::chart::CharacterProperties::AddDefaultsToMap( aOutMap ); + + ::chart::PropertyHelper::setPropertyValueDefault( aOutMap, PROP_EQUATION_SHOW, false ); + ::chart::PropertyHelper::setPropertyValueDefault( aOutMap, PROP_EQUATION_XNAME, OUString("x") ); + ::chart::PropertyHelper::setPropertyValueDefault( aOutMap, PROP_EQUATION_YNAME, OUString("f(x)") ); + ::chart::PropertyHelper::setPropertyValueDefault( aOutMap, PROP_EQUATION_SHOW_CORRELATION_COEFF, false ); + //::chart::PropertyHelper::setPropertyValueDefault( aOutMap, PROP_EQUATION_SEPARATOR, OUString( '\n' )); + + // override other defaults + ::chart::PropertyHelper::setPropertyValue( aOutMap, ::chart::FillProperties::PROP_FILL_STYLE, drawing::FillStyle_NONE ); + ::chart::PropertyHelper::setPropertyValue( aOutMap, ::chart::LinePropertiesHelper::PROP_LINE_STYLE, drawing::LineStyle_NONE ); + + float fDefaultCharHeight = 10.0; + ::chart::PropertyHelper::setPropertyValue( aOutMap, ::chart::CharacterProperties::PROP_CHAR_CHAR_HEIGHT, fDefaultCharHeight ); + ::chart::PropertyHelper::setPropertyValue( aOutMap, ::chart::CharacterProperties::PROP_CHAR_ASIAN_CHAR_HEIGHT, fDefaultCharHeight ); + ::chart::PropertyHelper::setPropertyValue( aOutMap, ::chart::CharacterProperties::PROP_CHAR_COMPLEX_CHAR_HEIGHT, fDefaultCharHeight ); + return aOutMap; + }(); + return aStaticDefaults; }; -struct StaticRegressionEquationInfoHelper_Initializer +::cppu::OPropertyArrayHelper& GetStaticRegressionEquationInfoHelper() { - ::cppu::OPropertyArrayHelper* operator()() - { - static ::cppu::OPropertyArrayHelper aPropHelper( lcl_GetPropertySequence() ); - return &aPropHelper; - } - -private: - static uno::Sequence< Property > lcl_GetPropertySequence() - { - std::vector< css::beans::Property > aProperties; - lcl_AddPropertiesToVector( aProperties ); - ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); - ::chart::FillProperties::AddPropertiesToVector( aProperties ); - ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); - ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); - - std::sort( aProperties.begin(), aProperties.end(), - ::chart::PropertyNameLess() ); - - return comphelper::containerToSequence( aProperties ); - } - -}; - -struct StaticRegressionEquationInfoHelper : public rtl::StaticAggregate< ::cppu::OPropertyArrayHelper, StaticRegressionEquationInfoHelper_Initializer > -{ -}; - -struct StaticRegressionEquationInfo_Initializer -{ - uno::Reference< beans::XPropertySetInfo >* operator()() - { - static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( - ::cppu::OPropertySetHelper::createPropertySetInfo(*StaticRegressionEquationInfoHelper::get() ) ); - return &xPropertySetInfo; - } + static ::cppu::OPropertyArrayHelper aPropHelper = + [](){ + std::vector< css::beans::Property > aProperties; + lcl_AddPropertiesToVector( aProperties ); + ::chart::LinePropertiesHelper::AddPropertiesToVector( aProperties ); + ::chart::FillProperties::AddPropertiesToVector( aProperties ); + ::chart::CharacterProperties::AddPropertiesToVector( aProperties ); + ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties ); + + std::sort( aProperties.begin(), aProperties.end(), + ::chart::PropertyNameLess() ); + + return comphelper::containerToSequence( aProperties ); + }(); + return aPropHelper; }; -struct StaticRegressionEquationInfo : public rtl::StaticAggregate< uno::Reference< beans::XPropertySetInfo >, StaticRegressionEquationInfo_Initializer > +const uno::Reference< beans::XPropertySetInfo > & GetStaticRegressionEquationInfo() { + static uno::Reference< beans::XPropertySetInfo > xPropertySetInfo( + ::cppu::OPropertySetHelper::createPropertySetInfo(GetStaticRegressionEquationInfoHelper()) ); + return xPropertySetInfo; }; } // anonymous namespace @@ -213,7 +187,7 @@ uno::Reference< util::XCloneable > SAL_CALL RegressionEquation::createClone() // ____ OPropertySet ____ uno::Any RegressionEquation::GetDefaultValue( sal_Int32 nHandle ) const { - const tPropertyValueMap& rStaticDefaults = *StaticRegressionEquationDefaults::get(); + const tPropertyValueMap& rStaticDefaults = GetStaticRegressionEquationDefaults(); tPropertyValueMap::const_iterator aFound( rStaticDefaults.find( nHandle ) ); if( aFound == rStaticDefaults.end() ) return uno::Any(); @@ -222,13 +196,13 @@ uno::Any RegressionEquation::GetDefaultValue( sal_Int32 nHandle ) const ::cppu::IPropertyArrayHelper & SAL_CALL RegressionEquation::getInfoHelper() { - return *StaticRegressionEquationInfoHelper::get(); + return GetStaticRegressionEquationInfoHelper(); } // ____ XPropertySet ____ Reference< beans::XPropertySetInfo > SAL_CALL RegressionEquation::getPropertySetInfo() { - return *StaticRegressionEquationInfo::get(); + return GetStaticRegressionEquationInfo(); } // ____ XModifyBroadcaster ____ -- cgit