summaryrefslogtreecommitdiff
path: root/sc/source/core/data/documen2.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-05-16 16:52:19 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-05-17 11:58:34 +0200
commit4c2034b808fed4f9dfd715d8a4813e788a7e97a4 (patch)
treee12e68a088540c3e3a9457186b5c72291aa78347 /sc/source/core/data/documen2.cxx
parent0e4c542f7a862e681baf25f042bc3a928c14004f (diff)
avoid two lookups in ScDocument::GetLookupCache
doing an emplace_hint when the iterator points to end(), doesn't really help, so rather attempt to insert a fake value Change-Id: I44b89858284c6bebaa0e36daf0a4094fe06493c4 Reviewed-on: https://gerrit.libreoffice.org/72419 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sc/source/core/data/documen2.cxx')
-rw-r--r--sc/source/core/data/documen2.cxx10
1 files changed, 5 insertions, 5 deletions
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index 56506490ec5d..b87d73a8da56 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -1136,12 +1136,12 @@ ScLookupCache & ScDocument::GetLookupCache( const ScRange & rRange, ScInterprete
ScLookupCacheMap*& rpCacheMap = pContext->mScLookupCache;
if (!rpCacheMap)
rpCacheMap = new ScLookupCacheMap;
- auto findIt(rpCacheMap->aCacheMap.find(rRange));
- if (findIt == rpCacheMap->aCacheMap.end())
+ // insert with temporary value to avoid doing two lookups
+ auto [findIt, bInserted] = rpCacheMap->aCacheMap.emplace(rRange, nullptr);
+ if (bInserted)
{
- auto insertIt = rpCacheMap->aCacheMap.emplace_hint(findIt,
- rRange, std::make_unique<ScLookupCache>(this, rRange, *rpCacheMap) );
- pCache = insertIt->second.get();
+ findIt->second = std::make_unique<ScLookupCache>(this, rRange, *rpCacheMap);
+ pCache = findIt->second.get();
// The StartListeningArea() call is not thread-safe, as all threads
// would access the same SvtBroadcaster.
osl::MutexGuard guard( mScLookupMutex );