summaryrefslogtreecommitdiff
path: root/sc/source/core/data
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-11-25 21:19:46 -0500
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-11-25 21:19:40 -0500
commit628c0fac4abc09544f65a5070e415b3a05005449 (patch)
treecbe93722cb9c60d1d5b44b039f2273cd4ca6d8d7 /sc/source/core/data
parent15156e06c9a3a73a375445955265999731800458 (diff)
More efficient way to check & insert listener into ptr_map.
Change-Id: I09ec8ed8f05621b72984a34f47db50d20ebd6c06 (cherry picked from commit 42c8178ce73756f85fa41473bb16f667f7f564e9)
Diffstat (limited to 'sc/source/core/data')
-rw-r--r--sc/source/core/data/formulacell.cxx12
1 files changed, 8 insertions, 4 deletions
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index a34d3fb139f4..b0a39da71521 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -556,12 +556,16 @@ sc::FormulaGroupAreaListener* ScFormulaCellGroup::getAreaListener(
{
AreaListenerKey aKey(rRange, bStartFixed, bEndFixed);
- std::pair<AreaListenersType::iterator, bool> r =
- mpImpl->maAreaListeners.insert(
- aKey, new sc::FormulaGroupAreaListener(
+ AreaListenersType::iterator it = mpImpl->maAreaListeners.lower_bound(aKey);
+ if (it == mpImpl->maAreaListeners.end() || mpImpl->maAreaListeners.key_comp()(aKey, it->first))
+ {
+ // Insert a new one.
+ it = mpImpl->maAreaListeners.insert(
+ it, aKey, new sc::FormulaGroupAreaListener(
rRange, ppTopCell, mnLength, bStartFixed, bEndFixed));
+ }
- return r.first->second;
+ return it->second;
}
void ScFormulaCellGroup::endAllGroupListening( ScDocument& rDoc )