summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2011-09-02 18:12:45 -0400
committerKohei Yoshida <kohei.yoshida@suse.com>2011-09-06 23:45:55 -0400
commit2207f9c75a3f0d92501a26d259d5d68853168ba8 (patch)
tree66518c00cea943d602d416a79b7ff4b6c2f6bfa7 /svl
parentba75626b22c15785a418bd7645a508a2d99b12e4 (diff)
Refactored SfxItemPool for better encapsulation.
Basically everything except pItemInfos is under pImp. This will make it easier for future refactoring in the implementation area.
Diffstat (limited to 'svl')
-rw-r--r--svl/inc/svl/itempool.hxx70
-rw-r--r--svl/source/inc/poolio.hxx57
-rw-r--r--svl/source/items/itempool.cxx422
-rw-r--r--svl/source/items/poolio.cxx201
4 files changed, 393 insertions, 357 deletions
diff --git a/svl/inc/svl/itempool.hxx b/svl/inc/svl/itempool.hxx
index 03f17afd0a45..1711cef9871e 100644
--- a/svl/inc/svl/itempool.hxx
+++ b/svl/inc/svl/itempool.hxx
@@ -87,8 +87,6 @@ public:
virtual void ObjectInDestruction(const SfxItemPool& rSfxItemPool) = 0;
};
-typedef ::std::vector< SfxItemPoolUser* > SfxItemPoolUserVector;
-
class SVL_DLLPUBLIC SfxItemPool
/* [Beschreibung]
@@ -105,28 +103,14 @@ class SVL_DLLPUBLIC SfxItemPool
*/
{
- SVL_DLLPRIVATE void readTheItems(SvStream & rStream, sal_uInt32 nCount, sal_uInt16 nVersion,
- SfxPoolItem * pDefItem, SfxPoolItemArray_Impl ** pArr);
+ friend struct SfxItemPool_Impl;
- UniString aName;
- sal_uInt16 nStart, nEnd;
- sal_uInt16 _nFileFormatVersion;
#ifdef TF_POOLABLE
const SfxItemInfo* pItemInfos;
#else
#error "TF_POOLABLE should always be set."
#endif
SfxItemPool_Impl* pImp;
- SfxPoolItem** ppStaticDefaults;
- SfxPoolItem** ppPoolDefaults;
- SfxItemPool* pSecondary;
- SfxItemPool* pMaster;
- sal_uInt16* _pPoolRanges;
- bool bPersistentRefCounts;
-
-private:
- // ObjectUser section
- SfxItemPoolUserVector maSfxItemPoolUsers;
public:
void AddSfxItemPoolUser(SfxItemPoolUser& rNewUser);
@@ -138,8 +122,8 @@ public:
friend class SfxPoolWhichMap;
private:
- inline sal_uInt16 GetIndex_Impl(sal_uInt16 nWhich) const;
- inline sal_uInt16 GetSize_Impl() const { return nEnd - nStart + 1; }
+ sal_uInt16 GetIndex_Impl(sal_uInt16 nWhich) const;
+ sal_uInt16 GetSize_Impl() const;
SVL_DLLPRIVATE SvStream& Load1_Impl( SvStream &rStream );
SVL_DLLPRIVATE bool IsItemFlag_Impl( sal_uInt16 nWhich, sal_uInt16 nFlag ) const;
@@ -147,15 +131,16 @@ private:
public:
// fuer dflt. SfxItemSet::CTOR, setze dflt. WhichRanges
void FillItemIdRanges_Impl( sal_uInt16*& pWhichRanges ) const;
- const sal_uInt16* GetFrozenIdRanges() const
- { return _pPoolRanges; }
+ const sal_uInt16* GetFrozenIdRanges() const;
+
#endif
//---------------------------------------------------------------------
protected:
static inline void SetRefCount( SfxPoolItem& rItem, sal_uLong n );
- static inline sal_uLong AddRef( const SfxPoolItem& rItem, sal_uLong n = 1 );
- static inline sal_uLong ReleaseRef( const SfxPoolItem& rItem, sal_uLong n = 1);
+ static inline sal_uLong AddRef( const SfxPoolItem& rItem, sal_uLong n = 1 );
+ static inline sal_uLong ReleaseRef( const SfxPoolItem& rItem, sal_uLong n = 1);
+ static inline void SetKind( SfxPoolItem& rItem, sal_uInt16 nRef );
public:
SfxItemPool( const SfxItemPool &rPool,
@@ -196,7 +181,7 @@ public:
const IntlWrapper * pIntlWrapper
= 0 ) const;
virtual SfxItemPool* Clone() const;
- UniString const & GetName() const { return aName; }
+ const UniString& GetName() const;
virtual const SfxPoolItem& Put( const SfxPoolItem&, sal_uInt16 nWhich = 0 );
virtual void Remove( const SfxPoolItem& );
@@ -220,23 +205,18 @@ public:
virtual SvStream & Load(SvStream &);
virtual SvStream & Store(SvStream &) const;
- int HasPersistentRefCounts() const {
- return bPersistentRefCounts; }
+ bool HasPersistentRefCounts() const;
void LoadCompleted();
- sal_uInt16 GetFirstWhich() const { return nStart; }
- sal_uInt16 GetLastWhich() const { return nEnd; }
- bool IsInRange( sal_uInt16 nWhich ) const {
- return nWhich >= nStart &&
- nWhich <= nEnd; }
+ sal_uInt16 GetFirstWhich() const;
+ sal_uInt16 GetLastWhich() const;
+ bool IsInRange( sal_uInt16 nWhich ) const;
bool IsInVersionsRange( sal_uInt16 nWhich ) const;
bool IsInStoringRange( sal_uInt16 nWhich ) const;
void SetStoringRange( sal_uInt16 nFrom, sal_uInt16 nTo );
void SetSecondaryPool( SfxItemPool *pPool );
- SfxItemPool* GetSecondaryPool() const {
- return pSecondary; }
- SfxItemPool* GetMasterPool() const {
- return pMaster; }
+ SfxItemPool* GetSecondaryPool() const;
+ SfxItemPool* GetMasterPool() const;
void FreezeIdRanges();
void Delete();
@@ -250,18 +230,17 @@ public:
#else
#error "TF_POOLABLE should always be set."
#endif
- sal_uInt16 GetWhich( sal_uInt16 nSlot, sal_Bool bDeep = sal_True ) const;
- sal_uInt16 GetSlotId( sal_uInt16 nWhich, sal_Bool bDeep = sal_True ) const;
- sal_uInt16 GetTrueWhich( sal_uInt16 nSlot, sal_Bool bDeep = sal_True ) const;
- sal_uInt16 GetTrueSlotId( sal_uInt16 nWhich, sal_Bool bDeep = sal_True ) const;
+ sal_uInt16 GetWhich( sal_uInt16 nSlot, sal_Bool bDeep = sal_True ) const;
+ sal_uInt16 GetSlotId( sal_uInt16 nWhich, sal_Bool bDeep = sal_True ) const;
+ sal_uInt16 GetTrueWhich( sal_uInt16 nSlot, sal_Bool bDeep = sal_True ) const;
+ sal_uInt16 GetTrueSlotId( sal_uInt16 nWhich, sal_Bool bDeep = sal_True ) const;
void SetVersionMap( sal_uInt16 nVer,
sal_uInt16 nOldStart, sal_uInt16 nOldEnd,
sal_uInt16 *pWhichIdTab );
- sal_uInt16 GetNewWhich( sal_uInt16 nOldWhich ) const;
- sal_uInt16 GetVersion() const;
- sal_uInt16 GetFileFormatVersion() const
- { return _nFileFormatVersion; }
+ sal_uInt16 GetNewWhich( sal_uInt16 nOldWhich ) const;
+ sal_uInt16 GetVersion() const;
+ sal_uInt16 GetFileFormatVersion() const;
void SetFileFormatVersion( sal_uInt16 nFileFormatVersion );
bool IsCurrentVersionLoading() const;
@@ -296,6 +275,11 @@ inline sal_uLong SfxItemPool::ReleaseRef( const SfxPoolItem& rItem, sal_uLong n
return rItem.ReleaseRef(n);
}
+inline void SfxItemPool::SetKind( SfxPoolItem& rItem, sal_uInt16 nRef )
+{
+ rItem.SetKind( nRef );
+}
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svl/source/inc/poolio.hxx b/svl/source/inc/poolio.hxx
index bf2180770172..d1260322d409 100644
--- a/svl/source/inc/poolio.hxx
+++ b/svl/source/inc/poolio.hxx
@@ -28,6 +28,7 @@
#include <svl/brdcst.hxx>
#include <boost/shared_ptr.hpp>
#include <deque>
+#include <vector>
#ifndef DELETEZ
#define DELETEZ(pPtr) { delete pPtr; pPtr = 0; }
@@ -74,8 +75,18 @@ class SfxStyleSheetIterator;
struct SfxItemPool_Impl
{
SfxBroadcaster aBC;
- SfxPoolItemArray_Impl** ppPoolItems;
+ std::vector<SfxPoolItemArray_Impl*> maPoolItems;
+ std::vector<SfxItemPoolUser*> maSfxItemPoolUsers; /// ObjectUser section
+ UniString aName;
+ SfxPoolItem** ppPoolDefaults;
+ SfxPoolItem** ppStaticDefaults;
+ SfxItemPool* mpMaster;
+ SfxItemPool* mpSecondary;
+ sal_uInt16* mpPoolRanges;
SfxPoolVersionArr_Impl aVersions;
+ sal_uInt16 mnStart;
+ sal_uInt16 mnEnd;
+ sal_uInt16 mnFileFormatVersion;
sal_uInt16 nVersion;
sal_uInt16 nLoadingVersion;
sal_uInt16 nInitRefCount; // 1, beim Laden ggf. 2
@@ -85,9 +96,19 @@ struct SfxItemPool_Impl
SfxMapUnit eDefMetric;
bool bInSetItem;
bool bStreaming; // in Load() bzw. Store()
-
- SfxItemPool_Impl( sal_uInt16 nStart, sal_uInt16 nEnd )
- : ppPoolItems (new SfxPoolItemArray_Impl*[ nEnd - nStart + 1])
+ bool mbPersistentRefCounts;
+
+ SfxItemPool_Impl( SfxItemPool* pMaster, const UniString& rName, sal_uInt16 nStart, sal_uInt16 nEnd )
+ : maPoolItems(nEnd - nStart + 1, NULL)
+ , aName(rName)
+ , ppPoolDefaults(new SfxPoolItem* [nEnd - nStart + 1])
+ , ppStaticDefaults(0)
+ , mpMaster(pMaster)
+ , mpSecondary(NULL)
+ , mpPoolRanges(NULL)
+ , mnStart(nStart)
+ , mnEnd(nEnd)
+ , mnFileFormatVersion(0)
, nLoadingVersion(0)
, nInitRefCount(0)
, nVerStart(0)
@@ -99,19 +120,30 @@ struct SfxItemPool_Impl
, bInSetItem(false)
, bStreaming(false)
{
- memset( ppPoolItems, 0, sizeof( SfxPoolItemArray_Impl* ) * ( nEnd - nStart + 1) );
+ DBG_ASSERT(mnStart, "Start-Which-Id must be greater 0" );
+ memset( ppPoolDefaults, 0, sizeof( SfxPoolItem* ) * (nEnd - nStart + 1));
}
~SfxItemPool_Impl()
{
- delete[] ppPoolItems;
+ DeleteItems();
}
void DeleteItems()
{
- delete[] ppPoolItems;
- ppPoolItems = 0;
+ std::vector<SfxPoolItemArray_Impl*>::iterator itr = maPoolItems.begin(), itrEnd = maPoolItems.end();
+ for (; itr != itrEnd; ++itr)
+ delete *itr;
+ maPoolItems.clear();
+
+ delete[] mpPoolRanges;
+ mpPoolRanges = NULL;
+ delete[] ppPoolDefaults;
+ ppPoolDefaults = NULL;
}
+
+ void readTheItems(SvStream & rStream, sal_uInt32 nCount, sal_uInt16 nVersion,
+ SfxPoolItem * pDefItem, SfxPoolItemArray_Impl ** pArr);
};
// -----------------------------------------------------------------------
@@ -204,13 +236,4 @@ struct SfxItemPool_Impl
#define SFX_STYLES_REC_HEADER sal_uInt16(0x0010)
#define SFX_STYLES_REC_STYLES sal_uInt16(0x0020)
-//========================================================================
-
-inline sal_uInt16 SfxItemPool::GetIndex_Impl(sal_uInt16 nWhich) const
-{
- DBG_CHKTHIS(SfxItemPool, 0);
- DBG_ASSERT(nWhich >= nStart && nWhich <= nEnd, "Which-Id nicht im Pool-Bereich");
- return nWhich - nStart;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svl/source/items/itempool.cxx b/svl/source/items/itempool.cxx
index 920a4eb1e626..900b7c2e11b7 100644
--- a/svl/source/items/itempool.cxx
+++ b/svl/source/items/itempool.cxx
@@ -43,15 +43,16 @@
void SfxItemPool::AddSfxItemPoolUser(SfxItemPoolUser& rNewUser)
{
- maSfxItemPoolUsers.push_back(&rNewUser);
+ pImp->maSfxItemPoolUsers.push_back(&rNewUser);
}
void SfxItemPool::RemoveSfxItemPoolUser(SfxItemPoolUser& rOldUser)
{
- const SfxItemPoolUserVector::iterator aFindResult = ::std::find(maSfxItemPoolUsers.begin(), maSfxItemPoolUsers.end(), &rOldUser);
- if(aFindResult != maSfxItemPoolUsers.end())
+ const std::vector<SfxItemPoolUser*>::iterator aFindResult = ::std::find(
+ pImp->maSfxItemPoolUsers.begin(), pImp->maSfxItemPoolUsers.end(), &rOldUser);
+ if(aFindResult != pImp->maSfxItemPoolUsers.end())
{
- maSfxItemPoolUsers.erase(aFindResult);
+ pImp->maSfxItemPoolUsers.erase(aFindResult);
}
}
@@ -60,9 +61,9 @@ const SfxPoolItem* SfxItemPool::GetPoolDefaultItem( sal_uInt16 nWhich ) const
DBG_CHKTHIS(SfxItemPool, 0);
const SfxPoolItem* pRet;
if( IsInRange( nWhich ) )
- pRet = *(ppPoolDefaults + GetIndex_Impl( nWhich ));
- else if( pSecondary )
- pRet = pSecondary->GetPoolDefaultItem( nWhich );
+ pRet = *(pImp->ppPoolDefaults + GetIndex_Impl( nWhich ));
+ else if( pImp->mpSecondary )
+ pRet = pImp->mpSecondary->GetPoolDefaultItem( nWhich );
else
{
SFX_ASSERT( 0, nWhich, "unknown Which-Id - cannot get pool default" );
@@ -73,7 +74,7 @@ const SfxPoolItem* SfxItemPool::GetPoolDefaultItem( sal_uInt16 nWhich ) const
// -----------------------------------------------------------------------
-inline bool SfxItemPool::IsItemFlag_Impl( sal_uInt16 nPos, sal_uInt16 nFlag ) const
+bool SfxItemPool::IsItemFlag_Impl( sal_uInt16 nPos, sal_uInt16 nFlag ) const
{
sal_uInt16 nItemFlag = pItemInfos[nPos]._nFlags;
return nFlag == (nItemFlag & nFlag);
@@ -83,7 +84,7 @@ inline bool SfxItemPool::IsItemFlag_Impl( sal_uInt16 nPos, sal_uInt16 nFlag ) co
bool SfxItemPool::IsItemFlag( sal_uInt16 nWhich, sal_uInt16 nFlag ) const
{
- for ( const SfxItemPool *pPool = this; pPool; pPool = pPool->pSecondary )
+ for ( const SfxItemPool *pPool = this; pPool; pPool = pPool->pImp->mpSecondary )
{
if ( pPool->IsInRange(nWhich) )
return pPool->IsItemFlag_Impl( pPool->GetIndex_Impl(nWhich), nFlag);
@@ -120,7 +121,7 @@ SfxItemPool::SfxItemPool
#error "TF_POOLABLE should always be set."
#endif
bool bLoadRefCounts /* Ref-Counts mitladen oder auf 1 setzen */
-)
+) :
/* [Beschreibung]
@@ -153,38 +154,26 @@ SfxItemPool::SfxItemPool
<SfxItemPool::ReldaseDefaults(sal_Bool)>
*/
-: aName(rName),
- nStart(nStartWhich),
- nEnd(nEndWhich),
#ifdef TF_POOLABLE
pItemInfos(pInfos),
#else
#error "TF_POOLABLE should always be set."
#endif
- pImp( new SfxItemPool_Impl( nStart, nEnd ) ),
- ppStaticDefaults(0),
- ppPoolDefaults(new SfxPoolItem* [ nEndWhich - nStartWhich + 1]),
- pSecondary(0),
- pMaster(this),
- _pPoolRanges( 0 ),
- bPersistentRefCounts(bLoadRefCounts),
- maSfxItemPoolUsers()
+ pImp( new SfxItemPool_Impl( this, rName, nStartWhich, nEndWhich ) )
{
DBG_CTOR(SfxItemPool, 0);
- DBG_ASSERT(nStart, "Start-Which-Id must be greater 0" );
pImp->eDefMetric = SFX_MAPUNIT_TWIP;
pImp->nVersion = 0;
- pImp->bStreaming = sal_False;
+ pImp->bStreaming = false;
pImp->nLoadingVersion = 0;
pImp->nInitRefCount = 1;
- pImp->nVerStart = nStart;
- pImp->nVerEnd = nEnd;
+ pImp->nVerStart = pImp->mnStart;
+ pImp->nVerEnd = pImp->mnEnd;
pImp->bInSetItem = false;
pImp->nStoringStart = nStartWhich;
pImp->nStoringEnd = nEndWhich;
-
- memset( ppPoolDefaults, 0, sizeof( SfxPoolItem* ) * (nEnd - nStart + 1));
+ pImp->mbPersistentRefCounts = bLoadRefCounts;
if ( pDefaults )
SetDefaults(pDefaults);
@@ -202,7 +191,7 @@ SfxItemPool::SfxItemPool
sal_False
statische Defaults
"ubernehehmen */
-)
+) :
/* [Beschreibung]
@@ -214,22 +203,12 @@ SfxItemPool::SfxItemPool
<SfxItemPool::Clone()const>
*/
-: aName(rPool.aName),
- nStart(rPool.nStart),
- nEnd(rPool.nEnd),
#ifdef TF_POOLABLE
pItemInfos(rPool.pItemInfos),
#else
#error "TF_POOLABLE should always be set."
#endif
- pImp( new SfxItemPool_Impl( nStart, nEnd ) ),
- ppStaticDefaults(0),
- ppPoolDefaults(new SfxPoolItem* [ nEnd - nStart + 1]),
- pSecondary(0),
- pMaster(this),
- _pPoolRanges( 0 ),
- bPersistentRefCounts(rPool.bPersistentRefCounts ),
- maSfxItemPoolUsers()
+ pImp( new SfxItemPool_Impl( this, rPool.pImp->aName, rPool.pImp->mnStart, rPool.pImp->mnEnd ) )
{
DBG_CTOR(SfxItemPool, 0);
pImp->eDefMetric = rPool.pImp->eDefMetric;
@@ -240,32 +219,31 @@ SfxItemPool::SfxItemPool
pImp->nVerStart = rPool.pImp->nVerStart;
pImp->nVerEnd = rPool.pImp->nVerEnd;
pImp->bInSetItem = false;
- pImp->nStoringStart = nStart;
- pImp->nStoringEnd = nEnd;
-
- memset( ppPoolDefaults, 0, sizeof( SfxPoolItem* ) * (nEnd - nStart + 1));
+ pImp->nStoringStart = pImp->mnStart;
+ pImp->nStoringEnd = pImp->mnEnd;
+ pImp->mbPersistentRefCounts = rPool.pImp->mbPersistentRefCounts;
// Static Defaults "ubernehmen
if ( bCloneStaticDefaults )
{
- SfxPoolItem **ppDefaults = new SfxPoolItem*[nEnd-nStart+1];
- for ( sal_uInt16 n = 0; n <= nEnd - nStart; ++n )
+ SfxPoolItem **ppDefaults = new SfxPoolItem*[pImp->mnEnd-pImp->mnStart+1];
+ for ( sal_uInt16 n = 0; n <= pImp->mnEnd - pImp->mnStart; ++n )
{
- (*( ppDefaults + n )) = (*( rPool.ppStaticDefaults + n ))->Clone(this);
+ (*( ppDefaults + n )) = (*( rPool.pImp->ppStaticDefaults + n ))->Clone(this);
(*( ppDefaults + n ))->SetKind( SFX_ITEMS_STATICDEFAULT );
}
SetDefaults( ppDefaults );
}
else
- SetDefaults( rPool.ppStaticDefaults );
+ SetDefaults( rPool.pImp->ppStaticDefaults );
// Pool Defaults kopieren
- for ( sal_uInt16 n = 0; n <= nEnd - nStart; ++n )
- if ( (*( rPool.ppPoolDefaults + n )) )
+ for ( sal_uInt16 n = 0; n <= pImp->mnEnd - pImp->mnStart; ++n )
+ if ( (*( rPool.pImp->ppPoolDefaults + n )) )
{
- (*( ppPoolDefaults + n )) = (*( rPool.ppPoolDefaults + n ))->Clone(this);
- (*( ppPoolDefaults + n ))->SetKind( SFX_ITEMS_POOLDEFAULT );
+ (*( pImp->ppPoolDefaults + n )) = (*( rPool.pImp->ppPoolDefaults + n ))->Clone(this);
+ (*( pImp->ppPoolDefaults + n ))->SetKind( SFX_ITEMS_POOLDEFAULT );
}
// Copy Version-Map
@@ -277,8 +255,8 @@ SfxItemPool::SfxItemPool
}
// Verkettung wiederherstellen
- if ( rPool.pSecondary )
- SetSecondaryPool( rPool.pSecondary->Clone() );
+ if ( rPool.pImp->mpSecondary )
+ SetSecondaryPool( rPool.pImp->mpSecondary->Clone() );
}
// -----------------------------------------------------------------------
@@ -287,21 +265,21 @@ void SfxItemPool::SetDefaults( SfxPoolItem **pDefaults )
{
DBG_CHKTHIS(SfxItemPool, 0);
DBG_ASSERT( pDefaults, "erst wollen, dann nichts geben..." );
- DBG_ASSERT( !ppStaticDefaults, "habe schon defaults" );
+ DBG_ASSERT( !pImp->ppStaticDefaults, "habe schon defaults" );
- ppStaticDefaults = pDefaults;
+ pImp->ppStaticDefaults = pDefaults;
//! if ( (*ppStaticDefaults)->GetKind() != SFX_ITEMS_STATICDEFAULT )
//! geht wohl nicht im Zshg mit SetItems, die hinten stehen
{
- DBG_ASSERT( (*ppStaticDefaults)->GetRefCount() == 0 ||
- IsDefaultItem( (*ppStaticDefaults) ),
+ DBG_ASSERT( (*pImp->ppStaticDefaults)->GetRefCount() == 0 ||
+ IsDefaultItem( (*pImp->ppStaticDefaults) ),
"das sind keine statics" );
- for ( sal_uInt16 n = 0; n <= nEnd - nStart; ++n )
+ for ( sal_uInt16 n = 0; n <= pImp->mnEnd - pImp->mnStart; ++n )
{
- SFX_ASSERT( (*( ppStaticDefaults + n ))->Which() == n + nStart,
- n + nStart, "static defaults not sorted" );
- (*( ppStaticDefaults + n ))->SetKind( SFX_ITEMS_STATICDEFAULT );
- DBG_ASSERT( !(pImp->ppPoolItems[n]), "defaults with setitems with items?!" );
+ SFX_ASSERT( (*( pImp->ppStaticDefaults + n ))->Which() == n + pImp->mnStart,
+ n + pImp->mnStart, "static defaults not sorted" );
+ (*( pImp->ppStaticDefaults + n ))->SetKind( SFX_ITEMS_STATICDEFAULT );
+ DBG_ASSERT( !(pImp->maPoolItems[n]), "defaults with setitems with items?!" );
}
}
}
@@ -329,13 +307,13 @@ void SfxItemPool::ReleaseDefaults
*/
{
- DBG_ASSERT( ppStaticDefaults, "keine Arme keine Kekse" );
- ReleaseDefaults( ppStaticDefaults, nEnd - nStart + 1, bDelete );
+ DBG_ASSERT( pImp->ppStaticDefaults, "keine Arme keine Kekse" );
+ ReleaseDefaults( pImp->ppStaticDefaults, pImp->mnEnd - pImp->mnStart + 1, bDelete );
// KSO (22.10.98): ppStaticDefaults zeigt auf geloeschten Speicher,
// wenn bDelete == sal_True.
if ( bDelete )
- ppStaticDefaults = 0;
+ pImp->ppStaticDefaults = 0;
}
// -----------------------------------------------------------------------
@@ -386,11 +364,10 @@ void SfxItemPool::ReleaseDefaults
SfxItemPool::~SfxItemPool()
{
DBG_DTOR(SfxItemPool, 0);
- DBG_ASSERT( pMaster == this, "destroying active Secondary-Pool" );
+ DBG_ASSERT( pImp->mpMaster == this, "destroying active Secondary-Pool" );
- if ( pImp->ppPoolItems && ppPoolDefaults )
+ if ( !pImp->maPoolItems.empty() && pImp->ppPoolDefaults )
Delete();
- delete[] _pPoolRanges;
delete pImp;
}
@@ -399,8 +376,8 @@ void SfxItemPool::Free(SfxItemPool* pPool)
if(pPool)
{
// tell all the registered SfxItemPoolUsers that the pool is in destruction
- SfxItemPoolUserVector aListCopy(pPool->maSfxItemPoolUsers.begin(), pPool->maSfxItemPoolUsers.end());
- for(SfxItemPoolUserVector::iterator aIterator = aListCopy.begin(); aIterator != aListCopy.end(); ++aIterator)
+ std::vector<SfxItemPoolUser*> aListCopy(pPool->pImp->maSfxItemPoolUsers.begin(), pPool->pImp->maSfxItemPoolUsers.end());
+ for(std::vector<SfxItemPoolUser*>::iterator aIterator = aListCopy.begin(); aIterator != aListCopy.end(); ++aIterator)
{
SfxItemPoolUser* pSfxItemPoolUser = *aIterator;
DBG_ASSERT(pSfxItemPoolUser, "corrupt SfxItemPoolUser list (!)");
@@ -409,7 +386,7 @@ void SfxItemPool::Free(SfxItemPool* pPool)
// Clear the vector. This means that user do not need to call RemoveSfxItemPoolUser()
// when they get called from ObjectInDestruction().
- pPool->maSfxItemPoolUsers.clear();
+ pPool->pImp->maSfxItemPoolUsers.clear();
// delete pool
delete pPool;
@@ -422,36 +399,35 @@ void SfxItemPool::Free(SfxItemPool* pPool)
void SfxItemPool::SetSecondaryPool( SfxItemPool *pPool )
{
// ggf. an abgeh"angten Pools den Master zur"ucksetzen
- if ( pSecondary )
+ if ( pImp->mpSecondary )
{
#ifdef DBG_UTIL
HACK( "fuer Image, dort gibt es derzeit keine Statics - Bug" )
- if ( ppStaticDefaults )
+ if ( pImp->ppStaticDefaults )
{
// Delete() ist noch nicht gelaufen?
- if ( pImp->ppPoolItems && pSecondary->pImp->ppPoolItems )
+ if ( !pImp->maPoolItems.empty() && !pImp->mpSecondary->pImp->maPoolItems.empty() )
{
// hat der master SetItems?
sal_Bool bHasSetItems = sal_False;
- for ( sal_uInt16 i = 0; !bHasSetItems && i < nEnd-nStart; ++i )
- bHasSetItems = ppStaticDefaults[i]->ISA(SfxSetItem);
+ for ( sal_uInt16 i = 0; !bHasSetItems && i < pImp->mnEnd - pImp->mnStart; ++i )
+ bHasSetItems = pImp->ppStaticDefaults[i]->ISA(SfxSetItem);
// abgehaengte Pools muessen leer sein
- sal_Bool bOK = bHasSetItems;
+ bool bOK = bHasSetItems;
for ( sal_uInt16 n = 0;
- bOK && n <= pSecondary->nEnd - pSecondary->nStart;
+ bOK && n <= pImp->mpSecondary->pImp->mnEnd - pImp->mpSecondary->pImp->mnStart;
++n )
{
- SfxPoolItemArray_Impl** ppItemArr =
- pSecondary->pImp->ppPoolItems + n;
- if ( *ppItemArr )
+ SfxPoolItemArray_Impl* pItemArr = pImp->mpSecondary->pImp->maPoolItems[n];
+ if ( pItemArr )
{
- SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*ppItemArr)->begin();
- for( size_t i = (*ppItemArr)->size(); i; ++ppHtArr, --i )
+ SfxPoolItemArrayBase_Impl::iterator ppHtArr = pItemArr->begin();
+ for( size_t i = pItemArr->size(); i; ++ppHtArr, --i )
if ( !(*ppHtArr) )
{
OSL_FAIL( "old secondary pool must be empty" );
- bOK = sal_False;
+ bOK = false;
break;
}
}
@@ -460,19 +436,19 @@ void SfxItemPool::SetSecondaryPool( SfxItemPool *pPool )
}
#endif
- pSecondary->pMaster = pSecondary;
- for ( SfxItemPool *p = pSecondary->pSecondary; p; p = p->pSecondary )
- p->pMaster = pSecondary;
+ pImp->mpSecondary->pImp->mpMaster = pImp->mpSecondary;
+ for ( SfxItemPool *p = pImp->mpSecondary->pImp->mpSecondary; p; p = p->pImp->mpSecondary )
+ p->pImp->mpMaster = pImp->mpSecondary;
}
// ggf. den Master der neuen Secondary-Pools setzen
- DBG_ASSERT( !pPool || pPool->pMaster == pPool, "Secondary tanzt auf zwei Hochzeiten " );
- SfxItemPool *pNewMaster = pMaster ? pMaster : this;
- for ( SfxItemPool *p = pPool; p; p = p->pSecondary )
- p->pMaster = pNewMaster;
+ DBG_ASSERT( !pPool || pPool->pImp->mpMaster == pPool, "Secondary tanzt auf zwei Hochzeiten " );
+ SfxItemPool *pNewMaster = pImp->mpMaster ? pImp->mpMaster : this;
+ for ( SfxItemPool *p = pPool; p; p = p->pImp->mpSecondary )
+ p->pImp->mpMaster = pNewMaster;
// neuen Secondary-Pool merken
- pSecondary = pPool;
+ pImp->mpSecondary = pPool;
}
// -----------------------------------------------------------------------
@@ -493,6 +469,11 @@ void SfxItemPool::SetDefaultMetric( SfxMapUnit eNewMetric )
pImp->eDefMetric = eNewMetric;
}
+const UniString& SfxItemPool::GetName() const
+{
+ return pImp->aName;
+}
+
// -----------------------------------------------------------------------
SfxItemPresentation SfxItemPool::GetPresentation
@@ -544,7 +525,7 @@ void SfxItemPool::Delete()
DBG_CHKTHIS(SfxItemPool, 0);
// schon deleted?
- if ( !pImp->ppPoolItems || !ppPoolDefaults )
+ if ( pImp->maPoolItems.empty() || !pImp->ppPoolDefaults )
return;
// z.B. laufenden Requests bescheidsagen
@@ -553,28 +534,28 @@ void SfxItemPool::Delete()
//MA 16. Apr. 97: Zweimal durchlaufen, in der ersten Runde fuer die SetItems.
//Der Klarheit halber wird das jetzt in zwei besser lesbare Schleifen aufgeteilt.
- SfxPoolItemArray_Impl** ppItemArr = pImp->ppPoolItems;
- SfxPoolItem** ppDefaultItem = ppPoolDefaults;
- SfxPoolItem** ppStaticDefaultItem = ppStaticDefaults;
+ std::vector<SfxPoolItemArray_Impl*>::iterator itrItemArr = pImp->maPoolItems.begin();
+ SfxPoolItem** ppDefaultItem = pImp->ppPoolDefaults;
+ SfxPoolItem** ppStaticDefaultItem = pImp->ppStaticDefaults;
sal_uInt16 nArrCnt;
//Erst die SetItems abraeumen
HACK( "fuer Image, dort gibt es derzeit keine Statics - Bug" )
- if ( ppStaticDefaults )
+ if ( pImp->ppStaticDefaults )
{
for ( nArrCnt = GetSize_Impl();
nArrCnt;
- --nArrCnt, ++ppItemArr, ++ppDefaultItem, ++ppStaticDefaultItem )
+ --nArrCnt, ++itrItemArr, ++ppDefaultItem, ++ppStaticDefaultItem )
{
// KSO (22.10.98): *ppStaticDefaultItem kann im dtor einer
// von SfxItemPool abgeleiteten Klasse bereits geloescht worden
// sein! -> CHAOS Itempool
if ( *ppStaticDefaultItem && (*ppStaticDefaultItem)->ISA(SfxSetItem) )
{
- if ( *ppItemArr )
+ if ( *itrItemArr )
{
- SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*ppItemArr)->begin();
- for ( size_t n = (*ppItemArr)->size(); n; --n, ++ppHtArr )
+ SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin();
+ for ( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr )
if (*ppHtArr)
{
#ifdef DBG_UTIL
@@ -582,7 +563,7 @@ void SfxItemPool::Delete()
#endif
delete *ppHtArr;
}
- DELETEZ( *ppItemArr );
+ DELETEZ( *itrItemArr );
}
if ( *ppDefaultItem )
{
@@ -595,18 +576,18 @@ void SfxItemPool::Delete()
}
}
- ppItemArr = pImp->ppPoolItems;
- ppDefaultItem = ppPoolDefaults;
+ itrItemArr = pImp->maPoolItems.begin();
+ ppDefaultItem = pImp->ppPoolDefaults;
//Jetzt die 'einfachen' Items
for ( nArrCnt = GetSize_Impl();
nArrCnt;
- --nArrCnt, ++ppItemArr, ++ppDefaultItem )
+ --nArrCnt, ++itrItemArr, ++ppDefaultItem )
{
- if ( *ppItemArr )
+ if ( *itrItemArr )
{
- SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*ppItemArr)->begin();
- for ( size_t n = (*ppItemArr)->size(); n; --n, ++ppHtArr )
+ SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin();
+ for ( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr )
if (*ppHtArr)
{
#ifdef DBG_UTIL
@@ -614,7 +595,7 @@ void SfxItemPool::Delete()
#endif
delete *ppHtArr;
}
- delete *ppItemArr;
+ DELETEZ( *itrItemArr );
}
if ( *ppDefaultItem )
{
@@ -626,7 +607,6 @@ void SfxItemPool::Delete()
}
pImp->DeleteItems();
- delete[] ppPoolDefaults; ppPoolDefaults = 0;
}
// ----------------------------------------------------------------------
@@ -637,7 +617,7 @@ void SfxItemPool::SetPoolDefaultItem(const SfxPoolItem &rItem)
if ( IsInRange(rItem.Which()) )
{
SfxPoolItem **ppOldDefault =
- ppPoolDefaults + GetIndex_Impl(rItem.Which());
+ pImp->ppPoolDefaults + GetIndex_Impl(rItem.Which());
SfxPoolItem *pNewDefault = rItem.Clone(this);
pNewDefault->SetKind(SFX_ITEMS_POOLDEFAULT);
if ( *ppOldDefault )
@@ -647,8 +627,8 @@ void SfxItemPool::SetPoolDefaultItem(const SfxPoolItem &rItem)
}
*ppOldDefault = pNewDefault;
}
- else if ( pSecondary )
- pSecondary->SetPoolDefaultItem(rItem);
+ else if ( pImp->mpSecondary )
+ pImp->mpSecondary->SetPoolDefaultItem(rItem);
else
{
SFX_ASSERT( 0, rItem.Which(), "unknown Which-Id - cannot set pool default" );
@@ -665,15 +645,15 @@ void SfxItemPool::ResetPoolDefaultItem( sal_uInt16 nWhichId )
if ( IsInRange(nWhichId) )
{
SfxPoolItem **ppOldDefault =
- ppPoolDefaults + GetIndex_Impl( nWhichId );
+ pImp->ppPoolDefaults + GetIndex_Impl( nWhichId );
if ( *ppOldDefault )
{
(*ppOldDefault)->SetRefCount(0);
DELETEZ( *ppOldDefault );
}
}
- else if ( pSecondary )
- pSecondary->ResetPoolDefaultItem(nWhichId);
+ else if ( pImp->mpSecondary )
+ pImp->mpSecondary->ResetPoolDefaultItem(nWhichId);
else
{
SFX_ASSERT( 0, nWhichId, "unknown Which-Id - cannot set pool default" );
@@ -693,11 +673,11 @@ const SfxPoolItem& SfxItemPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich
nWhich = rItem.Which();
// richtigen Secondary-Pool finden
- sal_Bool bSID = nWhich > SFX_WHICH_MAX;
+ bool bSID = nWhich > SFX_WHICH_MAX;
if ( !bSID && !IsInRange(nWhich) )
{
- if ( pSecondary )
- return pSecondary->Put( rItem, nWhich );
+ if ( pImp->mpSecondary )
+ return pImp->mpSecondary->Put( rItem, nWhich );
OSL_FAIL( "unknown Which-Id - cannot put item" );
}
@@ -709,7 +689,7 @@ const SfxPoolItem& SfxItemPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich
SFX_ASSERT( USHRT_MAX != nIndex || rItem.Which() != nWhich ||
!IsDefaultItem(&rItem) || rItem.GetKind() == SFX_ITEMS_DELETEONIDLE,
nWhich, "ein nicht Pool-Item ist Default?!" );
- SfxPoolItem *pPoolItem = rItem.Clone(pMaster);
+ SfxPoolItem *pPoolItem = rItem.Clone(pImp->mpMaster);
pPoolItem->SetWhich(nWhich);
AddRef( *pPoolItem );
return *pPoolItem;
@@ -718,70 +698,72 @@ const SfxPoolItem& SfxItemPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich
SFX_ASSERT( rItem.IsA(GetDefaultItem(nWhich).Type()), nWhich,
"SFxItemPool: wrong item type in Put" );
- SfxPoolItemArray_Impl** ppItemArr = pImp->ppPoolItems + nIndex;
- if( !*ppItemArr )
- *ppItemArr = new SfxPoolItemArray_Impl;
+ SfxPoolItemArray_Impl* pItemArr = pImp->maPoolItems[nIndex];
+ if (!pItemArr)
+ {
+ pImp->maPoolItems[nIndex] = new SfxPoolItemArray_Impl;
+ pItemArr = pImp->maPoolItems[nIndex];
+ }
SfxPoolItemArrayBase_Impl::iterator ppFree;
- sal_Bool ppFreeIsSet = sal_False;
- SfxPoolItemArrayBase_Impl::iterator ppHtArray = (*ppItemArr)->begin();
+ bool ppFreeIsSet = false;
if ( IsItemFlag_Impl( nIndex, SFX_ITEM_POOLABLE ) )
{
// wenn es ueberhaupt gepoolt ist, koennte es schon drin sein
if ( IsPooledItem(&rItem) )
{
// 1. Schleife: teste ob der Pointer vorhanden ist.
- for( size_t n = (*ppItemArr)->size(); n; ++ppHtArray, --n )
- if( &rItem == (*ppHtArray) )
- {
- AddRef( **ppHtArray );
- return **ppHtArray;
- }
+ SfxPoolItemArrayBase_Impl::iterator itr =
+ std::find(pItemArr->begin(), pItemArr->end(), &rItem);
+ if (itr != pItemArr->end())
+ {
+ AddRef(**itr);
+ return **itr;
+ }
}
// 2. Schleife: dann muessen eben die Attribute verglichen werden
- size_t n;
- for ( n = (*ppItemArr)->size(), ppHtArray = (*ppItemArr)->begin();
- n; ++ppHtArray, --n )
+ SfxPoolItemArrayBase_Impl::iterator itr = pItemArr->begin();
+ for (; itr != pItemArr->end(); ++itr)
{
- if ( *ppHtArray )
+ if (*itr)
{
- if( **ppHtArray == rItem )
+ if (**itr == rItem)
{
- AddRef( **ppHtArray );
- return **ppHtArray;
+ AddRef(**itr);
+ return **itr;
}
}
else
- if ( ppFreeIsSet == sal_False )
+ {
+ if (!ppFreeIsSet)
{
- ppFree = ppHtArray;
- ppFreeIsSet = sal_True;
+ ppFree = itr;
+ ppFreeIsSet = true;
}
+ }
}
}
else
{
// freien Platz suchen
- SfxPoolItemArrayBase_Impl::iterator ppHtArr;
- size_t n, nCount = (*ppItemArr)->size();
- for ( n = (*ppItemArr)->nFirstFree,
- ppHtArr = (*ppItemArr)->begin() + n;
- n < nCount;
- ++ppHtArr, ++n )
- if ( !*ppHtArr )
+ SfxPoolItemArrayBase_Impl::iterator itr = pItemArr->begin();
+ std::advance(itr, pItemArr->nFirstFree);
+ for (; itr != pItemArr->end(); ++itr)
+ {
+ if (!*itr)
{
- ppFree = ppHtArr;
- ppFreeIsSet = sal_True;
+ ppFree = itr;
+ ppFreeIsSet = true;
break;
}
-
+ }
// naechstmoeglichen freien Platz merken
- (*ppItemArr)->nFirstFree = n;
+ pItemArr->nFirstFree = std::distance(pItemArr->begin(), itr);
}
// nicht vorhanden, also im PtrArray eintragen
- SfxPoolItem* pNewItem = rItem.Clone(pMaster);
+ SfxPoolItem* pNewItem = rItem.Clone(pImp->mpMaster);
pNewItem->SetWhich(nWhich);
#ifdef DBG_UTIL
SFX_ASSERT( rItem.Type() == pNewItem->Type(), nWhich, "unequal types in Put(): no Clone()?" )
@@ -800,9 +782,9 @@ const SfxPoolItem& SfxItemPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich
#endif
#endif
AddRef( *pNewItem, pImp->nInitRefCount );
- SfxPoolItem* pTemp = pNewItem;
- if ( ppFreeIsSet == sal_False )
- (*ppItemArr)->push_back( pTemp );
+
+ if ( ppFreeIsSet == false )
+ pItemArr->push_back( pNewItem );
else
{
DBG_ASSERT( *ppFree == 0, "using surrogate in use" );
@@ -826,12 +808,12 @@ void SfxItemPool::Remove( const SfxPoolItem& rItem )
// richtigen Secondary-Pool finden
const sal_uInt16 nWhich = rItem.Which();
- sal_Bool bSID = nWhich > SFX_WHICH_MAX;
+ bool bSID = nWhich > SFX_WHICH_MAX;
if ( !bSID && !IsInRange(nWhich) )
{
- if ( pSecondary )
+ if ( pImp->mpSecondary )
{
- pSecondary->Remove( rItem );
+ pImp->mpSecondary->Remove( rItem );
return;
}
OSL_FAIL( "unknown Which-Id - cannot remove item" );
@@ -856,35 +838,38 @@ void SfxItemPool::Remove( const SfxPoolItem& rItem )
// statische Defaults sind eben einfach da
if ( rItem.GetKind() == SFX_ITEMS_STATICDEFAULT &&
- &rItem == *( ppStaticDefaults + GetIndex_Impl(nWhich) ) )
+ &rItem == *( pImp->ppStaticDefaults + GetIndex_Impl(nWhich) ) )
return;
// Item im eigenen Pool suchen
- SfxPoolItemArray_Impl** ppItemArr = (pImp->ppPoolItems + nIndex);
- SFX_ASSERT( *ppItemArr, rItem.Which(), "removing Item not in Pool" );
- SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*ppItemArr)->begin();
- for( size_t n = (*ppItemArr)->size(); n; ++ppHtArr, --n )
- if( *ppHtArr == &rItem )
+ SfxPoolItemArray_Impl* pItemArr = pImp->maPoolItems[nIndex];
+ SFX_ASSERT( pItemArr, rItem.Which(), "removing Item not in Pool" );
+ SfxPoolItemArrayBase_Impl::iterator ppHtArrBeg = pItemArr->begin(), ppHtArrEnd = pItemArr->end();
+ for (SfxPoolItemArrayBase_Impl::iterator ppHtArr = ppHtArrBeg; ppHtArr != ppHtArrEnd; ++ppHtArr)
+ {
+ SfxPoolItem*& p = *ppHtArr;
+ if (p == &rItem)
{
- if ( (*ppHtArr)->GetRefCount() ) //!
- ReleaseRef( **ppHtArr );
+ if ( p->GetRefCount() ) //!
+ ReleaseRef( *p );
else
{
SFX_ASSERT( 0, rItem.Which(), "removing Item without ref" );
- SFX_TRACE( "to be removed, but not no refs: ", *ppHtArr );
+ SFX_TRACE( "to be removed, but not no refs: ", p );
}
// ggf. kleinstmoegliche freie Position merken
- size_t nPos = (*ppItemArr)->size() - n;
- if ( (*ppItemArr)->nFirstFree > nPos )
- (*ppItemArr)->nFirstFree = nPos;
+ size_t nPos = std::distance(ppHtArrBeg, ppHtArr);
+ if ( pItemArr->nFirstFree > nPos )
+ pItemArr->nFirstFree = nPos;
//! MI: Hack, solange wir das Problem mit dem Outliner haben
//! siehe anderes MI-REF
- if ( 0 == (*ppHtArr)->GetRefCount() && nWhich < 4000 )
- DELETEZ(*ppHtArr);
+ if ( 0 == p->GetRefCount() && nWhich < 4000 )
+ DELETEZ(p);
return;
}
+ }
// nicht vorhanden
SFX_ASSERT( 0, rItem.Which(), "removing Item not in Pool" );
@@ -899,21 +884,28 @@ const SfxPoolItem& SfxItemPool::GetDefaultItem( sal_uInt16 nWhich ) const
if ( !IsInRange(nWhich) )
{
- if ( pSecondary )
- return pSecondary->GetDefaultItem( nWhich );
+ if ( pImp->mpSecondary )
+ return pImp->mpSecondary->GetDefaultItem( nWhich );
SFX_ASSERT( 0, nWhich, "unknown which - dont ask me for defaults" );
}
- DBG_ASSERT( ppStaticDefaults, "no defaults known - dont ask me for defaults" );
+ DBG_ASSERT( pImp->ppStaticDefaults, "no defaults known - dont ask me for defaults" );
sal_uInt16 nPos = GetIndex_Impl(nWhich);
- SfxPoolItem *pDefault = *(ppPoolDefaults + nPos);
+ SfxPoolItem *pDefault = *(pImp->ppPoolDefaults + nPos);
if ( pDefault )
return *pDefault;
- return **(ppStaticDefaults + nPos);
+ return **(pImp->ppStaticDefaults + nPos);
}
-// -----------------------------------------------------------------------
+SfxItemPool* SfxItemPool::GetSecondaryPool() const
+{
+ return pImp->mpSecondary;
+}
+SfxItemPool* SfxItemPool::GetMasterPool() const
+{
+ return pImp->mpMaster;
+}
void SfxItemPool::FreezeIdRanges()
@@ -927,7 +919,7 @@ void SfxItemPool::FreezeIdRanges()
*/
{
- FillItemIdRanges_Impl( _pPoolRanges );
+ FillItemIdRanges_Impl( pImp->mpPoolRanges );
}
@@ -936,25 +928,28 @@ void SfxItemPool::FreezeIdRanges()
void SfxItemPool::FillItemIdRanges_Impl( sal_uInt16*& pWhichRanges ) const
{
DBG_CHKTHIS(SfxItemPool, 0);
- DBG_ASSERT( !_pPoolRanges, "GetFrozenRanges() would be faster!" );
+ DBG_ASSERT( !pImp->mpPoolRanges, "GetFrozenRanges() would be faster!" );
const SfxItemPool *pPool;
sal_uInt16 nLevel = 0;
- for( pPool = this; pPool; pPool = pPool->pSecondary )
+ for( pPool = this; pPool; pPool = pPool->pImp->mpSecondary )
++nLevel;
pWhichRanges = new sal_uInt16[ 2*nLevel + 1 ];
nLevel = 0;
- for( pPool = this; pPool; pPool = pPool->pSecondary )
+ for( pPool = this; pPool; pPool = pPool->pImp->mpSecondary )
{
- *(pWhichRanges+(nLevel++)) = pPool->nStart;
- *(pWhichRanges+(nLevel++)) = pPool->nEnd;
+ *(pWhichRanges+(nLevel++)) = pPool->pImp->mnStart;
+ *(pWhichRanges+(nLevel++)) = pPool->pImp->mnEnd;
*(pWhichRanges+nLevel) = 0;
}
}
-// -----------------------------------------------------------------------
+const sal_uInt16* SfxItemPool::GetFrozenIdRanges() const
+{
+ return pImp->mpPoolRanges;
+}
const SfxPoolItem *SfxItemPool::GetItem2(sal_uInt16 nWhich, sal_uInt32 nOfst) const
{
@@ -962,17 +957,17 @@ const SfxPoolItem *SfxItemPool::GetItem2(sal_uInt16 nWhich, sal_uInt32 nOfst) co
if ( !IsInRange(nWhich) )
{
- if ( pSecondary )
- return pSecondary->GetItem2( nWhich, nOfst );
+ if ( pImp->mpSecondary )
+ return pImp->mpSecondary->GetItem2( nWhich, nOfst );
SFX_ASSERT( 0, nWhich, "unknown Which-Id - cannot resolve surrogate" );
return 0;
}
// dflt-Attribut?
if ( nOfst == SFX_ITEMS_DEFAULT )
- return *(ppStaticDefaults + GetIndex_Impl(nWhich));
+ return *(pImp->ppStaticDefaults + GetIndex_Impl(nWhich));
- SfxPoolItemArray_Impl* pItemArr = *(pImp->ppPoolItems + GetIndex_Impl(nWhich));
+ SfxPoolItemArray_Impl* pItemArr = pImp->maPoolItems[GetIndex_Impl(nWhich)];
if( pItemArr && nOfst < pItemArr->size() )
return (*pItemArr)[nOfst];
@@ -987,13 +982,13 @@ sal_uInt32 SfxItemPool::GetItemCount2(sal_uInt16 nWhich) const
if ( !IsInRange(nWhich) )
{
- if ( pSecondary )
- return pSecondary->GetItemCount2( nWhich );
+ if ( pImp->mpSecondary )
+ return pImp->mpSecondary->GetItemCount2( nWhich );
SFX_ASSERT( 0, nWhich, "unknown Which-Id - cannot resolve surrogate" );
return 0;
}
- SfxPoolItemArray_Impl* pItemArr = *(pImp->ppPoolItems + GetIndex_Impl(nWhich));
+ SfxPoolItemArray_Impl* pItemArr = pImp->maPoolItems[GetIndex_Impl(nWhich)];
if ( pItemArr )
return pItemArr->size();
return 0;
@@ -1007,15 +1002,15 @@ sal_uInt16 SfxItemPool::GetWhich( sal_uInt16 nSlotId, sal_Bool bDeep ) const
return nSlotId;
#ifdef TF_POOLABLE
- sal_uInt16 nCount = nEnd - nStart + 1;
+ sal_uInt16 nCount = pImp->mnEnd - pImp->mnStart + 1;
for ( sal_uInt16 nOfs = 0; nOfs < nCount; ++nOfs )
if ( pItemInfos[nOfs]._nSID == nSlotId )
- return nOfs + nStart;
+ return nOfs + pImp->mnStart;
#else
#error "TF_POOLABLE should always be set."
#endif
- if ( pSecondary && bDeep )
- return pSecondary->GetWhich(nSlotId);
+ if ( pImp->mpSecondary && bDeep )
+ return pImp->mpSecondary->GetWhich(nSlotId);
return nSlotId;
}
@@ -1028,14 +1023,14 @@ sal_uInt16 SfxItemPool::GetSlotId( sal_uInt16 nWhich, sal_Bool bDeep ) const
if ( !IsInRange( nWhich ) )
{
- if ( pSecondary && bDeep )
- return pSecondary->GetSlotId(nWhich);
+ if ( pImp->mpSecondary && bDeep )
+ return pImp->mpSecondary->GetSlotId(nWhich);
SFX_ASSERT( 0, nWhich, "unknown Which-Id - cannot get slot-id" );
return 0;
}
#ifdef TF_POOLABLE
- sal_uInt16 nSID = pItemInfos[nWhich - nStart]._nSID;
+ sal_uInt16 nSID = pItemInfos[nWhich - pImp->mnStart]._nSID;
return nSID ? nSID : nWhich;
#else
#error "TF_POOLABLE should always be set."
@@ -1050,15 +1045,15 @@ sal_uInt16 SfxItemPool::GetTrueWhich( sal_uInt16 nSlotId, sal_Bool bDeep ) const
return 0;
#ifdef TF_POOLABLE
- sal_uInt16 nCount = nEnd - nStart + 1;
+ sal_uInt16 nCount = pImp->mnEnd - pImp->mnStart + 1;
for ( sal_uInt16 nOfs = 0; nOfs < nCount; ++nOfs )
if ( pItemInfos[nOfs]._nSID == nSlotId )
- return nOfs + nStart;
+ return nOfs + pImp->mnStart;
#else
#error "TF_POOLABLE should always be set."
#endif
- if ( pSecondary && bDeep )
- return pSecondary->GetTrueWhich(nSlotId);
+ if ( pImp->mpSecondary && bDeep )
+ return pImp->mpSecondary->GetTrueWhich(nSlotId);
return 0;
}
@@ -1071,18 +1066,23 @@ sal_uInt16 SfxItemPool::GetTrueSlotId( sal_uInt16 nWhich, sal_Bool bDeep ) const
if ( !IsInRange( nWhich ) )
{
- if ( pSecondary && bDeep )
- return pSecondary->GetTrueSlotId(nWhich);
+ if ( pImp->mpSecondary && bDeep )
+ return pImp->mpSecondary->GetTrueSlotId(nWhich);
SFX_ASSERT( 0, nWhich, "unknown Which-Id - cannot get slot-id" );
return 0;
}
#ifdef TF_POOLABLE
- return pItemInfos[nWhich - nStart]._nSID;
+ return pItemInfos[nWhich - pImp->mnStart]._nSID;
#else
#error "TF_POOLABLE should always be set."
#endif
}
-// -----------------------------------------------------------------------
+
+sal_uInt16 SfxItemPool::GetFileFormatVersion() const
+{
+ return pImp->mnFileFormatVersion;
+}
+
void SfxItemPool::SetFileFormatVersion( sal_uInt16 nFileFormatVersion )
/* [Description]
@@ -1094,10 +1094,10 @@ void SfxItemPool::SetFileFormatVersion( sal_uInt16 nFileFormatVersion )
*/
{
- DBG_ASSERT( this == pMaster,
+ DBG_ASSERT( this == pImp->mpMaster,
"SfxItemPool::SetFileFormatVersion() but not a master pool" );
- for ( SfxItemPool *pPool = this; pPool; pPool = pPool->pSecondary )
- pPool->_nFileFormatVersion = nFileFormatVersion;
+ for ( SfxItemPool *pPool = this; pPool; pPool = pPool->pImp->mpSecondary )
+ pPool->pImp->mnFileFormatVersion = nFileFormatVersion;
}
diff --git a/svl/source/items/poolio.cxx b/svl/source/items/poolio.cxx
index 7e54d65b9f34..e342ee3a3e99 100644
--- a/svl/source/items/poolio.cxx
+++ b/svl/source/items/poolio.cxx
@@ -122,9 +122,9 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
DBG_CHKTHIS(SfxItemPool, 0);
// Store-Master finden
- SfxItemPool *pStoreMaster = pMaster != this ? pMaster : 0;
+ SfxItemPool *pStoreMaster = pImp->mpMaster != this ? pImp->mpMaster : 0;
while ( pStoreMaster && !pStoreMaster->pImp->bStreaming )
- pStoreMaster = pStoreMaster->pSecondary;
+ pStoreMaster = pStoreMaster->pImp->mpSecondary;
// Alter-Header (Version des Pools an sich und Inhalts-Version 0xffff)
pImp->bStreaming = sal_True;
@@ -149,7 +149,7 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
{
SfxMiniRecordWriter aPoolHeaderRec( &rStream, SFX_ITEMPOOL_REC_HEADER);
rStream << pImp->nVersion;
- SfxPoolItem::writeByteString(rStream, aName);
+ SfxPoolItem::writeByteString(rStream, pImp->aName);
}
// Version-Maps
@@ -169,7 +169,7 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
}
// Workaround gegen Bug in SetVersionMap der 312
- if ( SOFFICE_FILEFORMAT_31 == _nFileFormatVersion )
+ if ( SOFFICE_FILEFORMAT_31 == pImp->mnFileFormatVersion )
rStream << sal_uInt16(nNewWhich+1);
}
}
@@ -183,13 +183,13 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
{
pImp->bInSetItem = ft != 0;
- SfxPoolItemArray_Impl **pArr = pImp->ppPoolItems;
- SfxPoolItem **ppDefItem = ppStaticDefaults;
+ std::vector<SfxPoolItemArray_Impl*>::iterator itrArr = pImp->maPoolItems.begin();
+ SfxPoolItem **ppDefItem = pImp->ppStaticDefaults;
const sal_uInt16 nSize = GetSize_Impl();
- for ( size_t i = 0; i < nSize && !rStream.GetError(); ++i, ++pArr, ++ppDefItem )
+ for ( size_t i = 0; i < nSize && !rStream.GetError(); ++i, ++itrArr, ++ppDefItem )
{
// Version des Items feststellen
- sal_uInt16 nItemVersion = (*ppDefItem)->GetVersion( _nFileFormatVersion );
+ sal_uInt16 nItemVersion = (*ppDefItem)->GetVersion( pImp->mnFileFormatVersion );
if ( USHRT_MAX == nItemVersion )
// => kam in zu exportierender Version gar nicht vor
continue;
@@ -197,7 +197,7 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
// !poolable wird gar nicht im Pool gespeichert
// und itemsets/plain-items je nach Runde
#ifdef TF_POOLABLE
- if ( *pArr && IsItemFlag(**ppDefItem, SFX_ITEM_POOLABLE) &&
+ if ( *itrArr && IsItemFlag(**ppDefItem, SFX_ITEM_POOLABLE) &&
#else
#error "TF_POOLABLE should always be set."
#endif
@@ -208,7 +208,7 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
aWhichIdsRec.NewContent(nSlotId, 0);
rStream << (*ppDefItem)->Which();
rStream << nItemVersion;
- const sal_uInt32 nCount = ::std::min<size_t>( (*pArr)->size(), SAL_MAX_UINT32 );
+ const sal_uInt32 nCount = ::std::min<size_t>( (*itrArr)->size(), SAL_MAX_UINT32 );
DBG_ASSERT(nCount, "ItemArr is empty");
rStream << nCount;
@@ -217,7 +217,7 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
for ( size_t j = 0; j < nCount; ++j )
{
// Item selbst besorgen
- const SfxPoolItem *pItem = (*pArr)->operator[](j);
+ const SfxPoolItem *pItem = (*itrArr)->operator[](j);
if ( pItem && pItem->GetRefCount() ) //! siehe anderes MI-REF
{
aItemsRec.NewContent((sal_uInt16)j, 'X' );
@@ -263,11 +263,11 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
sal_uInt16 nCount = GetSize_Impl();
for ( sal_uInt16 n = 0; n < nCount; ++n )
{
- const SfxPoolItem* pDefaultItem = ppPoolDefaults[n];
+ const SfxPoolItem* pDefaultItem = pImp->ppPoolDefaults[n];
if ( pDefaultItem )
{
// Version ermitteln
- sal_uInt16 nItemVersion = pDefaultItem->GetVersion( _nFileFormatVersion );
+ sal_uInt16 nItemVersion = pDefaultItem->GetVersion( pImp->mnFileFormatVersion );
if ( USHRT_MAX == nItemVersion )
// => gab es in der Version noch nicht
continue;
@@ -287,14 +287,17 @@ SvStream &SfxItemPool::Store(SvStream &rStream) const
// weitere Pools rausschreiben
ImpSvlData::GetSvlData().pStoringPool = 0;
aPoolRec.Close();
- if ( !rStream.GetError() && pSecondary )
- pSecondary->Store( rStream );
+ if ( !rStream.GetError() && pImp->mpSecondary )
+ pImp->mpSecondary->Store( rStream );
pImp->bStreaming = sal_False;
return rStream;
}
-// -----------------------------------------------------------------------
+bool SfxItemPool::HasPersistentRefCounts() const
+{
+ return pImp->mbPersistentRefCounts;
+}
void SfxItemPool::LoadCompleted()
@@ -325,15 +328,15 @@ void SfxItemPool::LoadCompleted()
{
// "uber alle Which-Werte iterieren
- SfxPoolItemArray_Impl** ppItemArr = pImp->ppPoolItems;
- for( sal_uInt16 nArrCnt = GetSize_Impl(); nArrCnt; --nArrCnt, ++ppItemArr )
+ std::vector<SfxPoolItemArray_Impl*>::iterator itrItemArr = pImp->maPoolItems.begin();
+ for( sal_uInt16 nArrCnt = GetSize_Impl(); nArrCnt; --nArrCnt, ++itrItemArr )
{
// ist "uberhaupt ein Item mit dem Which-Wert da?
- if ( *ppItemArr )
+ if ( *itrItemArr )
{
// "uber alle Items mit dieser Which-Id iterieren
- SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*ppItemArr)->begin();
- for( size_t n = (*ppItemArr)->size(); n; --n, ++ppHtArr )
+ SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin();
+ for( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr )
if (*ppHtArr)
{
#ifdef DBG_UTIL
@@ -354,14 +357,29 @@ void SfxItemPool::LoadCompleted()
}
// notify secondary pool
- if ( pSecondary )
- pSecondary->LoadCompleted();
+ if ( pImp->mpSecondary )
+ pImp->mpSecondary->LoadCompleted();
+}
+
+sal_uInt16 SfxItemPool::GetFirstWhich() const
+{
+ return pImp->mnStart;
+}
+
+sal_uInt16 SfxItemPool::GetLastWhich() const
+{
+ return pImp->mnEnd;
+}
+
+bool SfxItemPool::IsInRange( sal_uInt16 nWhich ) const
+{
+ return nWhich >= pImp->mnStart && nWhich <= pImp->mnEnd;
}
//============================================================================
// This had to be moved to a method of its own to keep Solaris GCC happy:
-void SfxItemPool::readTheItems (
- SvStream & rStream, sal_uInt32 nItemCount, sal_uInt16 nVersion,
+void SfxItemPool_Impl::readTheItems (
+ SvStream & rStream, sal_uInt32 nItemCount, sal_uInt16 nVer,
SfxPoolItem * pDefItem, SfxPoolItemArray_Impl ** ppArr)
{
SfxMultiRecordReader aItemsRec( &rStream, SFX_ITEMPOOL_REC_ITEMS );
@@ -386,18 +404,18 @@ void SfxItemPool::readTheItems (
sal_uInt16 nRef(0);
rStream >> nRef;
- pItem = pDefItem->Create(rStream, nVersion);
+ pItem = pDefItem->Create(rStream, nVer);
pNewArr->push_back( (SfxPoolItem*) pItem );
- if ( !bPersistentRefCounts )
+ if ( !mbPersistentRefCounts )
// bis <SfxItemPool::LoadCompleted()> festhalten
- AddRef(*pItem, 1);
+ SfxItemPool::AddRef(*pItem, 1);
else
{
if ( nRef > SFX_ITEMS_OLD_MAXREF )
- pItem->SetKind( nRef );
+ SfxItemPool::SetKind(*pItem, nRef);
else
- AddRef(*pItem, nRef);
+ SfxItemPool::AddRef(*pItem, nRef);
}
}
@@ -438,8 +456,8 @@ void SfxItemPool::readTheItems (
else if ( *rpNewItem == *pOldItem )
{
// wiederverwenden
- AddRef( *pOldItem, rpNewItem->GetRefCount() );
- SetRefCount( *rpNewItem, 0 );
+ SfxItemPool::AddRef( *pOldItem, rpNewItem->GetRefCount() );
+ SfxItemPool::SetRefCount( *rpNewItem, 0 );
delete rpNewItem;
rpNewItem = pOldItem;
bFound = true;
@@ -466,22 +484,22 @@ void SfxItemPool::readTheItems (
SvStream &SfxItemPool::Load(SvStream &rStream)
{
DBG_CHKTHIS(SfxItemPool, 0);
- DBG_ASSERT(ppStaticDefaults, "kein DefaultArray");
+ DBG_ASSERT(pImp->ppStaticDefaults, "kein DefaultArray");
// protect items by increasing ref count
- if ( !bPersistentRefCounts )
+ if ( !pImp->mbPersistentRefCounts )
{
// "uber alle Which-Werte iterieren
- SfxPoolItemArray_Impl** ppItemArr = pImp->ppPoolItems;
- for( size_t nArrCnt = GetSize_Impl(); nArrCnt; --nArrCnt, ++ppItemArr )
+ std::vector<SfxPoolItemArray_Impl*>::iterator itrItemArr = pImp->maPoolItems.begin();
+ for( size_t nArrCnt = GetSize_Impl(); nArrCnt; --nArrCnt, ++itrItemArr )
{
// ist "uberhaupt ein Item mit dem Which-Wert da?
- if ( *ppItemArr )
+ if ( *itrItemArr )
{
// "uber alle Items mit dieser Which-Id iterieren
- SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*ppItemArr)->begin();
- for( size_t n = (*ppItemArr)->size(); n; --n, ++ppHtArr )
+ SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin();
+ for( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr )
if (*ppHtArr)
{
#ifdef DBG_UTIL
@@ -502,9 +520,9 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
}
// Load-Master finden
- SfxItemPool *pLoadMaster = pMaster != this ? pMaster : 0;
+ SfxItemPool *pLoadMaster = pImp->mpMaster != this ? pImp->mpMaster : 0;
while ( pLoadMaster && !pLoadMaster->pImp->bStreaming )
- pLoadMaster = pLoadMaster->pSecondary;
+ pLoadMaster = pLoadMaster->pImp->mpSecondary;
// Gesamt Header einlesen
pImp->bStreaming = sal_True;
@@ -516,8 +534,8 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
rStream >> pImp->nMajorVer >> pImp->nMinorVer;
// Format-Version in Master-Pool "ubertragen
- pMaster->pImp->nMajorVer = pImp->nMajorVer;
- pMaster->pImp->nMinorVer = pImp->nMinorVer;
+ pImp->mpMaster->pImp->nMajorVer = pImp->nMajorVer;
+ pImp->mpMaster->pImp->nMinorVer = pImp->nMinorVer;
// altes Format?
if ( pImp->nMajorVer < 2 )
@@ -560,7 +578,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
// Header-lesen
rStream >> pImp->nLoadingVersion;
SfxPoolItem::readByteString(rStream, aExternName);
- bOwnPool = aExternName == aName;
+ bOwnPool = aExternName == pImp->aName;
//! solange wir keine fremden Pools laden k"onnen
if ( !bOwnPool )
@@ -632,19 +650,19 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
//! nWhich, "Slot/Which mismatch" );
sal_uInt16 nIndex = GetIndex_Impl(nWhich);
- SfxPoolItemArray_Impl **ppArr = pImp->ppPoolItems + nIndex;
+ SfxPoolItemArray_Impl **ppArr = &pImp->maPoolItems[0] + nIndex;
// SfxSetItems k"onnten Items aus Sekund"arpools beinhalten
- SfxPoolItem *pDefItem = *(ppStaticDefaults + nIndex);
+ SfxPoolItem *pDefItem = *(pImp->ppStaticDefaults + nIndex);
pImp->bInSetItem = pDefItem->ISA(SfxSetItem);
- if ( !bSecondaryLoaded && pSecondary && pImp->bInSetItem )
+ if ( !bSecondaryLoaded && pImp->mpSecondary && pImp->bInSetItem )
{
// an das Ende des eigenen Pools seeken
sal_uLong nLastPos = rStream.Tell();
aPoolRec.Skip();
// Sekund"arpool einlesen
- pSecondary->Load( rStream );
+ pImp->mpSecondary->Load( rStream );
bSecondaryLoaded = true;
nSecondaryEnd = rStream.Tell();
@@ -653,9 +671,9 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
}
// Items an sich lesen
- readTheItems(rStream, nCount, nVersion, pDefItem, ppArr);
+ pImp->readTheItems(rStream, nCount, nVersion, pDefItem, ppArr);
- pImp->bInSetItem = sal_False;
+ pImp->bInSetItem = false;
}
}
@@ -683,32 +701,42 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
// Pool-Default-Item selbst laden
SfxPoolItem *pItem =
- ( *( ppStaticDefaults + GetIndex_Impl(nWhich) ) )
+ ( *( pImp->ppStaticDefaults + GetIndex_Impl(nWhich) ) )
->Create( rStream, nVersion );
pItem->SetKind( SFX_ITEMS_POOLDEFAULT );
- *( ppPoolDefaults + GetIndex_Impl(nWhich) ) = pItem;
+ *( pImp->ppPoolDefaults + GetIndex_Impl(nWhich) ) = pItem;
}
}
// ggf. Secondary-Pool laden
aPoolRec.Skip();
- if ( pSecondary )
+ if ( pImp->mpSecondary )
{
if ( !bSecondaryLoaded )
- pSecondary->Load( rStream );
+ pImp->mpSecondary->Load( rStream );
else
rStream.Seek( nSecondaryEnd );
}
// wenn nicht own-Pool, dann kein Name
- if ( aExternName != aName )
- aName.Erase();
+ if ( aExternName != pImp->aName )
+ pImp->aName.Erase();
pImp->bStreaming = sal_False;
return rStream;
};
-// -----------------------------------------------------------------------
+sal_uInt16 SfxItemPool::GetIndex_Impl(sal_uInt16 nWhich) const
+{
+ DBG_CHKTHIS(SfxItemPool, 0);
+ DBG_ASSERT(nWhich >= pImp->mnStart && nWhich <= pImp->mnEnd, "Which-Id nicht im Pool-Bereich");
+ return nWhich - pImp->mnStart;
+}
+
+sal_uInt16 SfxItemPool::GetSize_Impl() const
+{
+ return pImp->mnEnd - pImp->mnStart + 1;
+}
SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
{
@@ -725,7 +753,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
if ( pImp->nMajorVer > 1 || pImp->nMinorVer >= 2 )
rStream >> pImp->nLoadingVersion;
SfxPoolItem::readByteString(rStream, aExternName);
- bOwnPool = aExternName == aName;
+ bOwnPool = aExternName == pImp->aName;
pImp->bStreaming = sal_True;
//! solange wir keine fremden laden k"onnen
@@ -816,7 +844,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
sal_uInt32 nAttrSize(0);
rStream >> nVersion >> nCount;
- SfxPoolItemArray_Impl **ppArr = 0;
+ std::vector<SfxPoolItemArray_Impl*>::iterator ppArr;
SfxPoolItemArray_Impl *pNewArr = 0;
SfxPoolItem *pDefItem = 0;
if ( bKnownItem )
@@ -830,16 +858,17 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
//! nWhich, "Slot/Which mismatch" );
sal_uInt16 nIndex = GetIndex_Impl(nWhich);
- ppArr = pImp->ppPoolItems + nIndex;
+ ppArr = pImp->maPoolItems.begin();
+ std::advance(ppArr, nIndex);
pNewArr = new SfxPoolItemArray_Impl();
- pDefItem = *(ppStaticDefaults + nIndex);
+ pDefItem = *(pImp->ppStaticDefaults + nIndex);
}
// Position vor ersten Item merken
sal_uLong nLastPos = rStream.Tell();
// SfxSetItems k"onnten Items aus Sekund"arpools beinhalten
- if ( !bSecondaryLoaded && pSecondary && pDefItem->ISA(SfxSetItem) )
+ if ( !bSecondaryLoaded && pImp->mpSecondary && pDefItem->ISA(SfxSetItem) )
{
// an das Ende des eigenen Pools seeken
rStream.Seek(nEndOfSizes);
@@ -847,7 +876,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
CHECK_FILEFORMAT_RELEASE( rStream, SFX_ITEMPOOL_TAG_ENDPOOL, pNewArr );
// Sekund"arpool einlesen
- pSecondary->Load1_Impl( rStream );
+ pImp->mpSecondary->Load1_Impl( rStream );
bSecondaryLoaded = true;
nSecondaryEnd = rStream.Tell();
@@ -868,7 +897,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
{
pItem = pDefItem->Create(rStream, nVersion);
- if ( !bPersistentRefCounts )
+ if ( !pImp->mbPersistentRefCounts )
// bis <SfxItemPool::LoadCompleted()> festhalten
AddRef(*pItem, 1);
else
@@ -971,10 +1000,10 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
if ( !bOwnPool )
nWhich = nMappedWhich;
SfxPoolItem *pItem =
- ( *( ppStaticDefaults + GetIndex_Impl(nWhich) ) )
+ ( *( pImp->ppStaticDefaults + GetIndex_Impl(nWhich) ) )
->Create( rStream, nVersion );
pItem->SetKind( SFX_ITEMS_POOLDEFAULT );
- *( ppPoolDefaults + GetIndex_Impl(nWhich) ) = pItem;
+ *( pImp->ppPoolDefaults + GetIndex_Impl(nWhich) ) = pItem;
}
nLastPos = rStream.Tell();
@@ -990,16 +1019,16 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_ENDPOOL );
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_ENDPOOL );
- if ( pSecondary )
+ if ( pImp->mpSecondary )
{
if ( !bSecondaryLoaded )
- pSecondary->Load1_Impl( rStream );
+ pImp->mpSecondary->Load1_Impl( rStream );
else
rStream.Seek( nSecondaryEnd );
}
- if ( aExternName != aName )
- aName.Erase();
+ if ( aExternName != pImp->aName )
+ pImp->aName.Erase();
pImp->bStreaming = sal_False;
return rStream;
@@ -1089,18 +1118,18 @@ const SfxPoolItem* SfxItemPool::LoadSurrogate
const SfxPoolItem *pItem = 0;
if ( bResolvable )
{
- for ( SfxItemPool *pTarget = this; pTarget; pTarget = pTarget->pSecondary )
+ for ( SfxItemPool *pTarget = this; pTarget; pTarget = pTarget->pImp->mpSecondary )
{
// richtigen (Folge-) Pool gefunden?
if ( pTarget->IsInRange(rWhich) )
{
// dflt-Attribut?
if ( SFX_ITEMS_DEFAULT == nSurrogat )
- return *(pTarget->ppStaticDefaults +
+ return *(pTarget->pImp->ppStaticDefaults +
pTarget->GetIndex_Impl(rWhich));
- SfxPoolItemArray_Impl* pItemArr = *(pTarget->pImp->ppPoolItems +
- pTarget->GetIndex_Impl(rWhich));
+ SfxPoolItemArray_Impl* pItemArr =
+ pTarget->pImp->maPoolItems[pTarget->GetIndex_Impl(rWhich)];
pItem = pItemArr && nSurrogat < pItemArr->size()
? (*pItemArr)[nSurrogat]
: 0;
@@ -1112,7 +1141,7 @@ const SfxPoolItem* SfxItemPool::LoadSurrogate
}
// Nachladen aus Ref-Pool?
- if ( pRefPool != pMaster )
+ if ( pRefPool != pImp->mpMaster )
return &pTarget->Put( *pItem );
// Referenzen sind NICHT schon mit Pool geladen worden?
@@ -1184,8 +1213,8 @@ sal_uInt32 SfxItemPool::GetSurrogate(const SfxPoolItem *pItem) const
if ( !IsInRange(pItem->Which()) )
{
- if ( pSecondary )
- return pSecondary->GetSurrogate( pItem );
+ if ( pImp->mpSecondary )
+ return pImp->mpSecondary->GetSurrogate( pItem );
SFX_ASSERT( 0, pItem->Which(), "unknown Which-Id - dont ask me for surrogates" );
}
@@ -1193,7 +1222,7 @@ sal_uInt32 SfxItemPool::GetSurrogate(const SfxPoolItem *pItem) const
if( IsStaticDefaultItem(pItem) || IsPoolDefaultItem(pItem) )
return SFX_ITEMS_DEFAULT;
- SfxPoolItemArray_Impl* pItemArr = *(pImp->ppPoolItems + GetIndex_Impl(pItem->Which()));
+ SfxPoolItemArray_Impl* pItemArr = pImp->maPoolItems[GetIndex_Impl(pItem->Which())];
DBG_ASSERT(pItemArr, "ItemArr is not available");
for ( size_t i = 0; i < pItemArr->size(); ++i )
@@ -1365,8 +1394,8 @@ sal_uInt16 SfxItemPool::GetNewWhich
// (Sekund"ar-) Pool bestimmen
if ( !IsInVersionsRange(nFileWhich) )
{
- if ( pSecondary )
- return pSecondary->GetNewWhich( nFileWhich );
+ if ( pImp->mpSecondary )
+ return pImp->mpSecondary->GetNewWhich( nFileWhich );
SFX_ASSERT( 0, nFileWhich, "unknown which in GetNewWhich()" );
}
@@ -1451,7 +1480,7 @@ bool SfxItemPool::IsCurrentVersionLoading() const
{
return ( pImp->nVersion == pImp->nLoadingVersion ) &&
- ( !pSecondary || pSecondary->IsCurrentVersionLoading() );
+ ( !pImp->mpSecondary || pImp->mpSecondary->IsCurrentVersionLoading() );
}
//-------------------------------------------------------------------------
@@ -1493,14 +1522,14 @@ bool SfxItemPool::StoreItem( SvStream &rStream, const SfxPoolItem &rItem,
return sal_False;
const SfxItemPool *pPool = this;
while ( !pPool->IsInStoringRange(rItem.Which()) )
- if ( 0 == ( pPool = pPool->pSecondary ) )
+ if ( 0 == ( pPool = pPool->pImp->mpSecondary ) )
return sal_False;
DBG_ASSERT( !pImp->bInSetItem || !rItem.ISA(SfxSetItem),
"SetItem contains ItemSet with SetItem" );
sal_uInt16 nSlotId = pPool->GetSlotId( rItem.Which(), sal_True );
- sal_uInt16 nItemVersion = rItem.GetVersion(_nFileFormatVersion);
+ sal_uInt16 nItemVersion = rItem.GetVersion(pImp->mnFileFormatVersion);
if ( USHRT_MAX == nItemVersion )
return sal_False;
@@ -1539,8 +1568,8 @@ const SfxPoolItem* SfxItemPool::LoadItem( SvStream &rStream, bool bDirect,
// richtigen Sekund"ar-Pool finden
while ( !pRefPool->IsInVersionsRange(nWhich) )
{
- if ( pRefPool->pSecondary )
- pRefPool = pRefPool->pSecondary;
+ if ( pRefPool->pImp->mpSecondary )
+ pRefPool = pRefPool->pImp->mpSecondary;
else
{
// WID in der Version nicht vorhanden => ueberspringen
@@ -1563,7 +1592,7 @@ const SfxPoolItem* SfxItemPool::LoadItem( SvStream &rStream, bool bDirect,
nWhich = pRefPool->GetNewWhich( nWhich );
DBG_ASSERT( !nWhich || !pImp->bInSetItem ||
- !pRefPool->ppStaticDefaults[pRefPool->GetIndex_Impl(nWhich)]->ISA(SfxSetItem),
+ !pRefPool->pImp->ppStaticDefaults[pRefPool->GetIndex_Impl(nWhich)]->ISA(SfxSetItem),
"loading SetItem in ItemSet of SetItem" );
// soll "uber Surrogat geladen werden?