diff options
-rw-r--r-- | sc/source/core/data/dpobject.cxx | 33 |
1 files changed, 9 insertions, 24 deletions
diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index 5aee5b71b0a9..a39d2761c859 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -83,8 +83,6 @@ using namespace com::sun::star; using ::std::vector; -using ::std::unary_function; -using ::std::remove_if; using ::boost::shared_ptr; using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Reference; @@ -2572,25 +2570,6 @@ ScDPCollection::~ScDPCollection() maTables.clear(); } -namespace { - -/** - * Unary predicate to match DP objects by the table ID. - */ -class MatchByTable : public unary_function<ScDPObject, bool> -{ - SCTAB mnTab; -public: - MatchByTable(SCTAB nTab) : mnTab(nTab) {} - - bool operator() (const ScDPObject& rObj) const - { - return rObj.GetOutRange().aStart.Tab() == mnTab; - } -}; - -} - bool ScDPCollection::ClearCache(ScDPObject* pDPObj) { if (pDPObj->IsSheetData()) @@ -2628,9 +2607,15 @@ bool ScDPCollection::ClearCache(ScDPObject* pDPObj) void ScDPCollection::DeleteOnTab( SCTAB nTab ) { - maTables.erase( - remove_if(maTables.begin(), maTables.end(), MatchByTable(nTab)), - maTables.end()); + TablesType aNewTables; + while (!maTables.empty()) + { + TablesType::auto_type xDP = maTables.pop_back(); + if (xDP->GetOutRange().aStart.Tab() != nTab) + // Not on this sheet. Keep it. + aNewTables.push_back(xDP.release()); + } + maTables.swap(aNewTables); } void ScDPCollection::UpdateReference( UpdateRefMode eUpdateRefMode, |