sc/inc/chartlis.hxx | 13 +++--------- sc/source/core/tool/chartlis.cxx | 42 +++++++-------------------------------- 2 files changed, 12 insertions(+), 43 deletions(-)
New commits: commit 431957118d7bbf96bf78e142df9decbcaff6475b Author: Tobias Lippert <d...@fastmail.fm> Date: Sun Aug 2 14:51:23 2015 +0200 fdo#68016 Speed up ScChartListenerCollection::EndListeningHiddenRange The listeners were stored in a std::list which is not efficient for the lookup required in EndListeningHiddenRange() The list was replaced by an std::unodered_map which allows faster look-up. Change-Id: Iec7a33b18aa91e7d2917dc8feb98bf9b20ce804e Reviewed-on: https://gerrit.libreoffice.org/17437 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Noel Grandin <noelgran...@gmail.com> diff --git a/sc/inc/chartlis.hxx b/sc/inc/chartlis.hxx index 98d3850..0f74e86 100644 --- a/sc/inc/chartlis.hxx +++ b/sc/inc/chartlis.hxx @@ -28,10 +28,10 @@ #include "externalrefmgr.hxx" #include <vector> -#include <list> #include <boost/scoped_ptr.hpp> #include <boost/ptr_container/ptr_map.hpp> +#include <unordered_map> #include <unordered_set> class ScDocument; @@ -128,13 +128,6 @@ public: class ScChartListenerCollection { public: - struct RangeListenerItem - { - ScRange maRange; - ScChartHiddenRangeListener* mpListener; - explicit RangeListenerItem(const ScRange& rRange, ScChartHiddenRangeListener* p); - }; - typedef boost::ptr_map<OUString, ScChartListener> ListenersType; typedef std::unordered_set<OUString, OUStringHash> StringSetType; private: @@ -145,7 +138,9 @@ private: SC_CLCUPDATE_RUNNING, SC_CLCUPDATE_MODIFIED } meModifiedDuringUpdate; - ::std::list<RangeListenerItem> maHiddenListeners; + + std::unordered_multimap<ScChartHiddenRangeListener*, ScRange> maHiddenListeners; + StringSetType maNonOleObjectNames; Idle aIdle; diff --git a/sc/source/core/tool/chartlis.cxx b/sc/source/core/tool/chartlis.cxx index dc03b24..a7ddf3a 100644 --- a/sc/source/core/tool/chartlis.cxx +++ b/sc/source/core/tool/chartlis.cxx @@ -28,7 +28,6 @@ using namespace com::sun::star; using ::std::vector; -using ::std::list; using ::std::unary_function; using ::std::for_each; @@ -403,12 +402,6 @@ ScChartHiddenRangeListener::~ScChartHiddenRangeListener() // empty d'tor } -// ScChartListenerCollection -ScChartListenerCollection::RangeListenerItem::RangeListenerItem(const ScRange& rRange, ScChartHiddenRangeListener* p) : - maRange(rRange), mpListener(p) -{ -} - ScChartListenerCollection::ScChartListenerCollection( ScDocument* pDocP ) : meModifiedDuringUpdate( SC_CLCUPDATE_NONE ), pDoc( pDocP ) @@ -687,11 +680,12 @@ void ScChartListenerCollection::SetRangeDirty( const ScRange& rRange ) StartTimer(); // New hidden range listener implementation - for (list<RangeListenerItem>::iterator itr = maHiddenListeners.begin(), itrEnd = maHiddenListeners.end(); - itr != itrEnd; ++itr) + for (auto itr = maHiddenListeners.begin(); itr != maHiddenListeners.end(); ++itr) { - if (itr->maRange.Intersects(rRange)) - itr->mpListener->notify(); + if (itr->second.Intersects(rRange)) + { + itr->first->notify(); + } } } @@ -734,33 +728,13 @@ bool ScChartListenerCollection::operator!=( const ScChartListenerCollection& r ) void ScChartListenerCollection::StartListeningHiddenRange( const ScRange& rRange, ScChartHiddenRangeListener* pListener ) { - RangeListenerItem aItem(rRange, pListener); - maHiddenListeners.push_back(aItem); + maHiddenListeners.insert(std::make_pair<>(pListener, rRange)); } -namespace { - -struct MatchListener : public ::std::unary_function< - ScChartListenerCollection::RangeListenerItem, bool> -{ - MatchListener(const ScChartHiddenRangeListener* pMatch) : - mpMatch(pMatch) - { - } - - bool operator() (const ScChartListenerCollection::RangeListenerItem& rItem) const - { - return mpMatch == rItem.mpListener; - } - -private: - const ScChartHiddenRangeListener* mpMatch; -}; - -} void ScChartListenerCollection::EndListeningHiddenRange( ScChartHiddenRangeListener* pListener ) { - maHiddenListeners.remove_if(MatchListener(pListener)); + auto range = maHiddenListeners.equal_range(pListener); + maHiddenListeners.erase(range.first, range.second); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits