summaryrefslogtreecommitdiffstats
path: root/svl
diff options
context:
space:
mode:
Diffstat (limited to 'svl')
-rw-r--r--svl/source/misc/sharedstringpool.cxx16
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);
}