diff options
-rw-r--r-- | sc/inc/chartlis.hxx | 13 | ||||
-rw-r--r-- | sc/source/core/tool/chartlis.cxx | 42 |
2 files changed, 12 insertions, 43 deletions
diff --git a/sc/inc/chartlis.hxx b/sc/inc/chartlis.hxx index 98d3850ffd2e..0f74e869852c 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 dc03b248b508..a7ddf3a58e72 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: */ |