xmloff/source/draw/EnhancedCustomShapeToken.cxx | 38 ++++++++++-------------- 1 file changed, 17 insertions(+), 21 deletions(-)
New commits: commit e698cbd8f860ba6f483f1476e694706717451d2f Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Jul 31 19:03:44 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sun Aug 1 13:56:26 2021 +0200 osl::Mutex->static local in EnhancedCustomShapeToken Change-Id: I436df7f8088c6f5f9376ca9d45d9ce4b7de06069 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119752 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/xmloff/source/draw/EnhancedCustomShapeToken.cxx b/xmloff/source/draw/EnhancedCustomShapeToken.cxx index 34bc3f61b874..38ca0df48e6a 100644 --- a/xmloff/source/draw/EnhancedCustomShapeToken.cxx +++ b/xmloff/source/draw/EnhancedCustomShapeToken.cxx @@ -18,20 +18,12 @@ */ #include <EnhancedCustomShapeToken.hxx> -#include <osl/mutex.hxx> #include <xmloff/xmlimp.hxx> #include <unordered_map> #include <memory> namespace xmloff::EnhancedCustomShapeToken { -typedef std::unordered_map< const char*, EnhancedCustomShapeTokenEnum, rtl::CStringHash, rtl::CStringEqual> TypeNameHashMap; -static TypeNameHashMap* pHashMap = nullptr; -static ::osl::Mutex& getHashMapMutex() -{ - static osl::Mutex s_aHashMapProtection; - return s_aHashMapProtection; -} namespace { @@ -172,27 +164,31 @@ const TokenTable pTokenTableArray[] = { "NotFound", EAS_NotFound } }; -EnhancedCustomShapeTokenEnum EASGet( const OUString& rShapeType ) +typedef std::unordered_map< const char*, EnhancedCustomShapeTokenEnum, rtl::CStringHash, rtl::CStringEqual> TypeNameHashMap; +static const TypeNameHashMap& GetNameHashMap() { - if ( !pHashMap ) - { // init hash map - ::osl::MutexGuard aGuard( getHashMapMutex() ); - if ( !pHashMap ) - { - TypeNameHashMap* pH = new TypeNameHashMap; + static TypeNameHashMap aHashMap = []() + { // init hash map + TypeNameHashMap res; for (auto const & pair : pTokenTableArray) - (*pH)[pair.pS] = pair.pE; - pHashMap = pH; - } - } + res[pair.pS] = pair.pE; + return res; + }(); + + return aHashMap; +} + +EnhancedCustomShapeTokenEnum EASGet( const OUString& rShapeType ) +{ EnhancedCustomShapeTokenEnum eRetValue = EAS_NotFound; int i, nLen = rShapeType.getLength(); std::unique_ptr<char[]> pBuf(new char[ nLen + 1 ]); for ( i = 0; i < nLen; i++ ) pBuf[ i ] = static_cast<char>(rShapeType[ i ]); pBuf[ i ] = 0; - TypeNameHashMap::iterator aHashIter( pHashMap->find( pBuf.get() ) ); - if ( aHashIter != pHashMap->end() ) + auto& rHashMap = GetNameHashMap(); + TypeNameHashMap::const_iterator aHashIter( rHashMap.find( pBuf.get() ) ); + if ( aHashIter != rHashMap.end() ) eRetValue = (*aHashIter).second; return eRetValue; }