sot/source/sdstor/stgcache.cxx | 115 +++-------------------------------------- sot/source/sdstor/stgcache.hxx | 15 +++-- sot/source/sdstor/stgstrms.cxx | 5 - 3 files changed, 21 insertions(+), 114 deletions(-)
New commits: commit b7db3b8e1af45b27a0a7e33f7a7640af94dc96b8 Author: Michael Meeks <michael.me...@suse.com> Date: Wed Sep 19 14:57:46 2012 +0100 sot: remove un-used LRU cache Change-Id: I3d011a1aae47b6961b1cea2bf544af2c88bd611e diff --git a/sot/source/sdstor/stgcache.cxx b/sot/source/sdstor/stgcache.cxx index 74094f8..dd0b17f 100644 --- a/sot/source/sdstor/stgcache.cxx +++ b/sot/source/sdstor/stgcache.cxx @@ -45,10 +45,7 @@ StgPage::StgPage( StgCache* p, short n ) bDirty = sal_False; nPage = 0; pData = new sal_uInt8[ nData ]; - pNext1 = - pNext2 = - pLast1 = - pLast2 = NULL; + pNext2 = pLast2 = NULL; } StgPage::~StgPage() @@ -84,7 +81,7 @@ StgCache::StgCache() { nRef = 0; pStrm = NULL; - pCur = pElem1 = NULL; + pElem1 = NULL; nPageSize = 512; nError = SVSTREAM_OK; bMyStream = sal_False; @@ -112,7 +109,6 @@ void StgCache::SetPhysPageSize( short n ) } // Create a new cache element -// pCur points to this element StgPage* StgCache::Create( sal_Int32 nPg ) { @@ -121,18 +117,7 @@ StgPage* StgCache::Create( sal_Int32 nPg ) // For data security, clear the buffer contents memset( pElem->pData, 0, pElem->nData ); - // insert to LRU - if( pCur ) - { - pElem->pNext1 = pCur; - pElem->pLast1 = pCur->pLast1; - pElem->pNext1->pLast1 = - pElem->pLast1->pNext1 = pElem; - } - else - pElem->pNext1 = pElem->pLast1 = pElem; maLRUCache[pElem->nPage] = pElem; - pCur = pElem; // insert to Sorted if( !pElem1 ) @@ -163,12 +148,6 @@ void StgCache::Erase( StgPage* pElem ) OSL_ENSURE( pElem, "The pointer should not be NULL!" ); if ( pElem ) { - OSL_ENSURE( pElem->pNext1 && pElem->pLast1, "The pointers may not be NULL!" ); - //remove from LRU - pElem->pNext1->pLast1 = pElem->pLast1; - pElem->pLast1->pNext1 = pElem->pNext1; - if( pCur == pElem ) - pCur = ( pElem->pNext1 == pElem ) ? NULL : pElem->pNext1; maLRUCache.erase( pElem->nPage ); // remove from Sorted pElem->pNext2->pLast2 = pElem->pLast2; @@ -183,15 +162,14 @@ void StgCache::Erase( StgPage* pElem ) void StgCache::Clear() { - StgPage* pElem = pCur; - if( pCur ) do + StgPage *pElem = pElem1; + if( pElem ) do { StgPage* pDelete = pElem; - pElem = pElem->pNext1; + pElem = pElem->pNext2; delete pDelete; } - while( pCur != pElem ); - pCur = NULL; + while( pElem != pElem1 ); pElem1 = NULL; maLRUCache.clear(); } @@ -206,19 +184,6 @@ StgPage* StgCache::Find( sal_Int32 nPage ) // page found StgPage* pFound = (*aIt).second; OSL_ENSURE( pFound, "The pointer may not be NULL!" ); - - if( pFound != pCur ) - { - OSL_ENSURE( pFound->pNext1 && pFound->pLast1, "The pointers may not be NULL!" ); - // remove from LRU - pFound->pNext1->pLast1 = pFound->pLast1; - pFound->pLast1->pNext1 = pFound->pNext1; - // insert to LRU - pFound->pNext1 = pCur; - pFound->pLast1 = pCur->pLast1; - pFound->pNext1->pLast1 = - pFound->pLast1->pNext1 = pFound; - } return pFound; } return NULL; @@ -283,34 +248,6 @@ sal_Bool StgCache::Commit() } while( p != pElem1 ); pStrm->Flush(); SetError( pStrm->GetError() ); -#ifdef CHECK_DIRTY - p = pElem1; - if( p ) do - { - if( p->bDirty ) - { - ErrorBox( NULL, WB_OK, String("SO2: Dirty Block in Ordered List") ).Execute(); - sal_Bool b = Write( p->nPage, p->pData, 1 ); - if( !b ) - return sal_False; - p->bDirty = sal_False; - } - p = p->pNext2; - } while( p != pElem1 ); - p = pElem1; - if( p ) do - { - if( p->bDirty ) - { - ErrorBox( NULL, WB_OK, String("SO2: Dirty Block in LRU List") ).Execute(); - sal_Bool b = Write( p->nPage, p->pData, 1 ); - if( !b ) - return sal_False; - p->bDirty = sal_False; - } - p = p->pNext1; - } while( p != pElem1 ); -#endif return sal_True; } diff --git a/sot/source/sdstor/stgcache.hxx b/sot/source/sdstor/stgcache.hxx index 3420423..dc1d88d 100644 --- a/sot/source/sdstor/stgcache.hxx +++ b/sot/source/sdstor/stgcache.hxx @@ -91,7 +91,6 @@ public: class StgPage { friend class StgCache; StgCache* pCache; // the cache - StgPage *pNext1, *pLast1; // LRU chain StgPage *pNext2, *pLast2; // ordered chain sal_Int32 nPage; // page # sal_uInt8* pData; // nPageSize characters commit 422a41ff11b915aea2813f3a674f06b689df65b2 Author: Michael Meeks <michael.me...@suse.com> Date: Wed Sep 19 14:39:32 2012 +0100 sot: remove horrible hiding of LRU cache map Change-Id: Ic8df1012752e78d3326999a07dc15a99e982b896 diff --git a/sot/source/sdstor/stgcache.cxx b/sot/source/sdstor/stgcache.cxx index fc2c877..74094f8 100644 --- a/sot/source/sdstor/stgcache.cxx +++ b/sot/source/sdstor/stgcache.cxx @@ -18,14 +18,6 @@ */ -#if defined(_MSC_VER) && (_MSC_VER<1200) -#include <tools/presys.h> -#endif -#include <boost/unordered_map.hpp> -#if defined(_MSC_VER) && (_MSC_VER<1200) -#include <tools/postsys.h> -#endif - #include <string.h> #include <osl/endian.h> #include <tools/string.hxx> @@ -37,19 +29,6 @@ #include "stgdir.hxx" #include "stgio.hxx" -/*************************************************************************/ -//----------------------------------------------------------------------------- -typedef boost::unordered_map -< - sal_Int32, - StgPage *, - boost::hash< sal_Int32 >, - std::equal_to< sal_Int32 > -> UsrStgPagePtr_Impl; -#ifdef _MSC_VER -#pragma warning( disable: 4786 ) -#endif - //#define CHECK_DIRTY 1 //#define READ_AFTER_WRITE 1 @@ -110,7 +89,6 @@ StgCache::StgCache() nError = SVSTREAM_OK; bMyStream = sal_False; bFile = sal_False; - pLRUCache = NULL; pStorageStream = NULL; } @@ -118,7 +96,6 @@ StgCache::~StgCache() { Clear(); SetStrm( NULL, sal_False ); - delete (UsrStgPagePtr_Impl*)pLRUCache; } void StgCache::SetPhysPageSize( short n ) @@ -154,9 +131,7 @@ StgPage* StgCache::Create( sal_Int32 nPg ) } else pElem->pNext1 = pElem->pLast1 = pElem; - if( !pLRUCache ) - pLRUCache = new UsrStgPagePtr_Impl(); - (*(UsrStgPagePtr_Impl*)pLRUCache)[pElem->nPage] = pElem; + maLRUCache[pElem->nPage] = pElem; pCur = pElem; // insert to Sorted @@ -194,8 +169,7 @@ void StgCache::Erase( StgPage* pElem ) pElem->pLast1->pNext1 = pElem->pNext1; if( pCur == pElem ) pCur = ( pElem->pNext1 == pElem ) ? NULL : pElem->pNext1; - if( pLRUCache ) - ((UsrStgPagePtr_Impl*)pLRUCache)->erase( pElem->nPage ); + maLRUCache.erase( pElem->nPage ); // remove from Sorted pElem->pNext2->pLast2 = pElem->pLast2; pElem->pLast2->pNext2 = pElem->pNext2; @@ -219,18 +193,15 @@ void StgCache::Clear() while( pCur != pElem ); pCur = NULL; pElem1 = NULL; - delete (UsrStgPagePtr_Impl*)pLRUCache; - pLRUCache = NULL; + maLRUCache.clear(); } // Look for a cached page StgPage* StgCache::Find( sal_Int32 nPage ) { - if( !pLRUCache ) - return NULL; - UsrStgPagePtr_Impl::iterator aIt = ((UsrStgPagePtr_Impl*)pLRUCache)->find( nPage ); - if( aIt != ((UsrStgPagePtr_Impl*)pLRUCache)->end() ) + IndexToStgPage::iterator aIt = maLRUCache.find( nPage ); + if( aIt != maLRUCache.end() ) { // page found StgPage* pFound = (*aIt).second; diff --git a/sot/source/sdstor/stgcache.hxx b/sot/source/sdstor/stgcache.hxx index a9fcc85..3420423 100644 --- a/sot/source/sdstor/stgcache.hxx +++ b/sot/source/sdstor/stgcache.hxx @@ -24,20 +24,28 @@ #include <tools/solar.h> #include <tools/stream.hxx> #include <stgelem.hxx> +#include <boost/unordered_map.hpp> class UCBStorageStream; - class StgPage; class StgDirEntry; class StorageBase; +typedef boost::unordered_map +< + sal_Int32, + StgPage *, + boost::hash< sal_Int32 >, + std::equal_to< sal_Int32 > +> IndexToStgPage; + class StgCache { StgPage* pCur; // top of LRU list StgPage* pElem1; // top of ordered list sal_uLong nError; // error code sal_Int32 nPages; // size of data area in pages sal_uInt16 nRef; // reference count - void * pLRUCache; // hash table of cached objects + IndexToStgPage maLRUCache; // hash of index to cached pages short nPageSize; // page size of the file UCBStorageStream* pStorageStream; // holds reference to UCB storage stream commit 3b3d738c167c04541fd16022ef7221cedd1e3b66 Author: Michael Meeks <michael.me...@suse.com> Date: Wed Sep 19 13:23:59 2012 +0100 sot: remove unused Owner construct on StgPage Change-Id: Idd6616ac11e16b4c4631c607a3dc92417a796521 diff --git a/sot/source/sdstor/stgcache.cxx b/sot/source/sdstor/stgcache.cxx index cf6f8cb..fc2c877 100644 --- a/sot/source/sdstor/stgcache.cxx +++ b/sot/source/sdstor/stgcache.cxx @@ -70,7 +70,6 @@ StgPage::StgPage( StgCache* p, short n ) pNext2 = pLast1 = pLast2 = NULL; - pOwner = NULL; } StgPage::~StgPage() diff --git a/sot/source/sdstor/stgcache.hxx b/sot/source/sdstor/stgcache.hxx index 517e27a..a9fcc85 100644 --- a/sot/source/sdstor/stgcache.hxx +++ b/sot/source/sdstor/stgcache.hxx @@ -85,7 +85,6 @@ class StgPage { StgCache* pCache; // the cache StgPage *pNext1, *pLast1; // LRU chain StgPage *pNext2, *pLast2; // ordered chain - StgDirEntry* pOwner; // owner sal_Int32 nPage; // page # sal_uInt8* pData; // nPageSize characters short nData; // size of this page @@ -97,7 +96,6 @@ public: sal_Int32 GetPage() { return nPage; } void* GetData() { return pData; } short GetSize() { return nData; } - void SetOwner( StgDirEntry* p ) { pOwner = p; } // routines for accessing FAT pages // Assume that the data is a FAT page and get/put FAT data. sal_Int32 GetPage( short nOff ) diff --git a/sot/source/sdstor/stgstrms.cxx b/sot/source/sdstor/stgstrms.cxx index 927fb53..feb90c4 100644 --- a/sot/source/sdstor/stgstrms.cxx +++ b/sot/source/sdstor/stgstrms.cxx @@ -868,7 +868,6 @@ void* StgDataStrm::GetPtr( sal_Int32 Pos, sal_Bool bForce, sal_Bool bDirty ) StgPage* pPg = rIo.Get( nPage, bForce ); if (pPg && nOffset < pPg->GetSize()) { - pPg->SetOwner( pEntry ); if( bDirty ) pPg->SetDirty(); return ((sal_uInt8 *)pPg->GetData()) + nOffset; @@ -905,7 +904,6 @@ sal_Int32 StgDataStrm::Read( void* pBuf, sal_Int32 n ) if( pPg ) { // data is present, so use the cached data - pPg->SetOwner( pEntry ); memcpy( p, pPg->GetData(), nBytes ); nRes = nBytes; } @@ -919,7 +917,6 @@ sal_Int32 StgDataStrm::Read( void* pBuf, sal_Int32 n ) pPg = rIo.Get( nPage, sal_False ); if( !pPg ) break; - pPg->SetOwner( pEntry ); memcpy( p, (sal_uInt8*)pPg->GetData() + nOffset, nBytes ); nRes = nBytes; } @@ -966,7 +963,6 @@ sal_Int32 StgDataStrm::Write( const void* pBuf, sal_Int32 n ) if( pPg ) { // data is present, so use the cached data - pPg->SetOwner( pEntry ); memcpy( pPg->GetData(), p, nBytes ); pPg->SetDirty(); nRes = nBytes; @@ -981,7 +977,6 @@ sal_Int32 StgDataStrm::Write( const void* pBuf, sal_Int32 n ) pPg = rIo.Get( nPage, sal_False ); if( !pPg ) break; - pPg->SetOwner( pEntry ); memcpy( (sal_uInt8*)pPg->GetData() + nOffset, p, nBytes ); pPg->SetDirty(); nRes = nBytes; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits