LCOV - code coverage report
Current view: top level - libreoffice/rsc/source/res - rscflag.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 105 165 63.6 %
Date: 2012-12-27 Functions: 13 19 68.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : /****************** I N C L U D E S **************************************/
      21             : 
      22             : // C and C++ Includes.
      23             : #include <stdlib.h>
      24             : #include <stdio.h>
      25             : #include <string.h>
      26             : 
      27             : #include <rscflag.hxx>
      28             : 
      29             : /****************** C O D E **********************************************/
      30             : /****************** R s c F l a g ****************************************/
      31             : /*************************************************************************
      32             : |*
      33             : |*    RscFlag::RscFlag()
      34             : |*
      35             : *************************************************************************/
      36        3455 : RscFlag::RscFlag( Atom nId, sal_uInt32 nTypeId )
      37        3455 :             : RscConst( nId, nTypeId )
      38        3455 : {}
      39             : 
      40             : /*************************************************************************
      41             : |*
      42             : |*    RscFlag::Size()
      43             : |*
      44             : |*    Beschreibung      Die Groe�e der Instanzdaten richtet sich nach
      45             : |*                      der Anzahl der Flags
      46             : |*
      47             : *************************************************************************/
      48      211642 : sal_uInt32 RscFlag::Size()
      49             : {
      50             :     return( ALIGNED_SIZE( sizeof( RscFlagInst ) *
      51      211642 :             ( 1 + (nEntries -1) / (sizeof( sal_uInt32 ) * 8) ) ) );
      52             : }
      53             : 
      54             : /*************************************************************************
      55             : |*
      56             : |*    RscFlag::SetNotConst()
      57             : |*
      58             : *************************************************************************/
      59         265 : ERRTYPE RscFlag::SetNotConst( const RSCINST & rInst, Atom nConst )
      60             : {
      61         265 :     sal_uInt32 i = 0;
      62             : 
      63         265 :     if( nEntries != (i = GetConstPos( nConst )) ){
      64         265 :         sal_uInt32 nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) );
      65         265 :         i = i / (sizeof( sal_uInt32 ) * 8);
      66         265 :         ((RscFlagInst *)rInst.pData)[ i ].nFlags     &= ~nFlag;
      67         265 :         ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags &= ~nFlag;
      68         265 :         return( ERR_OK );
      69             :     };
      70             : 
      71           0 :     return( ERR_RSCFLAG );
      72             : }
      73             : 
      74             : /*************************************************************************
      75             : |*
      76             : |*    RscFlag::SetConst()
      77             : |*
      78             : *************************************************************************/
      79       23170 : ERRTYPE RscFlag::SetConst( const RSCINST & rInst, Atom nConst, sal_Int32 /*nVal*/ )
      80             : {
      81       23170 :     sal_uInt32 i = 0;
      82             : 
      83       23170 :     if( nEntries != (i = GetConstPos( nConst )) ){
      84       23170 :         sal_uInt32 nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) );
      85       23170 :         i = i / (sizeof( sal_uInt32 ) * 8);
      86       23170 :         ((RscFlagInst *)rInst.pData)[ i ].nFlags     |= nFlag;
      87       23170 :         ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags &= ~nFlag;
      88       23170 :         return( ERR_OK );
      89             :     };
      90             : 
      91           0 :     return( ERR_RSCFLAG );
      92             : }
      93             : 
      94             : /*************************************************************************
      95             : |*
      96             : |*    RscFlag::CreateBasic()
      97             : |*
      98             : *************************************************************************/
      99      345579 : RSCINST RscFlag::CreateBasic( RSCINST * pInst )
     100             : {
     101      345579 :     RSCINST aInst;
     102             : 
     103      345579 :     if( !pInst ){
     104       21637 :         aInst.pClass = this;
     105       21637 :         aInst.pData = (CLASS_DATA) rtl_allocateMemory( Size() );
     106             :     }
     107             :     else
     108      323942 :         aInst = *pInst;
     109             : 
     110      345579 :     return( aInst );
     111             : }
     112             : 
     113             : /*************************************************************************
     114             : |*
     115             : |*    RscFlag::Create()
     116             : |*
     117             : *************************************************************************/
     118       44602 : RSCINST RscFlag::Create( RSCINST * pInst, const RSCINST & rDflt, sal_Bool bOwnClass )
     119             : {
     120       44602 :     RSCINST aInst = CreateBasic( pInst );
     121             : 
     122       44602 :     if( !bOwnClass && rDflt.IsInst() )
     123         202 :         bOwnClass = rDflt.pClass->InHierarchy( this );
     124             : 
     125       44602 :     if( bOwnClass )
     126         202 :         memmove( aInst.pData, rDflt.pData, Size() );
     127             :     else
     128             :     {
     129      106883 :         for( sal_uInt32 i = 0; i < Size() / sizeof( RscFlagInst ); i++ )
     130             :         {
     131       62483 :             ((RscFlagInst *)aInst.pData)[ i ].nFlags = 0;
     132       62483 :             ((RscFlagInst *)aInst.pData)[ i ].nDfltFlags = 0xFFFFFFFF;
     133             :         }
     134             :     };
     135             : 
     136       44602 :     return( aInst );
     137             : }
     138             : 
     139             : /*************************************************************************
     140             : |*
     141             : |*    RscFlag::CreateClient()
     142             : |*
     143             : *************************************************************************/
     144      300977 : RSCINST RscFlag::CreateClient( RSCINST * pInst, const RSCINST & rDfltI,
     145             :                                sal_Bool bOwnClass, Atom nConstId )
     146             : {
     147      300977 :     RSCINST aInst = CreateBasic( pInst );
     148      300977 :     sal_uInt32 i = 0;
     149             : 
     150      300977 :     if( !bOwnClass && rDfltI.IsInst() )
     151           0 :         bOwnClass = rDfltI.pClass->InHierarchy( this );
     152             : 
     153      300977 :     if( nEntries != (i = GetConstPos( nConstId )) )
     154             :     {
     155      300977 :         sal_uInt32 nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) );
     156      300977 :         i = i / (sizeof( sal_uInt32 ) * 8);
     157      300977 :         if( bOwnClass ){
     158             :             ((RscFlagInst *)aInst.pData)[ i ].nFlags &=
     159        1494 :             ~nFlag | ((RscFlagInst *)rDfltI.pData)[ i ].nFlags;
     160             :             ((RscFlagInst *)aInst.pData)[ i ].nDfltFlags &=
     161        1494 :             ~nFlag | ((RscFlagInst *)rDfltI.pData)[ i ].nDfltFlags;
     162             :         }
     163             :         else{
     164      299483 :             ((RscFlagInst *)aInst.pData)[ i ].nFlags &= ~nFlag;
     165      299483 :             ((RscFlagInst *)aInst.pData)[ i ].nDfltFlags |= nFlag;
     166             :         }
     167             :     }
     168             : 
     169      300977 :     return( aInst );
     170             : }
     171             : 
     172             : /*************************************************************************
     173             : |*
     174             : |*    RscFlag::SetToDefault()
     175             : |*
     176             : *************************************************************************/
     177           0 : void RscFlag::SetToDefault( const RSCINST & rInst )
     178             : {
     179           0 :     sal_uInt32 i = 0;
     180             : 
     181           0 :     for( i = 0; i < Size() / sizeof( RscFlagInst ); i++ )
     182           0 :         ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags = 0xFFFFFFFF;
     183           0 : }
     184             : 
     185             : /*************************************************************************
     186             : |*
     187             : |*    RscFlag::IsDlft()
     188             : |*
     189             : *************************************************************************/
     190           0 : sal_Bool RscFlag::IsDefault( const RSCINST & rInst )
     191             : {
     192           0 :     sal_uInt32 i = 0;
     193             : 
     194           0 :     for( i = 0; i < Size() / sizeof( RscFlagInst ); i++ )
     195           0 :         if( ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags != 0xFFFFFFFF )
     196           0 :             return( sal_False );
     197           0 :     return( sal_True );
     198             : }
     199             : 
     200           0 : sal_Bool RscFlag::IsDefault( const RSCINST & rInst, Atom nConstId )
     201             : {
     202           0 :     sal_uInt32 i = 0, nFlag = 0;
     203             : 
     204           0 :     if( nEntries != (i = GetConstPos( nConstId )) ){
     205           0 :         nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) );
     206           0 :         i = i / (sizeof( sal_uInt32 ) * 8);
     207           0 :         if( ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags & nFlag )
     208           0 :             return( sal_True );
     209             :         else
     210           0 :             return( sal_False );
     211             :     };
     212           0 :     return( sal_True );
     213             : }
     214             : 
     215             : /*************************************************************************
     216             : |*
     217             : |*    RscFlag::IsValueDefault()
     218             : |*
     219             : *************************************************************************/
     220       11881 : sal_Bool RscFlag::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef,
     221             :                               Atom nConstId )
     222             : {
     223       11881 :     sal_uInt32 i = 0, nFlag = 0;
     224             : 
     225       11881 :     if( nEntries != (i = GetConstPos( nConstId )) ){
     226       11881 :         nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) );
     227       11881 :         i = i / (sizeof( sal_uInt32 ) * 8);
     228             : 
     229       11881 :         if( pDef ){
     230       23762 :             if( (((RscFlagInst *)rInst.pData)[ i ].nFlags & nFlag)
     231       11881 :               == (((RscFlagInst *)pDef)[ i ].nFlags & nFlag) )
     232             :             {
     233         267 :                 return sal_True;
     234             :             }
     235             :         }
     236             :     };
     237             : 
     238       11614 :     return sal_False;
     239             : }
     240             : 
     241           0 : sal_Bool RscFlag::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef )
     242             : {
     243           0 :     if( pDef ){
     244           0 :         sal_uInt32  Flag = 0, nIndex = 0;
     245             : 
     246           0 :         Flag = 1;
     247           0 :         for( sal_uInt32 i = 0; i < nEntries; i++ ){
     248           0 :             nIndex = i / (sizeof( sal_uInt32 ) * 8);
     249           0 :             if( (((RscFlagInst *)rInst.pData)[ nIndex ].nFlags & Flag)
     250           0 :               != (((RscFlagInst *)pDef)[ nIndex ].nFlags & Flag)  )
     251             :             {
     252           0 :                 return sal_False;
     253             :             }
     254           0 :             Flag <<= 1;
     255           0 :             if( !Flag )
     256           0 :                 Flag = 1;
     257             :         };
     258             :     }
     259             :     else
     260           0 :         return sal_False;
     261             : 
     262           0 :     return sal_True;
     263             : }
     264             : 
     265             : /*************************************************************************
     266             : |*
     267             : |*    RscFlag::IsSet()
     268             : |*
     269             : *************************************************************************/
     270       11614 : sal_Bool RscFlag::IsSet( const RSCINST & rInst, Atom nConstId )
     271             : {
     272       11614 :     sal_uInt32 i = 0, nFlag = 0;
     273             : 
     274       11614 :     if( nEntries != (i = GetConstPos( nConstId )) ){
     275       11614 :         nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) );
     276       11614 :         i = i / (sizeof( sal_uInt32 ) * 8);
     277       11614 :         if( ((RscFlagInst *)rInst.pData)[ i ].nFlags & nFlag )
     278       11614 :             return( sal_True );
     279             :         else
     280           0 :             return( sal_False );
     281             :     };
     282           0 :     return( sal_True );
     283             : }
     284             : 
     285             : /*************************************************************************
     286             : |*
     287             : |*    RscFlag::WriteSrc()
     288             : |*
     289             : *************************************************************************/
     290           0 : void RscFlag::WriteSrc( const RSCINST & rInst, FILE * fOutput,
     291             :                         RscTypCont *, sal_uInt32, const char * )
     292             : {
     293           0 :     sal_uInt32  i = 0, Flag = 0, nIndex = 0;
     294           0 :     sal_Bool    bComma = sal_False;
     295             : 
     296           0 :     Flag = 1;
     297           0 :     for( i = 0; i < nEntries; i++ ){
     298           0 :         nIndex = i / (sizeof( sal_uInt32 ) * 8);
     299           0 :         if( !( ((RscFlagInst *)rInst.pData)[ nIndex ].nDfltFlags & Flag) ){
     300           0 :             if( bComma )
     301           0 :                 fprintf( fOutput, ", " );
     302           0 :             if( ((RscFlagInst *)rInst.pData)[ nIndex ].nFlags & Flag )
     303           0 :                 fprintf( fOutput, "%s", pHS->getString( pVarArray[ i ].nId ).getStr() );
     304             :             else{
     305           0 :                 fprintf( fOutput, "not " );
     306           0 :                 fprintf( fOutput, "%s", pHS->getString( pVarArray[ i ].nId ).getStr() );
     307             :             }
     308           0 :             bComma = sal_True;
     309             :         }
     310           0 :         Flag <<= 1;
     311           0 :         if( !Flag )
     312           0 :             Flag = 1;
     313             :     };
     314           0 : }
     315             : 
     316             : /*************************************************************************
     317             : |*
     318             : |*    RscFlag::WriteRc()
     319             : |*
     320             : *************************************************************************/
     321       18436 : ERRTYPE RscFlag::WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
     322             :                           RscTypCont *, sal_uInt32, sal_Bool )
     323             : {
     324       18436 :     sal_Int32   lVal = 0;
     325       18436 :     sal_uInt32  i = 0, Flag = 0, nIndex = 0;
     326             : 
     327       18436 :     Flag = 1;
     328      537103 :     for( i = 0; i < nEntries; i++ ){
     329      518667 :         nIndex = i / (sizeof( sal_uInt32 ) * 8);
     330      518667 :         if( ((RscFlagInst *)rInst.pData)[ nIndex ].nFlags & Flag )
     331       11614 :             lVal |= pVarArray[ i ].lValue;
     332             : 
     333      518667 :         Flag <<= 1;
     334      518667 :         if( !Flag )
     335        9073 :             Flag = 1;
     336             :     };
     337             : 
     338       18436 :     aMem.Put( (sal_Int32)lVal );
     339       18436 :     return( ERR_OK );
     340             : }
     341             : 
     342             : /*************************************************************************
     343             : |*
     344             : |*    RscClient::RscClient()
     345             : |*
     346             : *************************************************************************/
     347       76701 : RscClient::RscClient( Atom nId, sal_uInt32 nTypeId, RscFlag * pClass,
     348             :                        Atom nConstantId )
     349       76701 :            : RscTop ( nId, nTypeId )
     350             : {
     351       76701 :    pRefClass = pClass;
     352       76701 :    nConstId = nConstantId;
     353       76701 : }
     354             : 
     355             : /*************************************************************************
     356             : |*
     357             : |*    RscClient::GetClassType()
     358             : |*
     359             : *************************************************************************/
     360           0 : RSCCLASS_TYPE RscClient::GetClassType() const
     361             : {
     362           0 :     return RSCCLASS_BOOL;
     363             : }
     364             : 
     365             : /*************************************************************************
     366             : |*
     367             : |*    RscClient::WriteSrc()
     368             : |*
     369             : *************************************************************************/
     370       11614 : void RscClient::WriteSrc( const RSCINST & rInst, FILE * fOutput,
     371             :                           RscTypCont *, sal_uInt32, const char * )
     372             : {
     373       11614 :     if( pRefClass->IsSet( rInst, nConstId ) )
     374       11614 :         fprintf( fOutput, "TRUE" );
     375             :     else
     376           0 :         fprintf( fOutput, "FALSE" );
     377       11614 : }
     378             : 
     379             : /*************************************************************************
     380             : |*
     381             : |*    RscClient::Create()
     382             : |*
     383             : *************************************************************************/
     384      300977 : RSCINST RscClient::Create( RSCINST * pInst, const RSCINST & rDflt,
     385             :                            sal_Bool bOwnClass )
     386             : {
     387      300977 :     RSCINST aTmpI, aDfltI;
     388             : 
     389      300977 :     if( pInst ){
     390      297550 :         aTmpI.pClass = pRefClass;
     391      297550 :         aTmpI.pData  = pInst->pData;
     392             :     }
     393             : 
     394      300977 :     if( !bOwnClass && rDflt.IsInst() ){
     395        1494 :         bOwnClass = rDflt.pClass->InHierarchy( this );
     396        1494 :         if( bOwnClass ){
     397        1494 :             aDfltI.pClass = pRefClass;
     398        1494 :             aDfltI.pData = rDflt.pData;
     399             :         }
     400             :     }
     401             : 
     402      300977 :     if( pInst )
     403             :         aTmpI = pRefClass->CreateClient( &aTmpI, aDfltI,
     404      297550 :                                          bOwnClass, nConstId );
     405             :     else
     406             :         aTmpI = pRefClass->CreateClient( NULL, aDfltI,
     407        3427 :                                          bOwnClass, nConstId );
     408      300977 :     aTmpI.pClass = this;
     409             : 
     410      300977 :     return( aTmpI );
     411             : }
     412             : 
     413             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10