summaryrefslogtreecommitdiff
path: root/unotools
diff options
context:
space:
mode:
authorXisco Fauli <anistenis@gmail.com>2016-06-15 20:06:45 +0200
committerNoel Grandin <noelgrandin@gmail.com>2016-06-18 09:24:56 +0000
commitc13f60e7cd18df6b0ab70289f5b91ee01e4ae126 (patch)
tree7b42adbca420d12d9f8985d63ca57912ce795fc9 /unotools
parent9db384d9947c8d0bb566160c50b34bc8f6a2cc72 (diff)
tdf#89329: use shared_ptr for pImpl in moduleoptions
Change-Id: I2dfcdde6ef1782edc22ca6d70d353549706eb14f Reviewed-on: https://gerrit.libreoffice.org/26322 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Diffstat (limited to 'unotools')
-rw-r--r--unotools/source/config/moduleoptions.cxx89
1 files changed, 38 insertions, 51 deletions
diff --git a/unotools/source/config/moduleoptions.cxx b/unotools/source/config/moduleoptions.cxx
index 47f742ea72da..fa9d97de00ba 100644
--- a/unotools/source/config/moduleoptions.cxx
+++ b/unotools/source/config/moduleoptions.cxx
@@ -263,16 +263,6 @@ struct FactoryInfo
css::uno::Reference< css::util::XStringSubstitution > xSubstVars;
};
-/*-************************************************************************************************************
- @short IMPL data container for wrapper class SvtModulOptions!
- @descr These class is used as a static data container of class SvtModuleOptions. The hold it by using
- a refcount and make it threadsafe by using an osl mutex. So we don't must do anything for that.
- We can implement pure functionality to read/write configuration data only.
- @base ConfigItem
-
- @devstatus ready to use
- @threadsafe no
-*//*-*************************************************************************************************************/
class SvtModuleOptions_Impl : public ::utl::ConfigItem
{
@@ -815,12 +805,10 @@ void SvtModuleOptions_Impl::MakeReadonlyStatesAvailable()
m_bReadOnlyStatesWellKnown = true;
}
-// initialize static member
-// DON'T DO IT IN YOUR HEADER!
-// see definition for further information
-
-SvtModuleOptions_Impl* SvtModuleOptions::m_pDataContainer = nullptr;
-sal_Int32 SvtModuleOptions::m_nRefCount = 0;
+namespace {
+ //global
+ std::weak_ptr<SvtModuleOptions_Impl> g_pModuleOptions;
+}
/*-************************************************************************************************************
@short standard constructor and destructor
@@ -832,25 +820,24 @@ sal_Int32 SvtModuleOptions::m_nRefCount = 0;
*//*-*************************************************************************************************************/
SvtModuleOptions::SvtModuleOptions()
{
+ // Global access, must be guarded (multithreading!)
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- ++m_nRefCount;
- if( m_nRefCount == 1 )
- {
- m_pDataContainer = new SvtModuleOptions_Impl();
+ m_pImpl = g_pModuleOptions.lock();
+ if( !m_pImpl )
+ {
+ m_pImpl = std::make_shared<SvtModuleOptions_Impl>();
+ g_pModuleOptions = m_pImpl;
ItemHolder1::holdConfigItem(E_MODULEOPTIONS);
}
}
SvtModuleOptions::~SvtModuleOptions()
{
+ // Global access, must be guarded (multithreading!)
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- --m_nRefCount;
- if( m_nRefCount == 0 )
- {
- delete m_pDataContainer;
- m_pDataContainer = nullptr;
- }
+
+ m_pImpl.reset();
}
/*-************************************************************************************************************
@@ -864,19 +851,19 @@ SvtModuleOptions::~SvtModuleOptions()
bool SvtModuleOptions::IsModuleInstalled( EModule eModule ) const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( eModule );
+ return m_pImpl->IsModuleInstalled( eModule );
}
OUString SvtModuleOptions::GetFactoryName( EFactory eFactory ) const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->GetFactoryName( eFactory );
+ return m_pImpl->GetFactoryName( eFactory );
}
OUString SvtModuleOptions::GetFactoryStandardTemplate( EFactory eFactory ) const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->GetFactoryStandardTemplate( eFactory );
+ return m_pImpl->GetFactoryStandardTemplate( eFactory );
}
OUString SvtModuleOptions::GetFactoryEmptyDocumentURL( EFactory eFactory ) const
@@ -888,20 +875,20 @@ OUString SvtModuleOptions::GetFactoryEmptyDocumentURL( EFactory eFactory ) const
OUString SvtModuleOptions::GetFactoryDefaultFilter( EFactory eFactory ) const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->GetFactoryDefaultFilter( eFactory );
+ return m_pImpl->GetFactoryDefaultFilter( eFactory );
}
bool SvtModuleOptions::IsDefaultFilterReadonly( EFactory eFactory ) const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- m_pDataContainer->MakeReadonlyStatesAvailable();
- return m_pDataContainer->IsDefaultFilterReadonly( eFactory );
+ m_pImpl->MakeReadonlyStatesAvailable();
+ return m_pImpl->IsDefaultFilterReadonly( eFactory );
}
sal_Int32 SvtModuleOptions::GetFactoryIcon( EFactory eFactory ) const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->GetFactoryIcon( eFactory );
+ return m_pImpl->GetFactoryIcon( eFactory );
}
bool SvtModuleOptions::ClassifyFactoryByName( const OUString& sName ,
@@ -915,56 +902,56 @@ void SvtModuleOptions::SetFactoryStandardTemplate( EFactory eFacto
const OUString& sTemplate )
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- m_pDataContainer->SetFactoryStandardTemplate( eFactory, sTemplate );
+ m_pImpl->SetFactoryStandardTemplate( eFactory, sTemplate );
}
void SvtModuleOptions::SetFactoryDefaultFilter( EFactory eFactory,
const OUString& sFilter )
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- m_pDataContainer->SetFactoryDefaultFilter( eFactory, sFilter );
+ m_pImpl->SetFactoryDefaultFilter( eFactory, sFilter );
}
bool SvtModuleOptions::IsMath() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::MATH );
+ return m_pImpl->IsModuleInstalled( EModule::MATH );
}
bool SvtModuleOptions::IsChart() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::CHART );
+ return m_pImpl->IsModuleInstalled( EModule::CHART );
}
bool SvtModuleOptions::IsCalc() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::CALC );
+ return m_pImpl->IsModuleInstalled( EModule::CALC );
}
bool SvtModuleOptions::IsDraw() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::DRAW );
+ return m_pImpl->IsModuleInstalled( EModule::DRAW );
}
bool SvtModuleOptions::IsWriter() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::WRITER );
+ return m_pImpl->IsModuleInstalled( EModule::WRITER );
}
bool SvtModuleOptions::IsImpress() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::IMPRESS );
+ return m_pImpl->IsModuleInstalled( EModule::IMPRESS );
}
bool SvtModuleOptions::IsDataBase() const
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->IsModuleInstalled( EModule::DATABASE );
+ return m_pImpl->IsModuleInstalled( EModule::DATABASE );
}
namespace
@@ -1157,27 +1144,27 @@ SvtModuleOptions::EFactory SvtModuleOptions::ClassifyFactoryByModel(const css::u
css::uno::Sequence < OUString > SvtModuleOptions::GetAllServiceNames()
{
::osl::MutexGuard aGuard( impl_GetOwnStaticMutex() );
- return m_pDataContainer->GetAllServiceNames();
+ return m_pImpl->GetAllServiceNames();
}
OUString SvtModuleOptions::GetDefaultModuleName()
{
OUString aModule;
- if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::WRITER))
+ if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::WRITER))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::WRITER);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::CALC))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::CALC))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::CALC);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::IMPRESS))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::IMPRESS))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::IMPRESS);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::DATABASE))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::DATABASE))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::DATABASE);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::DRAW))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::DRAW))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::DRAW);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::WEB))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::WEB))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::WRITERWEB);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::GLOBAL))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::GLOBAL))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::WRITERGLOBAL);
- else if (m_pDataContainer->IsModuleInstalled(SvtModuleOptions::EModule::MATH))
+ else if (m_pImpl->IsModuleInstalled(SvtModuleOptions::EModule::MATH))
aModule = GetFactoryShortName(SvtModuleOptions::EFactory::MATH);
return aModule;
}