/*************************************************************************
 *
 *  $RCSfile: svstdarr.hxx,v $
 *
 *  $Revision: 1.4 $
 *
 *  last change: $Author: mh $ $Date: 2002/10/24 10:42:29 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library 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 for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (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.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/

#ifndef _SVARRAY_HXX
#include <svtools/svarray.hxx>
#endif

#if 0
***********************************************************************
*
*   Die vordefinierte Arrays werden ueber POSITIV-Defines aktiviert:
*   (die defines setzen sich aus "_SVSTDARR_" und dem Namen des Array
*    ohne "Sv" zusammen)
*
*	VarArr:		SvBools, SvULongs, SvUShorts, SvLongs, SvShorts
*	PtrArr:		SvStrings, SvStringsDtor
*	SortArr:	SvStringsSort, SvStringsSortDtor,
*				SvStringsISort, SvStringsISortDtor,
*				SvUShortsSort
***********************************************************************
#endif

#ifdef _SVSTDARR_BOOLS
#ifndef _SVSTDARR_BOOLS_DECL
SV_DECL_VARARR( SvBools, BOOL, 1, 1 )
#define _SVSTDARR_BOOLS_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTES
#ifndef _SVSTDARR_BYTES_DECL
SV_DECL_VARARR( SvBytes, BYTE, 1, 1 )
#define _SVSTDARR_BYTES_DECL
#endif
#endif

#ifdef _SVSTDARR_ULONGS
#ifndef _SVSTDARR_ULONGS_DECL
SV_DECL_VARARR( SvULongs, ULONG, 1, 1 )
#define _SVSTDARR_ULONGS_DECL
#endif
#endif
#ifdef _SVSTDARR_ULONGSSORT
#ifndef _SVSTDARR_ULONGSSORT_DECL
SV_DECL_VARARR_SORT( SvULongsSort, ULONG, 1, 1 )
#define _SVSTDARR_ULONGSSORT_DECL
#endif
#endif

#ifdef _SVSTDARR_USHORTS
#ifndef _SVSTDARR_USHORTS_DECL
SV_DECL_VARARR( SvUShorts, USHORT, 1, 1 )
#define _SVSTDARR_USHORTS_DECL
#endif
#endif

#ifdef _SVSTDARR_USHORTSSORT
#ifndef _SVSTDARR_USHORTSSORT_DECL

typedef BOOL (*FnForEach_SvUShortsSort)( const USHORT&, void* );
class SvUShortsSort : __MWERKS__PRIVATE SvUShorts
{
public:
	SvUShortsSort(BYTE nSize = 1, BYTE nG = 1)
		: SvUShorts(nSize,nG) {}

	void Insert( const SvUShortsSort *pI, USHORT nS=0, USHORT nE=USHRT_MAX );
	BOOL Insert( const USHORT aE );
	BOOL Insert( const USHORT aE, USHORT& rP );
	void Insert( const USHORT *pE, USHORT nL );
	// remove ab Pos
	void RemoveAt( const USHORT nP, USHORT nL = 1 );
	// remove ab dem Eintrag
	void Remove( const USHORT nP, USHORT nL = 1 );
	BOOL Seek_Entry( const USHORT aE, USHORT* pP = 0 ) const;

	USHORT Count() const  {   return SvUShorts::Count();	}
	const USHORT* GetData() const { return (const USHORT*)pData; }

	const USHORT& operator[](USHORT nP) const {
		return SvUShorts::operator[]( nP );
	}
	const USHORT& GetObject(USHORT nP) const {
		return SvUShorts::GetObject( nP );
	}
	void ForEach( FnForEach_SvUShortsSort fnForEach, void* pArgs = 0 )
	{
		_ForEach( 0, nA, (FnForEach_SvUShorts)fnForEach, pArgs );
	}
	void ForEach( USHORT nS, USHORT nE,
					FnForEach_SvUShortsSort fnForEach, void* pArgs = 0 )
	{
		_ForEach( nS, nE, (FnForEach_SvUShorts)fnForEach, pArgs );
	}
private:
	SvUShortsSort( const SvUShortsSort& );
	SvUShortsSort& operator=( const SvUShortsSort& );
};

#define _SVSTDARR_USHORTSSORT_DECL
#endif
#endif

#ifdef _SVSTDARR_LONGS
#ifndef _SVSTDARR_LONGS_DECL
SV_DECL_VARARR( SvLongs, long, 1, 1 )
#define _SVSTDARR_LONGS_DECL
#endif
#endif
#ifdef _SVSTDARR_LONGSSORT
#ifndef _SVSTDARR_LONGSSORT_DECL
SV_DECL_VARARR_SORT( SvLongsSort, long, 1, 1 )
#define _SVSTDARR_LONGSSORT_DECL
#endif
#endif

#ifdef _SVSTDARR_SHORTS
#ifndef _SVSTDARR_SHORTS_DECL
SV_DECL_VARARR( SvShorts, short, 1, 1 )
#define _SVSTDARR_SHORTS_DECL
#endif
#endif

// form here all Arrays for Strings, ByteString and then
// len of a string (xub_StrLen)
#if (defined(_SVSTDARR_STRINGS) && !defined(_SVSTDARR_STRINGS_DECL)) || \
    (defined(_SVSTDARR_STRINGSDTOR) && !defined(_SVSTDARR_STRINGSDTOR_DECL)) || \
    (defined(_SVSTDARR_STRINGSSORT) && !defined(_SVSTDARR_STRINGSSORT_DECL)) || \
    (defined(_SVSTDARR_STRINGSSORTDTOR) && !defined(_SVSTDARR_STRINGSSORTDTOR_DECL)) || \
    (defined(_SVSTDARR_STRINGSISORT) && !defined(_SVSTDARR_STRINGSISORT_DECL)) || \
    (defined(_SVSTDARR_STRINGSISORTDTOR) && !defined(_SVSTDARR_STRINGSISORTDTOR_DECL)) || \
    (defined(_SVSTDARR_BYTESTRINGS) && !defined(_SVSTDARR_BYTESTRINGS_DECL)) || \
    (defined(_SVSTDARR_BYTESTRINGSDTOR) && !defined(_SVSTDARR_BYTESTRINGSDTOR_DECL)) || \
    (defined(_SVSTDARR_BYTESTRINGSSORT) && !defined(_SVSTDARR_BYTESTRINGSSORT_DECL)) || \
    (defined(_SVSTDARR_BYTESTRINGSSORTDTOR) && !defined(_SVSTDARR_BYTESTRINGSSORTDTOR_DECL)) || \
    (defined(_SVSTDARR_BYTESTRINGSISORT) && !defined(_SVSTDARR_BYTESTRINGSISORT_DECL)) || \
    (defined(_SVSTDARR_BYTESTRINGSISORTDTOR) && !defined(_SVSTDARR_BYTESTRINGSISORTDTOR_DECL)) || \
    (defined(_SVSTDARR_XUB_STRLEN) && !defined(_SVSTDARR_XUB_STRLEN_DECL)) ||\
    (defined(_SVSTDARR_XUB_STRLENSORT) && !defined(_SVSTDARR_XUB_STRLENSORT_DECL))

#ifndef _STRING_HXX
#include <tools/string.hxx>
#endif

typedef String* StringPtr;
typedef ByteString* ByteStringPtr;

#endif

#ifdef _SVSTDARR_STRINGS
#ifndef _SVSTDARR_STRINGS_DECL
SV_DECL_PTRARR( SvStrings, StringPtr, 1, 1 )
#define _SVSTDARR_STRINGS_DECL
#endif
#endif

#ifdef _SVSTDARR_STRINGSDTOR
#ifndef _SVSTDARR_STRINGSDTOR_DECL
SV_DECL_PTRARR_DEL( SvStringsDtor, StringPtr, 1, 1 )
#define _SVSTDARR_STRINGSDTOR_DECL
#endif
#endif

#ifdef _SVSTDARR_STRINGSSORT
#ifndef _SVSTDARR_STRINGSSORT_DECL
SV_DECL_PTRARR_SORT( SvStringsSort, StringPtr, 1, 1 )
#define _SVSTDARR_STRINGSSORT_DECL
#endif
#endif

#ifdef _SVSTDARR_STRINGSSORTDTOR
#ifndef _SVSTDARR_STRINGSSORTDTOR_DECL
SV_DECL_PTRARR_SORT_DEL( SvStringsSortDtor, StringPtr, 1, 1 )
#define _SVSTDARR_STRINGSSORTDTOR_DECL
#endif
#endif

#ifdef _SVSTDARR_STRINGSISORT
#ifndef _SVSTDARR_STRINGSISORT_DECL
SV_DECL_PTRARR_SORT( SvStringsISort, StringPtr, 1, 1 )
#define _SVSTDARR_STRINGSISORT_DECL
#endif
#endif

#ifdef _SVSTDARR_STRINGSISORTDTOR
#ifndef _SVSTDARR_STRINGSISORTDTOR_DECL
SV_DECL_PTRARR_SORT_DEL( SvStringsISortDtor, StringPtr, 1, 1 )
#define _SVSTDARR_STRINGSISORTDTOR_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTESTRINGS
#ifndef _SVSTDARR_BYTESTRINGS_DECL
SV_DECL_PTRARR( SvByteStrings, ByteStringPtr, 1, 1 )
#define _SVSTDARR_BYTESTRINGS_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTESTRINGSDTOR
#ifndef _SVSTDARR_BYTESTRINGSDTOR_DECL
SV_DECL_PTRARR_DEL( SvByteStringsDtor, ByteStringPtr, 1, 1 )
#define _SVSTDARR_BYTESTRINGSDTOR_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTESTRINGSSORT
#ifndef _SVSTDARR_BYTESTRINGSSORT_DECL
SV_DECL_PTRARR_SORT( SvByteStringsSort, ByteStringPtr, 1, 1 )
#define _SVSTDARR_BYTESTRINGSSORT_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTESTRINGSSORTDTOR
#ifndef _SVSTDARR_BYTESTRINGSSORTDTOR_DECL
SV_DECL_PTRARR_SORT_DEL( SvByteStringsSortDtor, ByteStringPtr, 1, 1 )
#define _SVSTDARR_BYTESTRINGSSORTDTOR_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTESTRINGSISORT
#ifndef _SVSTDARR_BYTESTRINGSISORT_DECL
SV_DECL_PTRARR_SORT( SvByteStringsISort, ByteStringPtr, 1, 1 )
#define _SVSTDARR_BYTESTRINGSISORT_DECL
#endif
#endif

#ifdef _SVSTDARR_BYTESTRINGSISORTDTOR
#ifndef _SVSTDARR_BYTESTRINGSISORTDTOR_DECL
SV_DECL_PTRARR_SORT_DEL( SvByteStringsISortDtor, ByteStringPtr, 1, 1 )
#define _SVSTDARR_BYTESTRINGSISORTDTOR_DECL
#endif
#endif

#ifdef _SVSTDARR_XUB_STRLEN
#ifndef _SVSTDARR_XUB_STRLEN_DECL
SV_DECL_VARARR( SvXub_StrLens, xub_StrLen, 1, 1 )
#define _SVSTDARR_XUB_STRLEN_DECL
#endif
#endif
#ifdef _SVSTDARR_XUB_STRLENSORT
#ifndef _SVSTDARR_XUB_STRLENSORT_DECL
SV_DECL_VARARR_SORT( SvXub_StrLensSort, xub_StrLen, 1, 1 )
#define _SVSTDARR_XUB_STRLENSORT_DECL
#endif
#endif

