include/svx/svdetc.hxx | 10 +++- svx/source/svdraw/svdetc.cxx | 104 ++++++++++++++++++++++++------------------- 2 files changed, 67 insertions(+), 47 deletions(-)
New commits: commit 2e92df040ee02f32ee42ebe6a33e716444a64480 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Wed Jul 9 15:29:46 2014 -0400 Scope reduction. Change-Id: Ibc9314320c7b22f676978bb8b8157844a12c9bf8 diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx index 592ffce..9df6329 100644 --- a/svx/source/svdraw/svdetc.cxx +++ b/svx/source/svdraw/svdetc.cxx @@ -115,51 +115,51 @@ OLEObjCache::~OLEObjCache() void OLEObjCache::UnloadOnDemand() { - if (nSize < maObjs.size()) + if (nSize >= maObjs.size()) + return; + + // more objects than configured cache size try to remove objects + // of course not the freshly inserted one at nIndex=0 + size_t nCount2 = maObjs.size(); + size_t nIndex = nCount2-1; + while( nIndex && nCount2 > nSize ) { - // more objects than configured cache size try to remove objects - // of course not the freshly inserted one at nIndex=0 - size_t nCount2 = maObjs.size(); - size_t nIndex = nCount2-1; - while( nIndex && nCount2 > nSize ) + SdrOle2Obj* pUnloadObj = maObjs[nIndex--]; + if (!pUnloadObj) + continue; + + try { - SdrOle2Obj* pUnloadObj = maObjs[nIndex--]; - if ( pUnloadObj ) - { - try - { - // it is important to get object without reinitialization to avoid reentrance - uno::Reference< embed::XEmbeddedObject > xUnloadObj = pUnloadObj->GetObjRef_NoInit(); + // it is important to get object without reinitialization to avoid reentrance + uno::Reference< embed::XEmbeddedObject > xUnloadObj = pUnloadObj->GetObjRef_NoInit(); - bool bUnload = SdrOle2Obj::CanUnloadRunningObj( xUnloadObj, pUnloadObj->GetAspect() ); + bool bUnload = SdrOle2Obj::CanUnloadRunningObj( xUnloadObj, pUnloadObj->GetAspect() ); - // check whether the object can be unloaded before looking for the parent objects - if ( xUnloadObj.is() && bUnload ) + // check whether the object can be unloaded before looking for the parent objects + if ( xUnloadObj.is() && bUnload ) + { + uno::Reference< frame::XModel > xUnloadModel( xUnloadObj->getComponent(), uno::UNO_QUERY ); + if ( xUnloadModel.is() ) + { + for (size_t nCheckInd = 0; nCheckInd < maObjs.size(); nCheckInd++) { - uno::Reference< frame::XModel > xUnloadModel( xUnloadObj->getComponent(), uno::UNO_QUERY ); - if ( xUnloadModel.is() ) + SdrOle2Obj* pCacheObj = maObjs[nCheckInd]; + if ( pCacheObj && pCacheObj != pUnloadObj ) { - for (size_t nCheckInd = 0; nCheckInd < maObjs.size(); nCheckInd++) - { - SdrOle2Obj* pCacheObj = maObjs[nCheckInd]; - if ( pCacheObj && pCacheObj != pUnloadObj ) - { - uno::Reference< frame::XModel > xParentModel = pCacheObj->GetParentXModel(); - if ( xUnloadModel == xParentModel ) - bUnload = false; // the object has running embedded objects - } - } + uno::Reference< frame::XModel > xParentModel = pCacheObj->GetParentXModel(); + if ( xUnloadModel == xParentModel ) + bUnload = false; // the object has running embedded objects } } - - if ( bUnload && UnloadObj(pUnloadObj) ) - // object was successfully unloaded - nCount2--; } - catch( uno::Exception& ) - {} } + + if ( bUnload && UnloadObj(pUnloadObj) ) + // object was successfully unloaded + nCount2--; } + catch( uno::Exception& ) + {} } } commit af4aaa22622e432cc0c899e019dfe819a360c567 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Wed Jul 9 15:27:36 2014 -0400 Let's not derive from std::vector. Change-Id: I512d97d36c344df097cc5a1ac90aa9d3d219c1e9 diff --git a/include/svx/svdetc.hxx b/include/svx/svdetc.hxx index 918205e..6212aab 100644 --- a/include/svx/svdetc.hxx +++ b/include/svx/svdetc.hxx @@ -195,9 +195,11 @@ SdrLinkList& ImpGetUserMakeObjUserDataHdl(); class SdrOle2Obj; class AutoTimer; -class OLEObjCache : public std::vector<SdrOle2Obj*> +class OLEObjCache { - sal_uIntPtr nSize; + std::vector<SdrOle2Obj*> maObjs; + + size_t nSize; AutoTimer* pTimer; void UnloadOnDemand(); @@ -210,6 +212,10 @@ public: void InsertObj(SdrOle2Obj* pObj); void RemoveObj(SdrOle2Obj* pObj); + + size_t size() const; + SdrOle2Obj* operator[](size_t nPos); + const SdrOle2Obj* operator[](size_t nPos) const; }; diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx index a9cb949..592ffce 100644 --- a/svx/source/svdraw/svdetc.cxx +++ b/svx/source/svdraw/svdetc.cxx @@ -95,7 +95,6 @@ const LocaleDataWrapper* SdrGlobalData::GetLocaleData() OLEObjCache::OLEObjCache() -: std::vector<SdrOle2Obj*>() { nSize = officecfg::Office::Common::Cache::DrawingEngine::OLE_Objects::get(); pTimer = new AutoTimer(); @@ -116,15 +115,15 @@ OLEObjCache::~OLEObjCache() void OLEObjCache::UnloadOnDemand() { - if ( nSize < size() ) + if (nSize < maObjs.size()) { // more objects than configured cache size try to remove objects // of course not the freshly inserted one at nIndex=0 - sal_uIntPtr nCount2 = size(); - sal_uIntPtr nIndex = nCount2-1; + size_t nCount2 = maObjs.size(); + size_t nIndex = nCount2-1; while( nIndex && nCount2 > nSize ) { - SdrOle2Obj* pUnloadObj = (*this)[nIndex--]; + SdrOle2Obj* pUnloadObj = maObjs[nIndex--]; if ( pUnloadObj ) { try @@ -140,9 +139,9 @@ void OLEObjCache::UnloadOnDemand() uno::Reference< frame::XModel > xUnloadModel( xUnloadObj->getComponent(), uno::UNO_QUERY ); if ( xUnloadModel.is() ) { - for ( sal_uIntPtr nCheckInd = 0; nCheckInd < size(); nCheckInd++ ) + for (size_t nCheckInd = 0; nCheckInd < maObjs.size(); nCheckInd++) { - SdrOle2Obj* pCacheObj = (*this)[nCheckInd]; + SdrOle2Obj* pCacheObj = maObjs[nCheckInd]; if ( pCacheObj && pCacheObj != pUnloadObj ) { uno::Reference< frame::XModel > xParentModel = pCacheObj->GetParentXModel(); @@ -166,22 +165,22 @@ void OLEObjCache::UnloadOnDemand() void OLEObjCache::InsertObj(SdrOle2Obj* pObj) { - if ( !empty() ) + if (!maObjs.empty()) { - SdrOle2Obj* pExistingObj = front(); + SdrOle2Obj* pExistingObj = maObjs.front(); if ( pObj == pExistingObj ) // the object is already on the top, nothing has to be changed return; } // get the old position of the object to know whether it is already in container - iterator it = std::find( begin(), end(), pObj ); - bool bFound = it != end(); + std::vector<SdrOle2Obj*>::iterator it = std::find(maObjs.begin(), maObjs.end(), pObj); + bool bFound = it != maObjs.end(); - if( it != end() ) - erase( it ); + if (bFound) + maObjs.erase(it); // insert object into first position - insert(begin(), pObj); + maObjs.insert(maObjs.begin(), pObj); if ( !bFound ) { @@ -192,9 +191,24 @@ void OLEObjCache::InsertObj(SdrOle2Obj* pObj) void OLEObjCache::RemoveObj(SdrOle2Obj* pObj) { - iterator it = std::find( begin(), end(), pObj ); - if( it != end() ) - erase( it ); + std::vector<SdrOle2Obj*>::iterator it = std::find(maObjs.begin(), maObjs.end(), pObj); + if (it != maObjs.end()) + maObjs.erase(it); +} + +size_t OLEObjCache::size() const +{ + return maObjs.size(); +} + +SdrOle2Obj* OLEObjCache::operator[](size_t nPos) +{ + return maObjs[nPos]; +} + +const SdrOle2Obj* OLEObjCache::operator[](size_t nPos) const +{ + return maObjs[nPos]; } bool OLEObjCache::UnloadObj(SdrOle2Obj* pObj) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits