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

Generated by: LCOV version 1.10