/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_rsc.hxx" /****************** I N C L U D E S **************************************/ #include #include #include #include #include #include #include #include #if defined(_MSC_VER) && (_MSC_VER >= 1200 ) #define _cdecl __cdecl #endif /****************** C o d e **********************************************/ /****************** keyword sort function ********************************/ extern "C" { #if defined( ZTC ) && defined( PM2 ) int __CLIB KeyCompare( const void * pFirst, const void * pSecond ); #else #if defined( WNT ) && !defined( WTC ) && !defined (ICC) int _cdecl KeyCompare( const void * pFirst, const void * pSecond ); #else int KeyCompare( const void * pFirst, const void * pSecond ); #endif #endif } #if defined( WNT ) && !defined( WTC ) && !defined(ICC) int _cdecl KeyCompare( const void * pFirst, const void * pSecond ){ #else int KeyCompare( const void * pFirst, const void * pSecond ){ #endif if( ((KEY_STRUCT *)pFirst)->nName > ((KEY_STRUCT *)pSecond)->nName ) return( 1 ); else if( ((KEY_STRUCT *)pFirst)->nName < ((KEY_STRUCT *)pSecond)->nName ) return( -1 ); else return( 0 ); } /************************************************************************* |* |* RscNameTable::RscNameTable() |* |* Beschreibung RES.DOC |* Ersterstellung MM 28.02.91 |* Letzte Aenderung MM 28.02.91 |* *************************************************************************/ RscNameTable::RscNameTable() { bSort = sal_True; nEntries = 0; pTable = NULL; }; /************************************************************************* |* |* RscNameTable::~RscNameTable() |* |* Beschreibung |* Ersterstellung MM 15.05.91 |* Letzte Aenderung MM 15.05.91 |* *************************************************************************/ RscNameTable::~RscNameTable() { if( pTable ) rtl_freeMemory( pTable ); }; /************************************************************************* |* |* RscNameTable::SetSort() |* |* Beschreibung RES.DOC |* Ersterstellung MM 28.02.91 |* Letzte Aenderung MM 28.02.91 |* *************************************************************************/ void RscNameTable::SetSort( sal_Bool bSorted ){ bSort = bSorted; if( bSort && pTable){ // Schluesselwort Feld sortieren qsort( (void *)pTable, nEntries, sizeof( KEY_STRUCT ), KeyCompare ); }; }; /************************************************************************* |* |* RscNameTable::Put() |* |* Beschreibung RES.DOC |* Ersterstellung MM 28.02.91 |* Letzte Aenderung MM 28.02.91 |* *************************************************************************/ Atom RscNameTable::Put( Atom nName, sal_uInt32 nTyp, long nValue ){ if( pTable ) pTable = (KEY_STRUCT *) rtl_reallocateMemory( (void *)pTable, ((nEntries +1) * sizeof( KEY_STRUCT )) ); else pTable = (KEY_STRUCT *) rtl_allocateMemory( ((nEntries +1) * sizeof( KEY_STRUCT )) ); pTable[ nEntries ].nName = nName; pTable[ nEntries ].nTyp = nTyp; pTable[ nEntries ].yylval = nValue; nEntries++; if( bSort ) SetSort(); return( nName ); }; Atom RscNameTable::Put( const char * pName, sal_uInt32 nTyp, long nValue ) { return( Put( pHS->getID( pName ), nTyp, nValue ) ); }; Atom RscNameTable::Put( Atom nName, sal_uInt32 nTyp ) { return( Put( nName, nTyp, (long)nName ) ); }; Atom RscNameTable::Put( const char * pName, sal_uInt32 nTyp ) { Atom nId; nId = pHS->getID( pName ); return( Put( nId, nTyp, (long)nId ) ); }; Atom RscNameTable::Put( Atom nName, sal_uInt32 nTyp, RscTop * pClass ) { return( Put( nName, nTyp, (long)pClass ) ); }; Atom RscNameTable::Put( const char * pName, sal_uInt32 nTyp, RscTop * pClass ) { return( Put( pHS->getID( pName ), nTyp, (long)pClass ) ); }; /************************************************************************* |* |* RscNameTable::Get() |* |* Beschreibung RES.DOC |* Ersterstellung MM 28.02.91 |* Letzte Aenderung MM 28.02.91 |* *************************************************************************/ sal_Bool RscNameTable::Get( Atom nName, KEY_STRUCT * pEle ){ KEY_STRUCT * pKey = NULL; KEY_STRUCT aSearchName; sal_uInt32 i; if( bSort ){ // Suche nach dem Schluesselwort aSearchName.nName = nName; pKey = (KEY_STRUCT *)bsearch( #ifdef UNX (const char *) &aSearchName, (char *)pTable, #else (const void *) &aSearchName, (const void *)pTable, #endif nEntries, sizeof( KEY_STRUCT ), KeyCompare ); } else{ i = 0; while( i < nEntries && !pKey ){ if( pTable[ i ].nName == nName ) pKey = &pTable[ i ]; i++; }; }; if( pKey ){ // Schluesselwort gefunden *pEle = *pKey; return( sal_True ); }; return( sal_False ); };