LCOV - code coverage report
Current view: top level - idl/source/objects - bastype.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 94 161 58.4 %
Date: 2014-11-03 Functions: 9 15 60.0 %
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             : 
      21             : #include <limits.h>
      22             : #include <ctype.h>
      23             : #include <bastype.hxx>
      24             : #include <lex.hxx>
      25             : #include <globals.hxx>
      26             : #include <hash.hxx>
      27             : #include <database.hxx>
      28             : 
      29         205 : static bool ReadRangeSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm,
      30             :                             sal_uLong nMin, sal_uLong nMax, sal_uLong* pValue )
      31             : {
      32         205 :     sal_uInt32 nTokPos = rInStm.Tell();
      33         205 :     SvToken * pTok = rInStm.GetToken_Next();
      34         205 :     if( pTok->Is( pName ) )
      35             :     {
      36           0 :         bool bOk = false;
      37           0 :         if( rInStm.Read( '=' ) )
      38             :         {
      39           0 :             pTok = rInStm.GetToken_Next();
      40           0 :             if( pTok->IsInteger() )
      41             :             {
      42           0 :                 sal_uLong n = pTok->GetNumber();
      43           0 :                 if ( n >= nMin && n <= nMax )
      44             :                 {
      45           0 :                     *pValue = n;
      46           0 :                     bOk = true;
      47             :                 }
      48             :             }
      49             :         }
      50             : 
      51           0 :         if( bOk )
      52           0 :             return true;
      53             :     }
      54             : 
      55         205 :     rInStm.Seek( nTokPos );
      56         205 :     return false;
      57             : }
      58             : 
      59           0 : SvStream& WriteSvBOOL(SvStream & rStm, const SvBOOL & rb )
      60             : {
      61           0 :     sal_uInt8 n = rb.nVal;
      62           0 :     if( rb.bSet )
      63           0 :         n |= 0x02;
      64           0 :     rStm.WriteUChar( n );
      65           0 :     return rStm;
      66             : }
      67           0 : SvStream& operator >> (SvStream & rStm, SvBOOL & rb )
      68             : {
      69             :     sal_uInt8 n;
      70           0 :     rStm.ReadUChar( n );
      71           0 :     rb.nVal = (n & 0x01) ? sal_True : sal_False;
      72           0 :     rb.bSet = (n & 0x02) ? sal_True : sal_False;
      73           0 :     if( n & ~0x03 )
      74             :     {
      75           0 :         rStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
      76             :         OSL_FAIL( "format error" );
      77             :     }
      78           0 :     return rStm;
      79             : }
      80             : 
      81           0 : SvStream& WriteSvVersion(SvStream & rStm, const SvVersion & r )
      82             : {
      83           0 :     if( (r.GetMajorVersion() || r.GetMinorVersion())
      84           0 :       && r.GetMajorVersion() <= 0x0F && r.GetMinorVersion() <= 0x0F )
      85             :     { // compress version number in 1 byte
      86             :         // format first 4 bit for major, then 4 bit for minor
      87             :         // 0.0 gets not compressed
      88             : 
      89           0 :         int n = r.GetMajorVersion() << 4;
      90           0 :         n |= r.GetMinorVersion();
      91           0 :         rStm.WriteUChar( n );
      92             :     }
      93             :     else
      94             :     {
      95           0 :         rStm.WriteUChar( 0 );
      96           0 :         rStm.WriteUInt16( r.GetMajorVersion() );
      97           0 :         rStm.WriteUInt16( r.GetMinorVersion() );
      98             :     }
      99           0 :     return rStm;
     100             : }
     101             : 
     102           0 : SvStream& operator >> (SvStream & rStm, SvVersion & r )
     103             : {
     104             :     sal_uInt8 n;
     105           0 :     rStm.ReadUChar( n );
     106           0 :     if( n == 0 )
     107             :     { // not compressed
     108           0 :         rStm.ReadUInt16( r.nMajorVersion );
     109           0 :         rStm.ReadUInt16( r.nMinorVersion );
     110             :     }
     111             :     else
     112             :     { // compressed
     113           0 :         r.nMajorVersion = (n >> 4) & 0x0F;
     114           0 :         r.nMinorVersion = n & 0x0F;
     115             :     }
     116           0 :     return rStm;
     117             : }
     118             : 
     119             : 
     120     5042050 : bool SvBOOL::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm )
     121             : {
     122     5042050 :     sal_uInt32 nTokPos = rInStm.Tell();
     123     5042050 :     SvToken * pTok = rInStm.GetToken_Next();
     124             : 
     125     5042050 :     if( pTok->Is( pName ) )
     126             :     {
     127      133245 :         bool bOk = true;
     128      133245 :         bool bBraket = rInStm.Read( '(' );
     129      133245 :         if( bBraket || rInStm.Read( '=' ) )
     130             :         {
     131      108960 :             pTok = rInStm.GetToken();
     132      108960 :             if( pTok->IsBool() )
     133             :             {
     134      100878 :                 *this = pTok->GetBool();
     135             : 
     136      100878 :                 rInStm.GetToken_Next();
     137             :             }
     138      108960 :             if( bOk && bBraket )
     139           0 :                 bOk = rInStm.Read( ')' );
     140             :         }
     141             :         else
     142       24285 :             *this = true; //default action set to TRUE
     143      133245 :         if( bOk )
     144      133245 :             return true;
     145             :     }
     146     4908805 :     rInStm.Seek( nTokPos );
     147     4908805 :     return false;
     148             : }
     149             : 
     150     1139259 : bool SvIdentifier::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm )
     151             : {
     152     1139259 :     sal_uInt32 nTokPos = rInStm.Tell();
     153     1139259 :     SvToken * pTok = rInStm.GetToken_Next();
     154             : 
     155     1139259 :     if( pTok->Is( pName ) )
     156             :     {
     157       15801 :         bool bOk = true;
     158       15801 :         bool bBraket = rInStm.Read( '(' );
     159       15801 :         if( bBraket || rInStm.Read( '=' ) )
     160             :         {
     161       15801 :             pTok = rInStm.GetToken();
     162       15801 :             if( pTok->IsIdentifier() )
     163             :             {
     164       15515 :                 setString(pTok->GetString());
     165       15515 :                 rInStm.GetToken_Next();
     166             :             }
     167       15801 :             if( bOk && bBraket )
     168           0 :                 bOk = rInStm.Read( ')' );
     169             :         }
     170       15801 :         if( bOk )
     171       15801 :             return true;
     172             :     }
     173     1123458 :     rInStm.Seek( nTokPos );
     174     1123458 :     return false;
     175             : }
     176             : 
     177      325527 : bool SvNumberIdentifier::ReadSvIdl( SvIdlDataBase & rBase,
     178             :                                     SvStringHashEntry * pName,
     179             :                                     SvTokenStream & rInStm )
     180             : {
     181      325527 :     if( SvIdentifier::ReadSvIdl( pName, rInStm ) )
     182             :     {
     183             :         sal_uLong n;
     184           0 :         if( rBase.FindId( getString(), &n ) )
     185             :         {
     186           0 :             nValue = n;
     187           0 :             return true;
     188             :         }
     189             :         else
     190             :         {
     191           0 :             OStringBuffer aStr("no value for identifier <");
     192           0 :             aStr.append(getString()).append("> ");
     193           0 :             rBase.SetError( aStr.makeStringAndClear(), rInStm.GetToken() );
     194           0 :             rBase.WriteError( rInStm );
     195             :         }
     196             :     }
     197      325527 :     return false;
     198             : }
     199             : 
     200       12945 : bool SvNumberIdentifier::ReadSvIdl( SvIdlDataBase & rBase,
     201             :                                     SvTokenStream & rInStm )
     202             : {
     203       12945 :     sal_uInt32 nTokPos = rInStm.Tell();
     204       12945 :     SvToken * pTok = rInStm.GetToken_Next();
     205             : 
     206       12945 :     if( pTok->IsIdentifier() )
     207             :     {
     208             :         sal_uLong n;
     209       12914 :         if( rBase.FindId( pTok->GetString(), &n ) )
     210             :         {
     211       12914 :             setString(pTok->GetString());
     212       12914 :             nValue = n;
     213       12914 :             return true;
     214             :         }
     215             :         else
     216             :         {
     217           0 :             OStringBuffer aStr("no value for identifier <");
     218           0 :             aStr.append(getString()).append("> ");
     219           0 :             rBase.SetError( aStr.makeStringAndClear(), rInStm.GetToken() );
     220           0 :             rBase.WriteError( rInStm );
     221             :         }
     222             :     }
     223          31 :     rInStm.Seek( nTokPos );
     224          31 :     return false;
     225             : }
     226             : 
     227      976820 : bool SvString::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm )
     228             : {
     229      976820 :     sal_uInt32 nTokPos = rInStm.Tell();
     230      976820 :     SvToken * pTok = rInStm.GetToken_Next();
     231             : 
     232      976820 :     if( pTok->Is( pName ) )
     233             :     {
     234         665 :         bool bOk = true;
     235         665 :         bool bBraket = rInStm.Read( '(' );
     236         665 :         if( bBraket || rInStm.Read( '=' ) )
     237             :         {
     238         665 :             pTok = rInStm.GetToken();
     239         665 :             if( pTok->IsString() )
     240             :             {
     241         665 :                 setString(pTok->GetString());
     242         665 :                 rInStm.GetToken_Next();
     243             :             }
     244         665 :             if( bOk && bBraket )
     245          23 :                 bOk = rInStm.Read( ')' );
     246             :         }
     247         665 :         if( bOk )
     248         665 :             return true;
     249             :     }
     250      976155 :     rInStm.Seek( nTokPos );
     251      976155 :     return false;
     252             : }
     253             : 
     254           0 : SvStream& WriteSvString(SvStream & rStm, const SvString & r )
     255             : {
     256           0 :     write_uInt16_lenPrefixed_uInt8s_FromOString(rStm, r.getString());
     257           0 :     return rStm;
     258             : }
     259             : 
     260           0 : SvStream& operator >> (SvStream & rStm, SvString & r )
     261             : {
     262           0 :     r.setString(read_uInt16_lenPrefixed_uInt8s_ToOString(rStm));
     263           0 :     return rStm;
     264             : }
     265             : 
     266             : 
     267      162866 : bool SvHelpText::ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm )
     268             : {
     269      162866 :     return SvString::ReadSvIdl( SvHash_HelpText(), rInStm );
     270             : }
     271             : 
     272         205 : bool SvUUId::ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm )
     273             : {
     274         205 :     sal_uInt32 nTokPos = rInStm.Tell();
     275         205 :     SvToken * pTok = rInStm.GetToken_Next();
     276             : 
     277         205 :     if( pTok->Is( SvHash_uuid() ) )
     278             :     {
     279          68 :         bool bOk = true;
     280          68 :         bool bBraket = rInStm.Read( '(' );
     281          68 :         if( bBraket || rInStm.Read( '=' ) )
     282             :         {
     283          68 :             pTok = rInStm.GetToken();
     284          68 :             if( pTok->IsString() )
     285             :             {
     286          68 :                 pTok = rInStm.GetToken_Next();
     287          68 :                 bOk = MakeId(OStringToOUString(pTok->GetString(), RTL_TEXTENCODING_ASCII_US));
     288             :             }
     289          68 :             if( bOk && bBraket )
     290          26 :                 bOk = rInStm.Read( ')' );
     291             :         }
     292          68 :         if( bOk )
     293          68 :             return true;
     294             :     }
     295         137 :     rInStm.Seek( nTokPos );
     296         137 :     return false;
     297             : }
     298             : 
     299         205 : bool SvVersion::ReadSvIdl( SvTokenStream & rInStm )
     300             : {
     301         205 :     sal_uLong n = 0;
     302             : 
     303         205 :     sal_uInt32 nTokPos = rInStm.Tell();
     304         205 :     if( ReadRangeSvIdl( SvHash_Version(), rInStm, 0 , 0xFFFF, &n ) )
     305             :     {
     306           0 :         nMajorVersion = (sal_uInt16)n;
     307           0 :         if( rInStm.Read( '.' ) )
     308             :         {
     309           0 :             SvToken * pTok = rInStm.GetToken_Next();
     310           0 :             if( pTok->IsInteger() && pTok->GetNumber() <= 0xFFFF )
     311             :             {
     312           0 :                 nMinorVersion = (sal_uInt16)pTok->GetNumber();
     313           0 :                 return true;
     314             :             }
     315             :         }
     316             :         else
     317           0 :             return true;
     318             :     }
     319         205 :     rInStm.Seek( nTokPos );
     320         205 :     return false;
     321             : }
     322             : 
     323             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10