diff options
Diffstat (limited to 'svtools/source/items/poolcach.cxx')
-rw-r--r-- | svtools/source/items/poolcach.cxx | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/svtools/source/items/poolcach.cxx b/svtools/source/items/poolcach.cxx deleted file mode 100644 index 2c758a7e25fa..000000000000 --- a/svtools/source/items/poolcach.cxx +++ /dev/null @@ -1,159 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: poolcach.cxx,v $ - * $Revision: 1.7 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svtools.hxx" - -#include <limits.h> - -#ifndef GCC -#endif - -#include <svtools/itempool.hxx> -#include <svtools/itemset.hxx> -#include "poolcach.hxx" - -// STATIC DATA ----------------------------------------------------------- - -DBG_NAME(SfxItemPoolCache) - - -//------------------------------------------------------------------------ - -struct SfxItemModifyImpl -{ - const SfxSetItem *pOrigItem; - SfxSetItem *pPoolItem; -}; - -SV_DECL_VARARR( SfxItemModifyArr_Impl, SfxItemModifyImpl, 8, 8 ) -SV_IMPL_VARARR( SfxItemModifyArr_Impl, SfxItemModifyImpl); - -//------------------------------------------------------------------------ - -SfxItemPoolCache::SfxItemPoolCache( SfxItemPool *pItemPool, - const SfxPoolItem *pPutItem ): - pPool(pItemPool), - pCache(new SfxItemModifyArr_Impl), - pSetToPut( 0 ), - pItemToPut( &pItemPool->Put(*pPutItem) ) -{ - DBG_CTOR(SfxItemPoolCache, 0); - DBG_ASSERT(pItemPool, "kein Pool angegeben"); -} - -//------------------------------------------------------------------------ - -SfxItemPoolCache::SfxItemPoolCache( SfxItemPool *pItemPool, - const SfxItemSet *pPutSet ): - pPool(pItemPool), - pCache(new SfxItemModifyArr_Impl), - pSetToPut( pPutSet ), - pItemToPut( 0 ) -{ - DBG_CTOR(SfxItemPoolCache, 0); - DBG_ASSERT(pItemPool, "kein Pool angegeben"); -} - -//------------------------------------------------------------------------ - -SfxItemPoolCache::~SfxItemPoolCache() -{ - DBG_DTOR(SfxItemPoolCache, 0); - for ( USHORT nPos = 0; nPos < pCache->Count(); ++nPos ) { - pPool->Remove( *(*pCache)[nPos].pPoolItem ); - pPool->Remove( *(*pCache)[nPos].pOrigItem ); - } - delete pCache; pCache = 0; - - if ( pItemToPut ) - pPool->Remove( *pItemToPut ); -} - -//------------------------------------------------------------------------ - -const SfxSetItem& SfxItemPoolCache::ApplyTo( const SfxSetItem &rOrigItem, BOOL bNew ) -{ - DBG_CHKTHIS(SfxItemPoolCache, 0); - DBG_ASSERT( pPool == rOrigItem.GetItemSet().GetPool(), "invalid Pool" ); - DBG_ASSERT( IsDefaultItem( &rOrigItem ) || IsPooledItem( &rOrigItem ), - "original not in pool" ); - - // Suchen, ob diese Transformations schon einmal vorkam - for ( USHORT nPos = 0; nPos < pCache->Count(); ++nPos ) - { - SfxItemModifyImpl &rMapEntry = (*pCache)[nPos]; - if ( rMapEntry.pOrigItem == &rOrigItem ) - { - // aendert sich ueberhaupt etwas? - if ( rMapEntry.pPoolItem != &rOrigItem ) - { - rMapEntry.pPoolItem->AddRef(2); // einen davon fuer den Cache - if ( bNew ) - pPool->Put( rOrigItem ); //! AddRef?? - } - return *rMapEntry.pPoolItem; - } - } - - // die neue Attributierung in einem neuen Set eintragen - SfxSetItem *pNewItem = (SfxSetItem *)rOrigItem.Clone(); - if ( pItemToPut ) - { - pNewItem->GetItemSet().PutDirect( *pItemToPut ); - DBG_ASSERT( &pNewItem->GetItemSet().Get( pItemToPut->Which() ) == pItemToPut, - "wrong item in temporary set" ); - } - else - pNewItem->GetItemSet().Put( *pSetToPut ); - const SfxSetItem* pNewPoolItem = (const SfxSetItem*) &pPool->Put( *pNewItem ); - DBG_ASSERT( pNewPoolItem != pNewItem, "Pool: rein == raus?" ); - delete pNewItem; - - // Refernzzaehler anpassen, je einen davon fuer den Cache - pNewPoolItem->AddRef( pNewPoolItem != &rOrigItem ? 2 : 1 ); - if ( bNew ) - pPool->Put( rOrigItem ); //! AddRef?? - - // die Transformation im Cache eintragen - SfxItemModifyImpl aModify; - aModify.pOrigItem = &rOrigItem; - aModify.pPoolItem = (SfxSetItem*) pNewPoolItem; - pCache->Insert( aModify, pCache->Count() ); - - DBG_ASSERT( !pItemToPut || - &pNewPoolItem->GetItemSet().Get( pItemToPut->Which() ) == pItemToPut, - "wrong item in resulting set" ); - - return *pNewPoolItem; -} - - - |