diff options
Diffstat (limited to 'tools/inc/impcont.hxx')
-rw-r--r-- | tools/inc/impcont.hxx | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/tools/inc/impcont.hxx b/tools/inc/impcont.hxx new file mode 100644 index 000000000000..c540d3d1f484 --- /dev/null +++ b/tools/inc/impcont.hxx @@ -0,0 +1,150 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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. + * + ************************************************************************/ + +#ifndef _IMPCONT_HXX +#define _IMPCONT_HXX + +#include <tools/tools.h> +#include <tools/contnr.hxx> + +typedef void* PVOID; + +// ---------- +// - CBlock - +// ---------- + +class CBlock +{ +private: + CBlock* pPrev; // Vorheriger Block + CBlock* pNext; // Naechster Block + USHORT nSize; // Groesse des Blocks + USHORT nCount; // Anzahl Pointer + void** pNodes; // Pointer auf die Daten + +#if defined DBG_UTIL + static char const * DbgCheckCBlock(void const *); +#endif + +public: + // Fuer List-Container + CBlock( USHORT nSize, CBlock* pPrev, CBlock* pNext ); + // Fuer Array-Container + CBlock( USHORT nSize, CBlock* pPrev ); + // Copy-Ctor + CBlock( const CBlock& r, CBlock* pPrev ); + ~CBlock(); + + void Insert( void* p, USHORT nIndex, USHORT nReSize ); + CBlock* Split( void* p, USHORT nIndex, USHORT nReSize ); + void* Remove( USHORT nIndex, USHORT nReSize ); + void* Replace( void* pNew, USHORT nIndex ); + + void** GetNodes() const { return pNodes; } + void** GetObjectPtr( USHORT nIndex ); + void* GetObject( USHORT nIndex ) const; + + void SetSize( USHORT nNewSize ); + + USHORT GetSize() const { return nCount; } + USHORT Count() const { return nCount; } + void SetPrevBlock( CBlock* p ) { pPrev = p; } + void SetNextBlock( CBlock* p ) { pNext = p; } + CBlock* GetPrevBlock() const { return pPrev; } + CBlock* GetNextBlock() const { return pNext; } + void Reset() { nCount = 0; } + +private: + CBlock( const CBlock& r ); + + friend class Container; +}; + +/************************************************************************* +|* +|* CBlock::GetObject() +|* +|* Beschreibung Gibt einen Pointer aus dem Block zurueck +|* Ersterstellung TH 17.09.91 +|* Letzte Aenderung TH 17.09.91 +|* +*************************************************************************/ + +inline void* CBlock::GetObject( USHORT nIndex ) const +{ + return pNodes[nIndex]; +} + +/************************************************************************* +|* +|* Container::ImpGetObject() +|* +|* Beschreibung Wir gehen davon aus, das Pointer in der Regel +|* sich im ersten Block befindet und schalten +|* deshalb eine Inline-Methode davor +|* Ersterstellung TH 02.07.93 +|* Letzte Aenderung TH 02.07.93 +|* +*************************************************************************/ + +inline void* Container::ImpGetObject( ULONG nIndex ) const +{ + if ( pFirstBlock && (nIndex < pFirstBlock->Count()) ) + // Item innerhalb des gefundenen Blocks zurueckgeben + return pFirstBlock->GetObject( (USHORT)nIndex ); + else + return GetObject( nIndex ); +} + +/************************************************************************* +|* +|* Container::ImpGetOnlyNodes() +|* +|* Beschreibung Wenn es nur einen Block gibt, wird davon +|* das Daten-Array zurueckgegeben +|* Ersterstellung TH 24.01.96 +|* Letzte Aenderung TH 24.01.96 +|* +*************************************************************************/ + +// #i70651#: Prevent warnings on Mac OS X +#ifdef MACOSX +#pragma GCC system_header +#endif + +inline void** Container::ImpGetOnlyNodes() const +{ + if ( (pFirstBlock == pLastBlock) && pFirstBlock ) + return pFirstBlock->GetNodes(); + else + return NULL; +} + +#endif // _IMPCONT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |