diff options
author | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2013-04-18 18:26:28 +0200 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2013-04-23 22:20:31 +0200 |
commit | b9337e22ce1dbf2eba0e8c8db294ae99f4111f91 (patch) | |
tree | 53ee1bd3dfd213815a21579151983cb997922b05 /include/svl/itempool.hxx | |
parent | f4e1642a1761d5eab6ccdd89928869c2b2f1528a (diff) |
execute move of global headers
see https://gerrit.libreoffice.org/#/c/3367/
and Change-Id: I00c96fa77d04b33a6f8c8cd3490dfcd9bdc9e84a for details
Change-Id: I199a75bc4042af20817265d5ef85b1134a96ff5a
Diffstat (limited to 'include/svl/itempool.hxx')
-rw-r--r-- | include/svl/itempool.hxx | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/include/svl/itempool.hxx b/include/svl/itempool.hxx new file mode 100644 index 000000000000..ab9ff84d173d --- /dev/null +++ b/include/svl/itempool.hxx @@ -0,0 +1,259 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef _SFXITEMPOOL_HXX +#define _SFXITEMPOOL_HXX + +#include "svl/svldllapi.h" + +#include <limits.h> +#include <tools/solar.h> +#include <tools/string.hxx> +#include <svl/poolitem.hxx> +#include <vector> + +class SvStream; +class SfxBroadcaster; +struct SfxItemPool_Impl; + +#define SFX_WHICH_MAX 4999 + +DBG_NAMEEX(SfxItemPool) + +//==================================================================== + +#define SFX_ITEM_POOLABLE 0x0001 +#define SFX_ITEM_NOT_POOLABLE 0x0002 + +#define SFX_ITEM_USERFLAG0 0x0100 +#define SFX_ITEM_USERFLAG1 0x0200 +#define SFX_ITEM_USERFLAG2 0x0400 +#define SFX_ITEM_USERFLAG3 0x0800 +#define SFX_ITEM_USERFLAG4 0x1000 +#define SFX_ITEM_USERFLAG5 0x2000 +#define SFX_ITEM_USERFLAG6 0x4000 +#define SFX_ITEM_USERFLAG7 0x8000 +#define SFX_ITEM_USERFLAG8 0x0010 +#define SFX_ITEM_USERFLAG9 0x0020 +#define SFX_ITEM_USERFLAGA 0x0040 +#define SFX_ITEM_USERFLAGB 0x0080 + +//==================================================================== + +struct SfxItemInfo +{ + sal_uInt16 _nSID; + sal_uInt16 _nFlags; +}; + +//==================================================================== + +class SfxStyleSheetIterator; +struct SfxPoolItemArray_Impl; +class SfxItemPool; + +class SVL_DLLPUBLIC SfxItemPoolUser +{ +public: + virtual void ObjectInDestruction(const SfxItemPool& rSfxItemPool) = 0; + +protected: + ~SfxItemPoolUser() {} +}; + +class SVL_DLLPUBLIC SfxItemPool + +/* [Beschreibung] + + Die von dieser Klasse abgeleiteten Klassen dienen der Bereitstellung von + Defaults von SfxPoolItems und halten konkrete (konstante) Instanzen, die + dann von mehreren Stellen (i.d.R. eines Dokuments) referenziert werden + k�nnen. + + Dadurch ist jeder Wert nur einmalig gespeichert, was zu wenig Konstruktor + und Destruktor-Aufrufen f�hrt, Vergleiche zwischen Items eines Dokuments + beschleunigt und ein einfaches Laden und Speichern von Attributen + bereitstellt. +*/ + +{ + friend struct SfxItemPool_Impl; + + const SfxItemInfo* pItemInfos; + SfxItemPool_Impl* pImp; + +public: + void AddSfxItemPoolUser(SfxItemPoolUser& rNewUser); + void RemoveSfxItemPoolUser(SfxItemPoolUser& rOldUser); + + //--------------------------------------------------------------------- +#ifndef _SFXITEMS_HXX + +private: + 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; + +public: + // fuer dflt. SfxItemSet::CTOR, setze dflt. WhichRanges + void FillItemIdRanges_Impl( sal_uInt16*& pWhichRanges ) const; + 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 void SetKind( SfxPoolItem& rItem, sal_uInt16 nRef ); + +public: + SfxItemPool( const SfxItemPool &rPool, + sal_Bool bCloneStaticDefaults = sal_False ); + SfxItemPool( const OUString &rName, + sal_uInt16 nStart, sal_uInt16 nEnd, + const SfxItemInfo *pItemInfos, + SfxPoolItem **pDefaults = 0, + bool bLoadRefCounts = true ); +protected: + virtual ~SfxItemPool(); +public: + static void Free(SfxItemPool* pPool); + + SfxBroadcaster& BC(); + + void SetPoolDefaultItem( const SfxPoolItem& ); + const SfxPoolItem* GetPoolDefaultItem( sal_uInt16 nWhich ) const; + void ResetPoolDefaultItem( sal_uInt16 nWhich ); + + void SetDefaults( SfxPoolItem **pDefaults ); + void ReleaseDefaults( sal_Bool bDelete = sal_False ); + static void ReleaseDefaults( SfxPoolItem **pDefaults, sal_uInt16 nCount, sal_Bool bDelete = sal_False ); + + virtual SfxMapUnit GetMetric( sal_uInt16 nWhich ) const; + void SetDefaultMetric( SfxMapUnit eNewMetric ); + virtual SfxItemPresentation GetPresentation( const SfxPoolItem& rItem, + SfxItemPresentation ePresentation, + SfxMapUnit ePresentationMetric, + OUString& rText, + const IntlWrapper * pIntlWrapper + = 0 ) const; + virtual SfxItemPool* Clone() const; + const OUString& GetName() const; + + virtual const SfxPoolItem& Put( const SfxPoolItem&, sal_uInt16 nWhich = 0 ); + virtual void Remove( const SfxPoolItem& ); + virtual const SfxPoolItem& GetDefaultItem( sal_uInt16 nWhich ) const; + + const SfxPoolItem* LoadItem( SvStream &rStream, + bool bDirect = false, + const SfxItemPool *pRefPool = 0 ); + bool StoreItem( SvStream &rStream, + const SfxPoolItem &rItem, + bool bDirect = false ) const; + + sal_uInt32 GetSurrogate(const SfxPoolItem *) const; + const SfxPoolItem * GetItem2(sal_uInt16 nWhich, sal_uInt32 nSurrogate) const; + sal_uInt32 GetItemCount2(sal_uInt16 nWhich) const; + const SfxPoolItem* LoadSurrogate(SvStream& rStream, + sal_uInt16 &rWhich, sal_uInt16 nSlotId, + const SfxItemPool* pRefPool = 0 ); + bool StoreSurrogate(SvStream& rStream, + const SfxPoolItem *pItem ) const; + + virtual SvStream & Load(SvStream &); + virtual SvStream & Store(SvStream &) const; + bool HasPersistentRefCounts() const; + void LoadCompleted(); + + 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; + SfxItemPool* GetMasterPool() const; + void FreezeIdRanges(); + + void Delete(); + + bool IsItemFlag( sal_uInt16 nWhich, sal_uInt16 nFlag ) const; + bool IsItemFlag( const SfxPoolItem &rItem, sal_uInt16 nFlag ) const + { return IsItemFlag( rItem.Which(), nFlag ); } + void SetItemInfos( const SfxItemInfo *pInfos ) + { pItemInfos = pInfos; } + 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, + const sal_uInt16 *pWhichIdTab ); + sal_uInt16 GetNewWhich( sal_uInt16 nOldWhich ) const; + sal_uInt16 GetVersion() const; + void SetFileFormatVersion( sal_uInt16 nFileFormatVersion ); + bool IsCurrentVersionLoading() const; + + static int IsWhich(sal_uInt16 nId) { + return nId && nId <= SFX_WHICH_MAX; } + static int IsSlot(sal_uInt16 nId) { + return nId && nId > SFX_WHICH_MAX; } + + static const SfxItemPool* GetStoringPool(); + +private: + const SfxItemPool& operator=(const SfxItemPool &); // n.i.!! + + static const SfxItemPool* pStoringPool_; +}; + +// --------------- Inline Implementierungen ------------------------------ + +// nur der Pool darf den Referenz-Zaehler manipulieren !!! +inline void SfxItemPool::SetRefCount( SfxPoolItem& rItem, sal_uLong n ) +{ + rItem.SetRefCount(n); +} + +// nur der Pool darf den Referenz-Zaehler manipulieren !!! +inline sal_uLong SfxItemPool::AddRef( const SfxPoolItem& rItem, sal_uLong n ) +{ + return rItem.AddRef(n); +} + +// nur der Pool darf den Referenz-Zaehler manipulieren !!! +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: */ |