summaryrefslogtreecommitdiff
path: root/sfx2/source/toolbox
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-06-01 09:18:51 +0100
committerCaolán McNamara <caolanm@redhat.com>2011-06-01 15:21:18 +0100
commit78d2ed5cc75483af061ad4e21b220c45b1cf0aea (patch)
treee75882cbda5842f60dd632eadfa3a31bd421696d /sfx2/source/toolbox
parent6ae5667c07ae7047ce47e8f9fba5ea3e5f569286 (diff)
make these well-behaved singletons
Diffstat (limited to 'sfx2/source/toolbox')
-rw-r--r--sfx2/source/toolbox/imgmgr.cxx47
1 files changed, 33 insertions, 14 deletions
diff --git a/sfx2/source/toolbox/imgmgr.cxx b/sfx2/source/toolbox/imgmgr.cxx
index 31c0850f873e..e6419cc09ee3 100644
--- a/sfx2/source/toolbox/imgmgr.cxx
+++ b/sfx2/source/toolbox/imgmgr.cxx
@@ -47,6 +47,7 @@
#include <tools/link.hxx>
#include <svtools/miscopt.hxx>
#include <osl/mutex.hxx>
+#include <rtl/instance.hxx>
#include <comphelper/processfactory.hxx>
@@ -80,27 +81,38 @@ public:
~SfxImageManager_Impl();
};
+namespace
+{
+ typedef boost::unordered_map< SfxModule*, boost::shared_ptr<SfxImageManager_Impl> > SfxImageManagerImplMap;
+
+ class theImageManagerImplMap :
+ public rtl::Static<SfxImageManagerImplMap, theImageManagerImplMap> {};
+
+ class theGlobalImageManager :
+ public rtl::StaticWithArg<SfxImageManager_Impl, SfxModule*,
+ theGlobalImageManager> {};
+}
+
static SfxImageManager_Impl* GetImageManager( SfxModule* pModule )
{
SolarMutexGuard aGuard;
if ( pModule == 0 )
{
- static SfxImageManager_Impl aGlobalImageManager(0);
- return &aGlobalImageManager;
+ return &theGlobalImageManager::get(NULL);
}
else
{
- typedef boost::unordered_map< SfxModule*, boost::shared_ptr<SfxImageManager_Impl> > SfxImageManagerImplMap;
- static SfxImageManagerImplMap m_ImageManager_ImplMap;
+ SfxImageManagerImplMap &rImageManager_ImplMap =
+ theImageManagerImplMap::get();
SfxImageManager_Impl* pImpl( 0 );
- SfxImageManagerImplMap::const_iterator pIter = m_ImageManager_ImplMap.find(pModule);
- if ( pIter != m_ImageManager_ImplMap.end() )
+ SfxImageManagerImplMap::const_iterator pIter = rImageManager_ImplMap.find(pModule);
+ if ( pIter != rImageManager_ImplMap.end() )
pImpl = pIter->second.get();
else
{
- m_ImageManager_ImplMap[pModule].reset(new SfxImageManager_Impl(pModule));
- pImpl = m_ImageManager_ImplMap[pModule].get();
+ rImageManager_ImplMap[pModule].reset(new SfxImageManager_Impl(pModule));
+ pImpl = rImageManager_ImplMap[pModule].get();
}
return pImpl;
}
@@ -290,21 +302,28 @@ SfxImageManager::~SfxImageManager()
//-------------------------------------------------------------------------
+namespace
+{
+ typedef boost::unordered_map< SfxModule*, boost::shared_ptr<SfxImageManager> > SfxImageManagerMap;
+
+ class theImageManagerMap :
+ public rtl::Static<SfxImageManagerMap, theImageManagerMap> {};
+}
+
SfxImageManager* SfxImageManager::GetImageManager( SfxModule* pModule )
{
SolarMutexGuard aGuard;
SfxImageManager* pSfxImageManager(0);
- typedef boost::unordered_map< SfxModule*, boost::shared_ptr<SfxImageManager> > SfxImageManagerMap;
- static SfxImageManagerMap m_ImageManagerMap;
+ SfxImageManagerMap &rImageManagerMap = theImageManagerMap::get();
- SfxImageManagerMap::const_iterator pIter = m_ImageManagerMap.find(pModule);
- if ( pIter != m_ImageManagerMap.end() )
+ SfxImageManagerMap::const_iterator pIter = rImageManagerMap.find(pModule);
+ if ( pIter != rImageManagerMap.end() )
pSfxImageManager = pIter->second.get();
else
{
- m_ImageManagerMap[pModule].reset(new SfxImageManager(pModule));
- pSfxImageManager = m_ImageManagerMap[pModule].get();
+ rImageManagerMap[pModule].reset(new SfxImageManager(pModule));
+ pSfxImageManager = rImageManagerMap[pModule].get();
}
return pSfxImageManager;
}