diff options
Diffstat (limited to 'tools/inc/tools/table.hxx')
-rw-r--r-- | tools/inc/tools/table.hxx | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/tools/inc/tools/table.hxx b/tools/inc/tools/table.hxx new file mode 100644 index 000000000000..e37490009d6d --- /dev/null +++ b/tools/inc/tools/table.hxx @@ -0,0 +1,155 @@ +/************************************************************************* + * + * 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: table.hxx,v $ + * $Revision: 1.3 $ + * + * 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 _TOOLS_TABLE_HXX +#define _TOOLS_TABLE_HXX + +#include "tools/toolsdllapi.h" +#include <tools/solar.h> +#include <tools/contnr.hxx> + +// --------- +// - Table - +// --------- + +#define TABLE_ENTRY_NOTFOUND CONTAINER_ENTRY_NOTFOUND + +class TOOLS_DLLPUBLIC Table : private Container +{ +private: + ULONG nCount; +//#if 0 // _SOLAR__PRIVATE + TOOLS_DLLPRIVATE ULONG ImplGetIndex( ULONG nKey, ULONG* pIndex = NULL ) const; +//#endif +public: + Table( USHORT nInitSize = 16, USHORT nReSize = 16 ); + Table( const Table& rTable ) : Container( rTable ) + { nCount = rTable.nCount; } + + BOOL Insert( ULONG nKey, void* p ); + void* Remove( ULONG nKey ); + void* Replace( ULONG nKey, void* p ); + void* Get( ULONG nKey ) const; + + void Clear() { Container::Clear(); nCount = 0; } + ULONG Count() const { return( nCount ); } + + void* GetCurObject() const; + ULONG GetCurKey() const { return (ULONG)Container::GetCurObject(); } + ULONG GetKey( const void* p ) const; + BOOL IsKeyValid( ULONG nKey ) const; + + void* GetObject( ULONG nPos ) const + { return Container::GetObject( (nPos*2)+1 ); } + ULONG GetObjectKey( ULONG nPos ) const + { return (ULONG)Container::GetObject( nPos*2 ); } + ULONG GetUniqueKey( ULONG nStartKey = 1 ) const; + ULONG SearchKey( ULONG nKey, ULONG* pPos = NULL ) const; + + void* Seek( ULONG nKey ); + void* Seek( void* p ); + void* First(); + void* Last(); + void* Next(); + void* Prev(); + + Table& operator =( const Table& rTable ); + + BOOL operator ==( const Table& rTable ) const + { return Container::operator ==( rTable ); } + BOOL operator !=( const Table& rTable ) const + { return Container::operator !=( rTable ); } +}; + +inline Table& Table::operator =( const Table& r ) +{ + Container::operator =( r ); + nCount = r.nCount; + return *this; +} + +// ----------------- +// - DECLARE_TABLE - +// ----------------- + +#define DECLARE_TABLE( ClassName, Type ) \ +class ClassName : private Table \ +{ \ +public: \ + using Table::Clear; \ + using Table::Count; \ + using Table::GetCurKey; \ + using Table::GetObjectKey; \ + using Table::GetUniqueKey; \ + using Table::SearchKey; \ + using Table::IsKeyValid; \ + \ + ClassName( USHORT _nInitSize = 16, \ + USHORT _nReSize = 16 ) : \ + Table( _nInitSize, _nReSize ) {} \ + ClassName( const ClassName& rClassName ) : \ + Table( rClassName ) {} \ + \ + BOOL Insert( ULONG nKey, Type p ) \ + { return Table::Insert( nKey, (void*)p ); } \ + Type Remove( ULONG nKey ) \ + { return (Type)Table::Remove( nKey ); } \ + Type Replace( ULONG nKey, Type p ) \ + { return (Type)Table::Replace( nKey, (void*)p ); } \ + Type Get( ULONG nKey ) const \ + { return (Type)Table::Get( nKey ); } \ + \ + Type GetCurObject() const \ + { return (Type)Table::GetCurObject(); } \ + ULONG GetKey( const Type p ) const \ + { return Table::GetKey( (const void*)p ); } \ + \ + Type GetObject( ULONG nPos ) const \ + { return (Type)Table::GetObject( nPos ); } \ + \ + Type Seek( ULONG nKey ) \ + { return (Type)Table::Seek( nKey ); } \ + Type Seek( Type p ) \ + { return (Type)Table::Seek( (void*)p ); } \ + Type First() { return (Type)Table::First(); } \ + Type Last() { return (Type)Table::Last(); } \ + Type Next() { return (Type)Table::Next(); } \ + Type Prev() { return (Type)Table::Prev(); } \ + \ + ClassName& operator =( const ClassName& rClassName ) \ + { Table::operator =( rClassName ); \ + return *this; } \ + \ + BOOL operator ==( const ClassName& rTable ) const \ + { return Table::operator ==( rTable ); } \ + BOOL operator !=( const ClassName& rTable ) const \ + { return Table::operator !=( rTable ); } \ +}; + +#endif // _TOOLS_TABLE_HXX |