LCOV - code coverage report
Current view: top level - sc/source/core/tool - refdata.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 139 153 90.8 %
Date: 2015-06-13 12:38:46 Functions: 34 36 94.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             : #include "refdata.hxx"
      21             : 
      22        9988 : void ScSingleRefData::InitAddress( const ScAddress& rAdr )
      23             : {
      24        9988 :     InitAddress( rAdr.Col(), rAdr.Row(), rAdr.Tab());
      25        9988 : }
      26             : 
      27        9988 : void ScSingleRefData::InitAddress( SCCOL nColP, SCROW nRowP, SCTAB nTabP )
      28             : {
      29        9988 :     InitFlags();
      30        9988 :     mnCol = nColP;
      31        9988 :     mnRow = nRowP;
      32        9988 :     mnTab = nTabP;
      33        9988 : }
      34             : 
      35           2 : void ScSingleRefData::InitAddressRel( const ScAddress& rAdr, const ScAddress& rPos )
      36             : {
      37           2 :     InitFlags();
      38           2 :     SetColRel(true);
      39           2 :     SetRowRel(true);
      40           2 :     SetTabRel(true);
      41           2 :     SetAddress(rAdr, rPos);
      42           2 : }
      43             : 
      44        8352 : void ScSingleRefData::SetAbsCol( SCCOL nVal )
      45             : {
      46        8352 :     Flags.bColRel = false;
      47        8352 :     mnCol = nVal;
      48        8352 : }
      49             : 
      50        9117 : void ScSingleRefData::SetRelCol( SCCOL nVal )
      51             : {
      52        9117 :     Flags.bColRel = true;
      53        9117 :     mnCol = nVal;
      54        9117 : }
      55             : 
      56           6 : void ScSingleRefData::IncCol( SCCOL nInc )
      57             : {
      58           6 :     mnCol += nInc;
      59           6 : }
      60             : 
      61        8426 : void ScSingleRefData::SetAbsRow( SCROW nVal )
      62             : {
      63        8426 :     Flags.bRowRel = false;
      64        8426 :     mnRow = nVal;
      65        8426 : }
      66             : 
      67        9069 : void ScSingleRefData::SetRelRow( SCROW nVal )
      68             : {
      69        9069 :     Flags.bRowRel = true;
      70        9069 :     mnRow = nVal;
      71        9069 : }
      72             : 
      73          13 : void ScSingleRefData::IncRow( SCROW nInc )
      74             : {
      75          13 :     mnRow += nInc;
      76          13 : }
      77             : 
      78       10035 : void ScSingleRefData::SetAbsTab( SCTAB nVal )
      79             : {
      80       10035 :     Flags.bTabRel = false;
      81       10035 :     mnTab = nVal;
      82       10035 : }
      83             : 
      84        7561 : void ScSingleRefData::SetRelTab( SCTAB nVal )
      85             : {
      86        7561 :     Flags.bTabRel = true;
      87        7561 :     mnTab = nVal;
      88        7561 : }
      89             : 
      90          10 : void ScSingleRefData::IncTab( SCTAB nInc )
      91             : {
      92          10 :     mnTab += nInc;
      93          10 : }
      94             : 
      95         571 : void ScSingleRefData::SetColDeleted( bool bVal )
      96             : {
      97         571 :     Flags.bColDeleted = bVal;
      98         571 : }
      99             : 
     100         570 : void ScSingleRefData::SetRowDeleted( bool bVal )
     101             : {
     102         570 :     Flags.bRowDeleted = bVal;
     103         570 : }
     104             : 
     105         659 : void ScSingleRefData::SetTabDeleted( bool bVal )
     106             : {
     107         659 :     Flags.bTabDeleted = bVal;
     108         659 : }
     109             : 
     110        1542 : bool ScSingleRefData::IsDeleted() const
     111             : {
     112        1542 :     return IsColDeleted() || IsRowDeleted() || IsTabDeleted();
     113             : }
     114             : 
     115       12894 : bool ScSingleRefData::Valid() const
     116             : {
     117       12894 :     return ColValid() && RowValid() && TabValid();
     118             : }
     119             : 
     120       12894 : bool ScSingleRefData::ColValid() const
     121             : {
     122       12894 :     if (Flags.bColRel)
     123             :     {
     124        2535 :         if (mnCol < -MAXCOL || MAXCOL < mnCol)
     125           0 :             return false;
     126             :     }
     127             :     else
     128             :     {
     129       10359 :         if (mnCol < 0 || MAXCOL < mnCol)
     130           0 :             return false;
     131             :     }
     132             : 
     133       12894 :     return true;
     134             : }
     135             : 
     136       12894 : bool ScSingleRefData::RowValid() const
     137             : {
     138       12894 :     if (Flags.bRowRel)
     139             :     {
     140        2538 :         if (mnRow < -MAXROW || MAXROW < mnRow)
     141           0 :             return false;
     142             :     }
     143             :     else
     144             :     {
     145       10356 :         if (mnRow < 0 || MAXROW < mnRow)
     146           0 :             return false;
     147             :     }
     148             : 
     149       12894 :     return true;
     150             : }
     151             : 
     152       12894 : bool ScSingleRefData::TabValid() const
     153             : {
     154       12894 :     if (Flags.bTabRel)
     155             :     {
     156        3352 :         if (mnTab < -MAXTAB || MAXTAB < mnTab)
     157           0 :             return false;
     158             :     }
     159             :     else
     160             :     {
     161        9542 :         if (mnTab < 0 || MAXTAB < mnTab)
     162           0 :             return false;
     163             :     }
     164             : 
     165       12894 :     return true;
     166             : }
     167             : 
     168           0 : bool ScSingleRefData::ValidExternal() const
     169             : {
     170           0 :     return ColValid() && RowValid() && mnTab == -1;
     171             : }
     172             : 
     173      144102 : ScAddress ScSingleRefData::toAbs( const ScAddress& rPos ) const
     174             : {
     175      144102 :     SCCOL nRetCol = Flags.bColRel ? mnCol + rPos.Col() : mnCol;
     176      144102 :     SCROW nRetRow = Flags.bRowRel ? mnRow + rPos.Row() : mnRow;
     177      144102 :     SCTAB nRetTab = Flags.bTabRel ? mnTab + rPos.Tab() : mnTab;
     178             : 
     179      144102 :     ScAddress aAbs(ScAddress::INITIALIZE_INVALID);
     180             : 
     181      144102 :     if (ValidCol(nRetCol))
     182      144084 :         aAbs.SetCol(nRetCol);
     183             : 
     184      144102 :     if (ValidRow(nRetRow))
     185      144092 :         aAbs.SetRow(nRetRow);
     186             : 
     187      144102 :     if (ValidTab(nRetTab))
     188      143417 :         aAbs.SetTab(nRetTab);
     189             : 
     190      144102 :     return aAbs;
     191             : }
     192             : 
     193       35464 : void ScSingleRefData::SetAddress( const ScAddress& rAddr, const ScAddress& rPos )
     194             : {
     195       35464 :     if (Flags.bColRel)
     196       15696 :         mnCol = rAddr.Col() - rPos.Col();
     197             :     else
     198       19768 :         mnCol = rAddr.Col();
     199             : 
     200       35464 :     if (Flags.bRowRel)
     201       15580 :         mnRow = rAddr.Row() - rPos.Row();
     202             :     else
     203       19884 :         mnRow = rAddr.Row();
     204             : 
     205       35464 :     if (Flags.bTabRel)
     206       14737 :         mnTab = rAddr.Tab() - rPos.Tab();
     207             :     else
     208       20727 :         mnTab = rAddr.Tab();
     209       35464 : }
     210             : 
     211       32495 : SCROW ScSingleRefData::Row() const
     212             : {
     213       32495 :     if (Flags.bRowDeleted)
     214           6 :         return -1;
     215       32489 :     return mnRow;
     216             : }
     217             : 
     218       32595 : SCCOL ScSingleRefData::Col() const
     219             : {
     220       32595 :     if (Flags.bColDeleted)
     221           9 :         return -1;
     222       32586 :     return mnCol;
     223             : }
     224             : 
     225       32034 : SCTAB ScSingleRefData::Tab() const
     226             : {
     227       32034 :     if (Flags.bTabDeleted)
     228           0 :         return -1;
     229       32034 :     return mnTab;
     230             : }
     231             : 
     232       11208 : bool ScSingleRefData::operator==( const ScSingleRefData& r ) const
     233             : {
     234       11208 :     return mnFlagValue == r.mnFlagValue && mnCol == r.mnCol && mnRow == r.mnRow && mnTab == r.mnTab;
     235             : }
     236             : 
     237       11173 : bool ScSingleRefData::operator!=( const ScSingleRefData& r ) const
     238             : {
     239       11173 :     return !operator==(r);
     240             : }
     241             : 
     242             : #if DEBUG_FORMULA_COMPILER
     243             : void ScSingleRefData::Dump( int nIndent ) const
     244             : {
     245             :     std::string aIndent;
     246             :     for (int i = 0; i < nIndent; ++i)
     247             :         aIndent += "  ";
     248             : 
     249             :     cout << aIndent << "address type column: " << (IsColRel()?"relative":"absolute")
     250             :          << "  row : " << (IsRowRel()?"relative":"absolute") << "  sheet: "
     251             :          << (IsTabRel()?"relative":"absolute") << endl;
     252             :     cout << aIndent << "deleted column: " << (IsColDeleted()?"yes":"no")
     253             :          << "  row : " << (IsRowDeleted()?"yes":"no") << "  sheet: "
     254             :          << (IsTabDeleted()?"yes":"no") << endl;
     255             :     cout << aIndent << "column: " << mnCol << "  row: " << mnRow << "  sheet: " << mnTab << endl;
     256             :     cout << aIndent << "3d ref: " << (IsFlag3D()?"yes":"no") << endl;
     257             : }
     258             : #endif
     259             : 
     260           3 : ScComplexRefData& ScComplexRefData::Extend( const ScSingleRefData & rRef, const ScAddress & rPos )
     261             : {
     262           3 :     ScRange aAbsRange = toAbs(rPos);
     263           3 :     ScAddress aAbs = rRef.toAbs(rPos);
     264             : 
     265           3 :     if (aAbs.Col() < aAbsRange.aStart.Col())
     266           1 :         aAbsRange.aStart.SetCol(aAbs.Col());
     267             : 
     268           3 :     if (aAbs.Row() < aAbsRange.aStart.Row())
     269           0 :         aAbsRange.aStart.SetRow(aAbs.Row());
     270             : 
     271           3 :     if (aAbs.Tab() < aAbsRange.aStart.Tab())
     272           0 :         aAbsRange.aStart.SetTab(aAbs.Tab());
     273             : 
     274           3 :     if (aAbsRange.aEnd.Col() < aAbs.Col())
     275           2 :         aAbsRange.aEnd.SetCol(aAbs.Col());
     276             : 
     277           3 :     if (aAbsRange.aEnd.Row() < aAbs.Row())
     278           2 :         aAbsRange.aEnd.SetRow(aAbs.Row());
     279             : 
     280           3 :     if (aAbsRange.aEnd.Tab() < aAbs.Tab())
     281           0 :         aAbsRange.aEnd.SetTab(aAbs.Tab());
     282             : 
     283           3 :     SetRange(aAbsRange, rPos);
     284             : 
     285           3 :     return *this;
     286             : }
     287             : 
     288           1 : ScComplexRefData& ScComplexRefData::Extend( const ScComplexRefData & rRef, const ScAddress & rPos )
     289             : {
     290           1 :     return Extend( rRef.Ref1, rPos).Extend( rRef.Ref2, rPos);
     291             : }
     292             : 
     293        4230 : bool ScComplexRefData::Valid() const
     294             : {
     295        4230 :     return Ref1.Valid() && Ref2.Valid();
     296             : }
     297             : 
     298           0 : bool ScComplexRefData::ValidExternal() const
     299             : {
     300           0 :     return Ref1.ValidExternal() && Ref2.ColValid() && Ref2.RowValid() && Ref1.Tab() <= Ref2.Tab();
     301             : }
     302             : 
     303       26683 : ScRange ScComplexRefData::toAbs( const ScAddress& rPos ) const
     304             : {
     305       26683 :     return ScRange(Ref1.toAbs(rPos), Ref2.toAbs(rPos));
     306             : }
     307             : 
     308       11906 : void ScComplexRefData::SetRange( const ScRange& rRange, const ScAddress& rPos )
     309             : {
     310       11906 :     Ref1.SetAddress(rRange.aStart, rPos);
     311       11906 :     Ref2.SetAddress(rRange.aEnd, rPos);
     312       12062 : }
     313             : 
     314             : #if DEBUG_FORMULA_COMPILER
     315             : void ScComplexRefData::Dump( int nIndent ) const
     316             : {
     317             :     std::string aIndent;
     318             :     for (int i = 0; i < nIndent; ++i)
     319             :         aIndent += "  ";
     320             : 
     321             :     cout << aIndent << "ref 1" << endl;
     322             :     Ref1.Dump(nIndent+1);
     323             :     cout << aIndent << "ref 2" << endl;
     324             :     Ref2.Dump(nIndent+1);
     325             : }
     326             : #endif
     327             : 
     328             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11