diff options
Diffstat (limited to 'svl')
-rw-r--r-- | svl/source/misc/sharedstringpool.cxx | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/svl/source/misc/sharedstringpool.cxx b/svl/source/misc/sharedstringpool.cxx index ad72b5a1addb..5c26c912bc42 100644 --- a/svl/source/misc/sharedstringpool.cxx +++ b/svl/source/misc/sharedstringpool.cxx @@ -49,13 +49,21 @@ SharedString SharedStringPool::intern( const OUString& rStr ) { osl::MutexGuard aGuard(&mpImpl->maMutex); - auto mapIt = mpImpl->maStrMap.find(rStr); - if (mapIt == mpImpl->maStrMap.end()) + auto [mapIt,bInserted] = mpImpl->maStrMap.emplace(rStr, rStr.pData); + if (bInserted) { // This is a new string insertion. Establish mapping to upper-case variant. OUString aUpper = mpImpl->mrCharClass.uppercase(rStr); - auto insertResult = mpImpl->maStrPoolUpper.insert(aUpper); - mapIt = mpImpl->maStrMap.emplace_hint(mapIt, rStr, insertResult.first->pData); + if (aUpper == rStr) + { + auto insertResult = mpImpl->maStrPoolUpper.insert(rStr); + mapIt->second = insertResult.first->pData; + } + else + { + auto insertResult = mpImpl->maStrPoolUpper.insert(aUpper); + mapIt->second = insertResult.first->pData; + } } return SharedString(mapIt->first.pData, mapIt->second); } |