diff options
author | Philipp Weissenbacher <p.weissenbacher@gmail.com> | 2014-07-09 01:05:32 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-07-10 05:09:11 +0000 |
commit | d72d71517ea3b13a1a5ddb685243c11ec7caa893 (patch) | |
tree | 823ad6d0dc1da4ebfae6380a9bd8df0a56ded2f7 /svl | |
parent | 5e8b31f1d3507f4c93a164259e40b8da5b686343 (diff) |
Translate German comments (continued)
Change-Id: Ia33f8b85120381c75bcb3696845dfab1fd8b61fc
Reviewed-on: https://gerrit.libreoffice.org/10151
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'svl')
-rw-r--r-- | svl/source/items/poolio.cxx | 334 |
1 files changed, 151 insertions, 183 deletions
diff --git a/svl/source/items/poolio.cxx b/svl/source/items/poolio.cxx index 08267a97df53..22b22cdf7b40 100644 --- a/svl/source/items/poolio.cxx +++ b/svl/source/items/poolio.cxx @@ -266,41 +266,31 @@ bool SfxItemPool::HasPersistentRefCounts() const return pImp->mbPersistentRefCounts; } -void SfxItemPool::LoadCompleted() - -/* [Beschreibung] - - Wurde der SfxItemPool mit 'bRefCounts' == sal_False geladen, mu\s das - Laden der Dokumentinhalte mit einem Aufruf dieser Methode beendet - werden. Ansonsten hat der Aufruf dieser Methode keine Funktion. - - - [Anmerkung] - - Beim Laden ohne Ref-Counts werden diese tats"achlich auf 1 gesetzt, - damit nicht w"ahrend des Ladevorgangs SfxPoolItems gel"oscht werden, - die danach, aber auch noch beim Ladevorgang, ben"otigt werden. Diese - Methode setzt den Ref-Count wieder zur"uck und entfernt dabei - gleichzeitig alle nicht mehr ben"otigten Items. - - - [Querverweise] - - <SfxItemPool::Load()> +/** + * If the SfxItemPool was loaded with 'bRefCounts' == sal_False, we need + * to finish the loading of the document contents with a call of this method. + * In any other case calling this function has no meaning. + * + * When loading without RefCounts, they are actually set to 1 so that + * SfxPoolItems that are needed during and after loading are not deleted. + * This method resets the RefCount and also removes all items that are not + * needed anymore. + * + * @see SfxItemPool::Load() */ - +void SfxItemPool::LoadCompleted() { - // wurden keine Ref-Counts mitgeladen? + // Did we load without RefCounts? if ( pImp->nInitRefCount > 1 ) { - // "uber alle Which-Werte iterieren + // Iterate over all Which values 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? + // Is there an item with the Which value present at all? if ( *itrItemArr ) { - // "uber alle Items mit dieser Which-Id iterieren + // Iterate over all items with this WhichId SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin(); for( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr ) { @@ -358,17 +348,17 @@ void SfxItemPool_Impl::readTheItems ( sal_uLong n, nLastSurrogate = sal_uLong(-1); while (aItemsRec.GetContent()) { - // n"achstes Surrogat holen + // Get next surrogate sal_uInt16 nSurrogate = aItemsRec.GetContentTag(); DBG_ASSERT( aItemsRec.GetContentVersion() == 'X', "not an item content" ); - // fehlende auff"ullen + // Fill up missing ones for ( pItem = 0, n = nLastSurrogate+1; n < nSurrogate; ++n ) pNewArr->push_back( (SfxPoolItem*) pItem ); nLastSurrogate = nSurrogate; - // Ref-Count und Item laden + // Load RefCount and Item sal_uInt16 nRef(0); rStream.ReadUInt16( nRef ); @@ -376,7 +366,7 @@ void SfxItemPool_Impl::readTheItems ( pNewArr->push_back( (SfxPoolItem*) pItem ); if ( !mbPersistentRefCounts ) - // bis <SfxItemPool::LoadCompleted()> festhalten + // Hold onto it until SfxItemPool::LoadCompleted() SfxItemPool::AddRef(*pItem, 1); else { @@ -387,14 +377,14 @@ void SfxItemPool_Impl::readTheItems ( } } - // fehlende auff"ullen + // Fill up missing ones for ( pItem = 0, n = nLastSurrogate+1; n < nItemCount; ++n ) pNewArr->push_back( (SfxPoolItem*) pItem ); SfxPoolItemArray_Impl *pOldArr = *ppArr; *ppArr = pNewArr; - // die Items merken, die schon im Pool sind + // Remember items that are already in the pool bool bEmpty = true; if ( 0 != pOldArr ) for ( n = 0; bEmpty && n < pOldArr->size(); ++n ) @@ -402,7 +392,7 @@ void SfxItemPool_Impl::readTheItems ( DBG_ASSERTWARNING( bEmpty, "loading non-empty pool" ); if ( !bEmpty ) { - // f"ur alle alten suchen, ob ein gleiches neues existiert + // See if there's a new one for all old ones for ( size_t nOld = 0; nOld < pOldArr->size(); ++nOld ) { SfxPoolItem *pOldItem = (*pOldArr)[nOld]; @@ -412,18 +402,18 @@ void SfxItemPool_Impl::readTheItems ( bool bFound = false; for ( size_t nNew = (*ppArr)->size(); nNew--; ) { - // geladenes Item + // Loaded Item SfxPoolItem *&rpNewItem = (SfxPoolItem*&)(*ppArr)->operator[](nNew); - // surrogat unbenutzt? + // Unused surrogate? if ( !rpNewItem ) nFree = nNew; - // gefunden? + // Found it? else if ( *rpNewItem == *pOldItem ) { - // wiederverwenden + // Reuse SfxItemPool::AddRef( *pOldItem, rpNewItem->GetRefCount() ); SfxItemPool::SetRefCount( *rpNewItem, 0 ); delete rpNewItem; @@ -433,7 +423,7 @@ void SfxItemPool_Impl::readTheItems ( } } - // vorhervorhandene, nicht geladene uebernehmen + // Take over the ones that were previously present, but had not been loaded if ( !bFound ) { if ( nFree != SAL_MAX_UINT32 ) @@ -451,20 +441,20 @@ void SfxItemPool_Impl::readTheItems ( SvStream &SfxItemPool::Load(SvStream &rStream) { - DBG_ASSERT(pImp->ppStaticDefaults, "kein DefaultArray"); + DBG_ASSERT(pImp->ppStaticDefaults, "No DefaultArray"); - // protect items by increasing ref count + // Protect items by increasing ref count if ( !pImp->mbPersistentRefCounts ) { - // "uber alle Which-Werte iterieren + // Iterate over all Which values 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 ( *itrItemArr ) { - // "uber alle Items mit dieser Which-Id iterieren + // Is there an item with the Which value present at all? SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin(); for( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr ) if (*ppHtArr) @@ -482,34 +472,34 @@ SvStream &SfxItemPool::Load(SvStream &rStream) } } - // during loading (until LoadCompleted()) protect all items + // During loading (until LoadCompleted()) protect all items pImp->nInitRefCount = 2; } - // Load-Master finden + // Find LoadMaster SfxItemPool *pLoadMaster = pImp->mpMaster != this ? pImp->mpMaster : 0; while ( pLoadMaster && !pLoadMaster->pImp->bStreaming ) pLoadMaster = pLoadMaster->pImp->mpSecondary; - // Gesamt Header einlesen + // Read whole Header pImp->bStreaming = true; if ( !pLoadMaster ) { - // Format-Version laden + // Load format version CHECK_FILEFORMAT2( rStream, SFX_ITEMPOOL_TAG_STARTPOOL_5, SFX_ITEMPOOL_TAG_STARTPOOL_4 ); rStream.ReadUChar( pImp->nMajorVer ).ReadUChar( pImp->nMinorVer ); - // Format-Version in Master-Pool "ubertragen + // Take over format version to MasterPool pImp->mpMaster->pImp->nMajorVer = pImp->nMajorVer; pImp->mpMaster->pImp->nMinorVer = pImp->nMinorVer; - // altes Format? + // Old Format? if ( pImp->nMajorVer < 2 ) - // pImp->bStreaming wird von Load1_Impl() zur"uckgesetzt + // pImp->bStreaming is reset by Load1_Impl() return Load1_Impl( rStream ); - // zu neues Format? + // New Format? if ( pImp->nMajorVer > SFX_ITEMPOOL_VER_MAJOR ) { rStream.SetError(SVSTREAM_FILEFORMAT_ERROR); @@ -517,12 +507,12 @@ SvStream &SfxItemPool::Load(SvStream &rStream) return rStream; } - // Version 1.2-Trick-Daten "uberspringen + // Trick for version 1.2: skip data CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_TRICK4OLD ); - rStream.SeekRel( 4 ); // Hack-Daten wegen SfxStyleSheetPool-Bug skippen + rStream.SeekRel( 4 ); // Hack: Skip data due to SfxStyleSheetPool bug } - // neues Record-orientiertes Format + // New record-oriented format SfxMiniRecordReader aPoolRec( &rStream, SFX_ITEMPOOL_REC ); if ( rStream.GetError() ) { @@ -530,10 +520,10 @@ SvStream &SfxItemPool::Load(SvStream &rStream) return rStream; } - // Einzel-Header + // Single header OUString aExternName; { - // Header-Record suchen + // Find HeaderRecord SfxMiniRecordReader aPoolHeaderRec( &rStream, SFX_ITEMPOOL_REC_HEADER ); if ( rStream.GetError() ) { @@ -541,12 +531,12 @@ SvStream &SfxItemPool::Load(SvStream &rStream) return rStream; } - // Header-lesen + // Read Header rStream.ReadUInt16( pImp->nLoadingVersion ); aExternName = SfxPoolItem::readByteString(rStream); bool bOwnPool = aExternName == pImp->aName; - //! solange wir keine fremden Pools laden k"onnen + //! As long as we cannot read foreign Pools if ( !bOwnPool ) { rStream.SetError(SVSTREAM_FILEFORMAT_ERROR); @@ -556,7 +546,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream) } } - // Version-Maps + // Version maps { SfxMultiRecordReader aVerRec( &rStream, SFX_ITEMPOOL_REC_VERSIONMAP ); if ( rStream.GetError() ) @@ -565,11 +555,11 @@ SvStream &SfxItemPool::Load(SvStream &rStream) return rStream; } - // Versions-Maps einlesen + // Version maps einlesen sal_uInt16 nOwnVersion = pImp->nVersion; for ( sal_uInt16 nVerNo = 0; aVerRec.GetContent(); ++nVerNo ) { - // Header f"ur einzelne Version einlesen + // Read header for single versions sal_uInt16 nVersion(0), nHStart(0), nHEnd(0); rStream.ReadUInt16( nVersion ).ReadUInt16( nHStart ).ReadUInt16( nHEnd ); sal_uInt16 nCount = nHEnd - nHStart + 1; @@ -588,23 +578,23 @@ SvStream &SfxItemPool::Load(SvStream &rStream) pImp->nVersion = nOwnVersion; } - // Items laden + // Load Items bool bSecondaryLoaded = false; long nSecondaryEnd = 0; { SfxMultiRecordReader aWhichIdsRec( &rStream, SFX_ITEMPOOL_REC_WHICHIDS); while ( aWhichIdsRec.GetContent() ) { - // SlotId, Which-Id und Item-Version besorgen + // Get SlotId, WhichId and Item version sal_uInt32 nCount(0); sal_uInt16 nVersion(0), nWhich(0); //!sal_uInt16 nSlotId = aWhichIdsRec.GetContentTag(); rStream.ReadUInt16( nWhich ); if ( pImp->nLoadingVersion != pImp->nVersion ) - // Which-Id aus File-Version in Pool-Version verschieben + // Move WhichId from file version to Pool version nWhich = GetNewWhich( nWhich ); - // unbekanntes Item aus neuerer Version + // Unknown Item from newer version if ( !IsInRange(nWhich) ) continue; @@ -618,46 +608,46 @@ SvStream &SfxItemPool::Load(SvStream &rStream) sal_uInt16 nIndex = GetIndex_Impl(nWhich); SfxPoolItemArray_Impl **ppArr = &pImp->maPoolItems[0] + nIndex; - // SfxSetItems k"onnten Items aus Sekund"arpools beinhalten + // SfxSetItems could contain Items from secondary Pools SfxPoolItem *pDefItem = *(pImp->ppStaticDefaults + nIndex); pImp->bInSetItem = pDefItem->ISA(SfxSetItem); if ( !bSecondaryLoaded && pImp->mpSecondary && pImp->bInSetItem ) { - // an das Ende des eigenen Pools seeken + // Seek to end of own Pool sal_uLong nLastPos = rStream.Tell(); aPoolRec.Skip(); - // Sekund"arpool einlesen + // Read secondary Pool pImp->mpSecondary->Load( rStream ); bSecondaryLoaded = true; nSecondaryEnd = rStream.Tell(); - // zur"uck zu unseren eigenen Items + // Back to our own Items rStream.Seek(nLastPos); } - // Items an sich lesen + // Read Items pImp->readTheItems(rStream, nCount, nVersion, pDefItem, ppArr); pImp->bInSetItem = false; } } - // Pool-Defaults lesen + // Read Pool defaults { SfxMultiRecordReader aDefsRec( &rStream, SFX_ITEMPOOL_REC_DEFAULTS ); while ( aDefsRec.GetContent() ) { - // SlotId, Which-Id und Item-Version besorgen + // Get SlotId, WhichId and Item versions sal_uInt16 nVersion(0), nWhich(0); //!sal_uInt16 nSlotId = aDefsRec.GetContentTag(); rStream.ReadUInt16( nWhich ); if ( pImp->nLoadingVersion != pImp->nVersion ) - // Which-Id aus File-Version in Pool-Version verschieben + // Move WhichId from file version to Pool version nWhich = GetNewWhich( nWhich ); - // unbekanntes Item aus neuerer Version + // Unknown Item from newer version if ( !IsInRange(nWhich) ) continue; @@ -665,7 +655,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream) //!SFX_ASSERTWARNING( !HasMap() || ( nSlotId == GetSlotId( nWhich, sal_False ) ), //! nWhich, "Slot/Which mismatch" ); - // Pool-Default-Item selbst laden + // Load PoolDefaultItem SfxPoolItem *pItem = ( *( pImp->ppStaticDefaults + GetIndex_Impl(nWhich) ) ) ->Create( rStream, nVersion ); @@ -674,7 +664,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream) } } - // ggf. Secondary-Pool laden + // Load secondary Pool if needed aPoolRec.Skip(); if ( pImp->mpSecondary ) { @@ -684,7 +674,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream) rStream.Seek( nSecondaryEnd ); } - // wenn nicht own-Pool, dann kein Name + // If not own Pool, then no name if ( aExternName != pImp->aName ) pImp->aName = OUString(); @@ -694,7 +684,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream) sal_uInt16 SfxItemPool::GetIndex_Impl(sal_uInt16 nWhich) const { - DBG_ASSERT(nWhich >= pImp->mnStart && nWhich <= pImp->mnEnd, "Which-Id nicht im Pool-Bereich"); + DBG_ASSERT(nWhich >= pImp->mnStart && nWhich <= pImp->mnEnd, "WhichId not within the Pool range"); return nWhich - pImp->mnStart; } @@ -705,10 +695,10 @@ sal_uInt16 SfxItemPool::GetSize_Impl() const SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) { - // beim Master ist der Header schon von <Load()> geladen worden + // For the Master the Header has already been loaded in Load() if ( !pImp->bStreaming ) { - // Header des Secondary lesen + // Read the secondary's Header CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_STARTPOOL_4 ); rStream.ReadUChar( pImp->nMajorVer ).ReadUChar( pImp->nMinorVer ); } @@ -720,7 +710,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) bool bOwnPool = aExternName == pImp->aName; pImp->bStreaming = true; - //! solange wir keine fremden laden k"onnen + //! As long as we cannot read foreign ones if ( !bOwnPool ) { rStream.SetError(SVSTREAM_FILEFORMAT_ERROR); @@ -728,7 +718,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) return rStream; } - // Versionen bis 1.3 k"onnen noch keine Which-Verschiebungen lesen + // Versions up to 1.3 cannot read WhichMoves if ( pImp->nMajorVer == 1 && pImp->nMinorVer <= 2 && pImp->nVersion < pImp->nLoadingVersion ) { @@ -737,10 +727,10 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) return rStream; } - // Size-Table liegt hinter den eigentlichen Attributen + // SizeTable comes after the actual attributes rStream.ReadUInt32( nAttribSize ); - // Size-Table einlesen + // Read SizeTable sal_uLong nStartPos = rStream.Tell(); rStream.SeekRel( nAttribSize ); CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_SIZES ); @@ -751,31 +741,31 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) sal_uLong nEndOfSizes = rStream.Tell(); SvMemoryStream aSizeTable( pBuf.get(), nSizeTableLen, STREAM_READ ); - // ab Version 1.3 steht in der Size-Table eine Versions-Map + // Starting with version 1.3 the SizeTable contains a versions map if ( pImp->nMajorVer > 1 || pImp->nMinorVer >= 3 ) { - // Version-Map finden (letztes sal_uLong der Size-Table gibt Pos an) + // Find version map (last sal_uLong of the SizeTable determines position) rStream.Seek( nEndOfSizes - sizeof(sal_uInt32) ); sal_uInt32 nVersionMapPos(0); rStream.ReadUInt32( nVersionMapPos ); rStream.Seek( nVersionMapPos ); - // Versions-Maps einlesen + // Read version maps CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_VERSIONMAP ); sal_uInt16 nVerCount(0); rStream.ReadUInt16( nVerCount ); for ( sal_uInt16 nVerNo = 0; nVerNo < nVerCount; ++nVerNo ) { - // Header f"ur einzelne Version einlesen + // Read Header for single versions sal_uInt16 nVersion(0), nHStart(0), nHEnd(0); rStream.ReadUInt16( nVersion ).ReadUInt16( nHStart ).ReadUInt16( nHEnd ); sal_uInt16 nCount = nHEnd - nHStart + 1; sal_uInt16 nBytes = (nCount)*sizeof(sal_uInt16); - // Is new version is known? + // Is new version known? if ( nVerNo >= pImp->aVersions.size() ) { - // Add new Version + // Add new version sal_uInt16 *pMap = new sal_uInt16[nCount]; memset(pMap, 0, nCount * sizeof(sal_uInt16)); for ( sal_uInt16 n = 0; n < nCount; ++n ) @@ -783,12 +773,12 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) SetVersionMap( nVersion, nHStart, nHEnd, pMap ); } else - // Version schon bekannt => "uberspringen + // Skip known versions rStream.SeekRel( nBytes ); } } - // Items laden + // Load Items rStream.Seek( nStartPos ); CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_ITEMS ); bool bSecondaryLoaded = false; @@ -796,7 +786,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) sal_uInt16 nWhich(0), nSlot(0); while ( rStream.ReadUInt16( nWhich ), nWhich ) { - // ggf. Which-Id aus alter Version verschieben? + // Move WhichId from old version? if ( pImp->nLoadingVersion != pImp->nVersion ) nWhich = GetNewWhich( nWhich ); @@ -817,27 +807,27 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) SfxPoolItemArray_Impl *pNewArr = new SfxPoolItemArray_Impl(); SfxPoolItem *pDefItem = *(pImp->ppStaticDefaults + nIndex); - // Position vor ersten Item merken + // Remember position of first Item sal_uLong nLastPos = rStream.Tell(); - // SfxSetItems k"onnten Items aus Sekund"arpools beinhalten + // SfxSetItems could contain Items from secondary Pool if ( !bSecondaryLoaded && pImp->mpSecondary && pDefItem->ISA(SfxSetItem) ) { - // an das Ende des eigenen Pools seeken + // Seek to end of own Pool rStream.Seek(nEndOfSizes); CHECK_FILEFORMAT_RELEASE( rStream, SFX_ITEMPOOL_TAG_ENDPOOL, pNewArr ); CHECK_FILEFORMAT_RELEASE( rStream, SFX_ITEMPOOL_TAG_ENDPOOL, pNewArr ); - // Sekund"arpool einlesen + // Read secondary Pool pImp->mpSecondary->Load1_Impl( rStream ); bSecondaryLoaded = true; nSecondaryEnd = rStream.Tell(); - // zur"uck zu unseren eigenen Items + // Back to our own Items rStream.Seek(nLastPos); } - // Items an sich lesen + // Read Items for ( sal_uInt16 j = 0; j < nCount; ++j ) { sal_uLong nPos = nLastPos; @@ -849,7 +839,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) pItem = pDefItem->Create(rStream, nVersion); if ( !pImp->mbPersistentRefCounts ) - // bis <SfxItemPool::LoadCompleted()> festhalten + // Hold onto them until SfxItemPool::LoadCompleted() AddRef(*pItem, 1); else { @@ -862,7 +852,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) //pNewArr->insert( pItem, j ); pNewArr->push_back( (SfxPoolItem*) pItem ); - // restliche gespeicherte Laenge skippen (neueres Format) + // Skip the rest of the saved length (newer format) nLastPos = rStream.Tell(); aSizeTable.ReadUInt32( nAttrSize ); @@ -880,7 +870,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) SfxPoolItemArray_Impl *pOldArr = *ppArr; *ppArr = pNewArr; - // die Items merken, die schon im Pool sind + // Remember Items already in the Pool bool bEmpty = true; if ( 0 != pOldArr ) for ( size_t n = 0; bEmpty && n < pOldArr->size(); ++n ) @@ -888,7 +878,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) DBG_ASSERTWARNING( bEmpty, "loading non-empty pool" ); if ( !bEmpty ) { - // f"ur alle alten suchen, ob ein gleiches neues existiert + // Find out for all old ones, whether there's a same new one for ( size_t nOld = 0; nOld < pOldArr->size(); ++nOld ) { SfxPoolItem *pOldItem = (*pOldArr)[nOld]; @@ -917,17 +907,17 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) } } } - delete pOldArr; /* @@@ */ + delete pOldArr; } - // Pool-Defaults lesen + // Read Pool defaults if ( pImp->nMajorVer > 1 || pImp->nMinorVer > 0 ) CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_DEFAULTS ); sal_uLong nLastPos = rStream.Tell(); while ( rStream.ReadUInt16( nWhich ), nWhich ) { - // ggf. Which-Id aus alter Version verschieben? + // Move WhichId from old version? if ( pImp->nLoadingVersion != pImp->nVersion ) nWhich = GetNewWhich( nWhich ); @@ -973,6 +963,38 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream) } +/** + * Loads surrogate from 'rStream' and returns the corresponding SfxPoolItem + * from the rRefPool. + * If the surrogate contained within the stream == SFX_ITEMS_DIRECT + * (!SFX_ITEM_POOLABLE), we return 0 and the Item is to be loaded directly + * from the stream. + * We also return 0 for 0xfffffff0 (SFX_ITEMS_NULL) and rWhich is set to 0, + * making the Items unavailable. + * + * Apart from that we also take into account whether the Pool is loaded without + * RefCounts, if we reload from a new Pool (&rRefPool != this) or if we're + * building from a differently constructed Pool. + * + * If we load from a differently constructed Pool and the 'nSlotId' cannot be + * mapped to a WhichId of this Pool, we also return 0. + * + * Preconditions: - Pool must be loaded + * - LoadCompleted must not have been called yet + * - 'rStream' is at the position at which a surrogate + * for an Item with the SlotId 'nSlotId', the WhichId + * 'rWhichId' was saved with StoreSurrogate + * + * Postconditions: - 'rStream' is at the same position as after StoreSurrogate + * had finished saving + * - If we were able to load an Item, it's now in this + * SfxItemPool + * - 'rWhichId' now contains the mapped WhichId + * + * Runtime: Depth of the traget secondary Pool * 10 + 10 + * + * @see SfxItemPool::StoreSurrogate(SvStream&,const SfxPoolItem &)const +*/ const SfxPoolItem* SfxItemPool::LoadSurrogate ( SvStream& rStream, // vor einem Surrogat positionierter Stream @@ -980,43 +1002,6 @@ const SfxPoolItem* SfxItemPool::LoadSurrogate sal_uInt16 nSlotId, // Slot-Id des zu ladenden <SfxPoolItem>s const SfxItemPool* pRefPool // <SfxItemPool> in dem das Surrogat gilt ) - -/* [Beschreibung] - - L"adt Surrogat aus 'rStream' und liefert das dadurch in 'rRefPool' - repr"asentierte SfxPoolItem zu"ruck. Ist das im Stream befindliche - Surrogat == SFX_ITEMS_DIRECT (!SFX_ITEM_POOLABLE) wird 0 zur"uckgegeben, - das Item ist direkt aus dem Stream zu laden. Bei 0xfffffff0 (SFX_ITEMS_NULL) - wird auch 0 zurueckgegeben und rWhich auf 0 gesetzt, das Item ist nicht - verfuegbar. - - Ansonsten wird ber"ucksichtigt, ob der betroffene Pool ohne Ref-Counts - geladen wird, ob aus einem neuen Pool nachgeladen wird (&rRefPool != this) - oder ob aus einem g"anzlich anders aufgebauten Pool geladen wird. - - Wird aus einem anders aufgebauten Pool geladen und die 'nSlotId' kann - nicht in eine Which-Id dieses Pools gemappt werden, wird ebenfalls 0 - zur"uckgeliefert. - - Preconditions: - Pool mu\s geladen sein - - LoadCompleted darf noch nicht gerufen worden sein - - 'rStream' steht genau an der Position, an der ein - Surrogat f"ur ein Item mit der SlotId 'nSlotId' und - der WhichId 'rWhichId' mit StoreSurrogate gepeichert - wurde - - Postconditions: - 'rStream' ist so positioniert, wie auch StoreSurrogate - sein speichern beendet hatte - - konnte ein Item geladen werden, befindet es sich - in diesem SfxItemPool - - 'rWhichId' enth"alt die ggf. gemappte Which-Id - Laufzeit: Tiefe des Ziel Sekund"arpools * 10 + 10 - - [Querverweise] - - <SfxItemPool::StoreSurrogate(SvStream&,const SfxPoolItem &)const> -*/ - { // Read the first surrogate sal_uInt32 nSurrogat(0); @@ -1098,32 +1083,18 @@ const SfxPoolItem* SfxItemPool::LoadSurrogate } - -bool SfxItemPool::StoreSurrogate -( - SvStream& rStream, - const SfxPoolItem* pItem -) const - -/* [Beschreibung] - - Speichert ein Surrogat f"ur '*pItem' in 'rStream'. - - - [R"uckgabewert] - - bool TRUE - es wurde ein echtes Surrogat gespeichert, auch - SFX_ITEMS_NULL bei 'pItem==0', - SFX_ITEMS_STATICDEFAULT und SFX_ITEMS_POOLDEFAULT - gelten als 'echte' Surrogate - - sal_False - es wurde ein Dummy-Surrogat (SFX_ITEMS_DIRECT) - gespeichert, das eigentliche Item mu\s direkt - hinterher selbst gespeichert werden +/** + * Saves a surrogate for '*pItem' in 'rStream' + * + * @returns sal_True: a real surrogates has been saved + * SFX_ITEMS_NULL for 'pItem==0', SFX_ITEMS_STATICDEFAULT + * and SFX_ITEMS_POOLDEFAULT are 'real' surrogates + * + * @returns sal_False: a dummy surrogate (SFX_ITEMS_DIRECT) has been saved; + * the actual Item needs to be saved right after it on + * its own */ - +bool SfxItemPool::StoreSurrogate ( SvStream& rStream, const SfxPoolItem* pItem) const { if ( pItem ) { @@ -1177,24 +1148,21 @@ bool SfxItemPool::IsInStoringRange( sal_uInt16 nWhich ) const nWhich <= pImp->nStoringEnd; } - +/** + * This method allows for restricting the WhichRange, which is saved + * by ItemSets of this Pool (and the Pool itself). + * The method must be called before SfxItemPool::Store() and the values + * must also be still set when the actual document (the ItemSets) is + * being saved. + * + * Resetting it is not necessary, if this range is set correctly before + * _every_ save, because its only accounted for when saving. + * + * We need to do this for the 3.1 format, because there's a bug in the + * Pool loading method. +*/ void SfxItemPool::SetStoringRange( sal_uInt16 nFrom, sal_uInt16 nTo ) -/* [Beschreibung] - - Mit dieser Methode kann der Which-Bereich eingeengt werden, der - von ItemSets dieses Pool (und dem Pool selbst) gespeichert wird. - Die Methode muss dazu vor <SfxItemPool::Store()> gerufen werden - und die Werte muessen auch noch gesetzt sein, wenn das eigentliche - Dokument (also die ItemSets gespeicher werden). - - Ein Zuruecksetzen ist dann nicht noetig, wenn dieser Range vor - JEDEM Speichern richtig gesetzt wird, da er nur beim Speichern - beruecksichtigt wird. - - Dieses muss fuer das 3.1-Format gemacht werden, da dort eine - Bug in der Pool-Lade-Methode vorliegt. -*/ { pImp->nStoringStart = nFrom; |