From 53a227a707a52f1109f7e69022558afd2486659a Mon Sep 17 00:00:00 2001 From: Matteo Casalin Date: Fri, 2 Nov 2012 10:20:36 +0100 Subject: Don't play dirty tricks for const objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I92c2362b71cf3614b091c893c0fdb3248edb3ddd Reviewed-on: https://gerrit.libreoffice.org/973 Tested-by: Caolán McNamara Reviewed-by: Caolán McNamara --- sw/inc/bparr.hxx | 7 ++++--- sw/source/core/bastyp/bparr.cxx | 22 ++++++++-------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/sw/inc/bparr.hxx b/sw/inc/bparr.hxx index 2a644d385988..7ce0880f11d7 100644 --- a/sw/inc/bparr.hxx +++ b/sw/inc/bparr.hxx @@ -75,13 +75,14 @@ struct BlockInfo { // block info: class SW_DLLPUBLIC BigPtrArray { - BlockInfo** ppInf; // block info + BlockInfo** ppInf; // block info sal_uLong nSize; ///< number of elements sal_uInt16 nMaxBlock; ///< current max. number of blocks sal_uInt16 nBlock; ///< number of blocks - sal_uInt16 nCur; ///< last block + mutable + sal_uInt16 nCur; ///< last used block - sal_uInt16 Index2Block( sal_uLong ) const; ///< block search + sal_uInt16 Index2Block( sal_uLong ) const; ///< block search BlockInfo* InsBlock( sal_uInt16 ); ///< insert block void BlockDel( sal_uInt16 ); ///< some blocks were deleted void UpdIndex( sal_uInt16 ); ///< recalculate indices diff --git a/sw/source/core/bastyp/bparr.cxx b/sw/source/core/bastyp/bparr.cxx index 72d066e0ed10..49d196dc512e 100644 --- a/sw/source/core/bastyp/bparr.cxx +++ b/sw/source/core/bastyp/bparr.cxx @@ -128,11 +128,8 @@ void BigPtrArray::ForEach( sal_uLong nStart, sal_uLong nEnd, ElementPtr BigPtrArray::operator[]( sal_uLong idx ) const { assert(idx < nSize); // operator[]: Index out of bounds - // because this function is not : - BigPtrArray* pThis = (BigPtrArray*) this; - sal_uInt16 cur = Index2Block( idx ); - BlockInfo* p = ppInf[ cur ]; - pThis->nCur = cur; + nCur = Index2Block( idx ); + BlockInfo* p = ppInf[ nCur ]; return p->pData[ idx - p->nStart ]; } @@ -337,8 +334,8 @@ void BigPtrArray::Insert( const ElementPtr& rElem, sal_uLong pos ) ++( *--pTo = *--pFrom )->nOffset; } // insert element and update indices - ((ElementPtr&)rElem)->nOffset = sal_uInt16(pos); - ((ElementPtr&)rElem)->pBlock = p; + rElem->nOffset = sal_uInt16(pos); + rElem->pBlock = p; p->pData[ pos ] = rElem; p->nEnd++; p->nElem++; @@ -437,13 +434,10 @@ void BigPtrArray::Remove( sal_uLong pos, sal_uLong n ) void BigPtrArray::Replace( sal_uLong idx, const ElementPtr& rElem) { assert(idx < nSize); // Index out of bounds - // because this function ist not : - BigPtrArray* pThis = (BigPtrArray*) this; - sal_uInt16 cur = Index2Block( idx ); - BlockInfo* p = ppInf[ cur ]; - pThis->nCur = cur; - ((ElementPtr&)rElem)->nOffset = sal_uInt16(idx - p->nStart); - ((ElementPtr&)rElem)->pBlock = p; + nCur = Index2Block( idx ); + BlockInfo* p = ppInf[ nCur ]; + rElem->nOffset = sal_uInt16(idx - p->nStart); + rElem->pBlock = p; p->pData[ idx - p->nStart ] = rElem; } -- cgit