Hi, Attached is a patch to remove a couple more uses of svarray stuff from writer.
Nigel
>From 54529e04dcd47306724c478d3ac177a63ce24a42 Mon Sep 17 00:00:00 2001 From: Nigel Hawkins <n.hawk...@gmx.com> Date: Thu, 3 Feb 2011 16:09:53 +0000 Subject: [PATCH 2/2] Remove svArrays from SwLayCacheIoImpl --- sw/source/core/layout/laycache.cxx | 44 ++++++++++++++---------------------- sw/source/core/layout/layhelp.hxx | 10 ++++++- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/sw/source/core/layout/laycache.cxx b/sw/source/core/layout/laycache.cxx index a2ec1d2..89620a9 100644 --- a/sw/source/core/layout/laycache.cxx +++ b/sw/source/core/layout/laycache.cxx @@ -1186,13 +1186,10 @@ SwLayCacheIoImpl::SwLayCacheIoImpl( SvStream& rStrm, BOOL bWrtMd ) : BOOL SwLayCacheIoImpl::OpenRec( BYTE cType ) { BOOL bRes = TRUE; - UINT16 nLvl = aRecTypes.Count(); - OSL_ENSURE( nLvl == aRecSizes.Count(), "OpenRec: Level" ); UINT32 nPos = pStream->Tell(); if( bWriteMode ) { - aRecTypes.Insert( cType, nLvl ); - aRecSizes.Insert( nPos, nLvl ); + aRecords.push_back( RecTypeSize(cType, nPos) ); *pStream << (UINT32) 0; } else @@ -1200,20 +1197,20 @@ BOOL SwLayCacheIoImpl::OpenRec( BYTE cType ) UINT32 nVal; *pStream >> nVal; BYTE cRecTyp = (BYTE)nVal; - aRecTypes.Insert( cRecTyp, nLvl ); - sal_uInt32 nSize = nVal >> 8; - aRecSizes.Insert( nPos + nSize, nLvl ); if( !nVal || cRecTyp != cType || pStream->GetErrorCode() != SVSTREAM_OK || pStream->IsEof() ) { OSL_ENSURE( nVal, "OpenRec: Record-Header is 0" ); - OSL_ENSURE( cRecTyp == cType, - "OpenRec: Wrong Record Type" ); - aRecTypes[nLvl] = 0; - aRecSizes[nLvl] = pStream->Tell(); + OSL_ENSURE( cRecTyp == cType, "OpenRec: Wrong Record Type" ); + aRecords.push_back( RecTypeSize(0, pStream->Tell()) ); bRes = sal_False; bError = TRUE; } + else + { + sal_uInt32 nSize = nVal >> 8; + aRecords.push_back( RecTypeSize(cRecTyp, nPos+nSize) ); + } } return bRes; } @@ -1223,19 +1220,16 @@ BOOL SwLayCacheIoImpl::OpenRec( BYTE cType ) BOOL SwLayCacheIoImpl::CloseRec( BYTE ) { BOOL bRes = TRUE; - UINT16 nLvl = aRecTypes.Count(); - OSL_ENSURE( nLvl == aRecSizes.Count(), "CloseRec: wrong Level" ); - OSL_ENSURE( nLvl, "CloseRec: no levels" ); - if( nLvl ) + OSL_ENSURE( !aRecords.empty(), "CloseRec: no levels" ); + if( !aRecords.empty() ) { - nLvl--; UINT32 nPos = pStream->Tell(); if( bWriteMode ) { - UINT32 nBgn = aRecSizes[nLvl]; + UINT32 nBgn = aRecords.back().size; pStream->Seek( nBgn ); UINT32 nSize = nPos - nBgn; - UINT32 nVal = ( nSize << 8 ) | aRecTypes[nLvl]; + UINT32 nVal = ( nSize << 8 ) | aRecords.back().type; *pStream << nVal; pStream->Seek( nPos ); if( pStream->GetError() != SVSTREAM_OK ) @@ -1243,7 +1237,7 @@ BOOL SwLayCacheIoImpl::CloseRec( BYTE ) } else { - UINT32 n = aRecSizes[nLvl]; + UINT32 n = aRecords.back().size; OSL_ENSURE( n >= nPos, "CloseRec: to much data read" ); if( n != nPos ) { @@ -1254,9 +1248,7 @@ BOOL SwLayCacheIoImpl::CloseRec( BYTE ) if( pStream->GetErrorCode() != SVSTREAM_OK ) bRes = FALSE; } - - aRecTypes.Remove( nLvl, 1 ); - aRecSizes.Remove( nLvl, 1 ); + aRecords.pop_back(); } if( !bRes ) @@ -1267,16 +1259,14 @@ BOOL SwLayCacheIoImpl::CloseRec( BYTE ) UINT32 SwLayCacheIoImpl::BytesLeft() { - UINT16 nLvl = aRecSizes.Count(); UINT32 n = 0; - if( !bError && nLvl ) + if( !bError && !aRecords.empty() ) { - UINT32 nEndPos = aRecSizes[ nLvl-1 ]; + UINT32 nEndPos = aRecords.back().size; UINT32 nPos = pStream->Tell(); if( nEndPos > nPos ) n = nEndPos - nPos; } - return n; } @@ -1301,7 +1291,7 @@ void SwLayCacheIoImpl::SkipRec() { BYTE c = Peek(); OpenRec( c ); - pStream->Seek( aRecSizes[aRecSizes.Count()-1] ); + pStream->Seek( aRecords.back().size ); CloseRec( c ); } diff --git a/sw/source/core/layout/layhelp.hxx b/sw/source/core/layout/layhelp.hxx index 71f74a2..009e462 100644 --- a/sw/source/core/layout/layhelp.hxx +++ b/sw/source/core/layout/layhelp.hxx @@ -35,6 +35,7 @@ #include <svl/svstdarr.hxx> #endif #include <swrect.hxx> +#include <vector> class SwDoc; class SwFrm; @@ -167,8 +168,13 @@ public: class SwLayCacheIoImpl { - SvBytes aRecTypes; - SvULongs aRecSizes; +private: + struct RecTypeSize { + BYTE type; + ULONG size; + RecTypeSize(BYTE typ, ULONG siz) : type(typ), size(siz) {} + }; + std::vector<RecTypeSize> aRecords; SvStream *pStream; -- 1.7.0.4
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice