[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - 4 commits - sc/inc sc/qa sc/source

Kohei Yoshida kohei.yoshida at gmail.com
Fri Jul 26 17:52:00 PDT 2013


 sc/inc/refdata.hxx                     |    4 +-
 sc/qa/unit/helper/qahelper.cxx         |   43 +++++++++++++++++++++++++
 sc/qa/unit/helper/qahelper.hxx         |   11 ++++++
 sc/qa/unit/subsequent_export-test.cxx  |   42 ++++++++++++++++++++++++
 sc/qa/unit/ucalc_formula.cxx           |   42 ------------------------
 sc/source/core/data/formulaiter.cxx    |    4 +-
 sc/source/core/tool/compiler.cxx       |    2 -
 sc/source/core/tool/interpr1.cxx       |    5 +-
 sc/source/core/tool/interpr4.cxx       |   26 ++-------------
 sc/source/core/tool/refdata.cxx        |   56 ++++++++++++++-------------------
 sc/source/core/tool/reftokenhelper.cxx |   16 +--------
 sc/source/core/tool/token.cxx          |    4 +-
 sc/source/filter/excel/excform8.cxx    |    9 +----
 sc/source/filter/inc/namebuff.hxx      |   25 ++------------
 sc/source/filter/lotus/lotform.cxx     |    5 +-
 sc/source/ui/unoobj/funcuno.cxx        |    8 ----
 16 files changed, 146 insertions(+), 156 deletions(-)

New commits:
commit 5a027080eadd3bf141a62649b53c910bfa7f05e1
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Jul 26 20:53:54 2013 -0400

    More on the ref object.
    
    Change-Id: Id75bf12a04a1756aed4178df397c5a28787307a8

diff --git a/sc/source/core/data/formulaiter.cxx b/sc/source/core/data/formulaiter.cxx
index f14817d..d055ecb 100644
--- a/sc/source/core/data/formulaiter.cxx
+++ b/sc/source/core/data/formulaiter.cxx
@@ -55,8 +55,8 @@ bool ScDetectiveRefIter::GetNextRef( ScRange& rRange )
     if( p )
     {
         SingleDoubleRefProvider aProv( *p );
-        rRange.aStart.Set( aProv.Ref1.nCol, aProv.Ref1.nRow, aProv.Ref1.nTab );
-        rRange.aEnd.Set( aProv.Ref2.nCol, aProv.Ref2.nRow, aProv.Ref2.nTab );
+        rRange.aStart = aProv.Ref1.toAbs(aPos);
+        rRange.aEnd = aProv.Ref2.toAbs(aPos);
         bRet = true;
     }
 
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index a18a42d..f9c3a4c 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -3989,8 +3989,9 @@ void ScInterpreter::ScColumns()
                 String aTabName;
                 ScComplexRefData aRef;
                 PopExternalDoubleRef( nFileId, aTabName, aRef);
-                nVal += static_cast<sal_uLong>(aRef.Ref2.nTab - aRef.Ref1.nTab + 1) *
-                    static_cast<sal_uLong>(aRef.Ref2.nCol - aRef.Ref1.nCol + 1);
+                ScRange aAbs = aRef.toAbs(aPos);
+                nVal += static_cast<sal_uLong>(aAbs.aEnd.Tab() - aAbs.aStart.Tab() + 1) *
+                    static_cast<sal_uLong>(aAbs.aEnd.Col() - aAbs.aStart.Col() + 1);
             }
             break;
             default:
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index c3a47a4..12f49b6 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -1872,10 +1872,7 @@ void ScInterpreter::PushSingleRef(SCCOL nCol, SCROW nRow, SCTAB nTab)
     if (!IfErrorPushError())
     {
         ScSingleRefData aRef;
-        aRef.InitFlags();
-        aRef.nCol = nCol;
-        aRef.nRow = nRow;
-        aRef.nTab = nTab;
+        aRef.InitAddress(ScAddress(nCol,nRow,nTab));
         PushTempTokenWithoutError( new ScSingleRefToken( aRef ) );
     }
 }
@@ -1887,13 +1884,7 @@ void ScInterpreter::PushDoubleRef(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
     if (!IfErrorPushError())
     {
         ScComplexRefData aRef;
-        aRef.InitFlags();
-        aRef.Ref1.nCol = nCol1;
-        aRef.Ref1.nRow = nRow1;
-        aRef.Ref1.nTab = nTab1;
-        aRef.Ref2.nCol = nCol2;
-        aRef.Ref2.nRow = nRow2;
-        aRef.Ref2.nTab = nTab2;
+        aRef.InitRange(ScRange(nCol1,nRow1,nTab1,nCol2,nRow2,nTab2));
         PushTempTokenWithoutError( new ScDoubleRefToken( aRef ) );
     }
 }
@@ -1905,10 +1896,7 @@ void ScInterpreter::PushExternalSingleRef(
     if (!IfErrorPushError())
     {
         ScSingleRefData aRef;
-        aRef.InitFlags();
-        aRef.nCol = nCol;
-        aRef.nRow = nRow;
-        aRef.nTab = nTab;
+        aRef.InitAddress(ScAddress(nCol,nRow,nTab));
         PushTempTokenWithoutError( new ScExternalSingleRefToken(nFileId, rTabName, aRef)) ;
     }
 }
@@ -1921,13 +1909,7 @@ void ScInterpreter::PushExternalDoubleRef(
     if (!IfErrorPushError())
     {
         ScComplexRefData aRef;
-        aRef.InitFlags();
-        aRef.Ref1.nCol = nCol1;
-        aRef.Ref1.nRow = nRow1;
-        aRef.Ref1.nTab = nTab1;
-        aRef.Ref2.nCol = nCol2;
-        aRef.Ref2.nRow = nRow2;
-        aRef.Ref2.nTab = nTab2;
+        aRef.InitRange(ScRange(nCol1,nRow1,nTab1,nCol2,nRow2,nTab2));
         PushTempTokenWithoutError( new ScExternalDoubleRefToken(nFileId, rTabName, aRef) );
     }
 }
diff --git a/sc/source/core/tool/reftokenhelper.cxx b/sc/source/core/tool/reftokenhelper.cxx
index 0dcda68..6b8d288 100644
--- a/sc/source/core/tool/reftokenhelper.cxx
+++ b/sc/source/core/tool/reftokenhelper.cxx
@@ -171,24 +171,12 @@ void ScRefTokenHelper::getRangeListFromTokens(
 void ScRefTokenHelper::getTokenFromRange(ScTokenRef& pToken, const ScRange& rRange)
 {
     ScComplexRefData aData;
-    aData.InitFlags();
-    aData.Ref1.nCol = rRange.aStart.Col();
-    aData.Ref1.nRow = rRange.aStart.Row();
-    aData.Ref1.nTab = rRange.aStart.Tab();
-    aData.Ref1.SetColRel(false);
-    aData.Ref1.SetRowRel(false);
-    aData.Ref1.SetTabRel(false);
+    aData.InitRange(rRange);
     aData.Ref1.SetFlag3D(true);
 
-    aData.Ref2.nCol = rRange.aEnd.Col();
-    aData.Ref2.nRow = rRange.aEnd.Row();
-    aData.Ref2.nTab = rRange.aEnd.Tab();
-    aData.Ref2.SetColRel(false);
-    aData.Ref2.SetRowRel(false);
-    aData.Ref2.SetTabRel(false);
     // Display sheet name on 2nd reference only when the 1st and 2nd refs are on
     // different sheets.
-    aData.Ref2.SetFlag3D(aData.Ref1.nTab != aData.Ref2.nTab);
+    aData.Ref2.SetFlag3D(rRange.aStart.Tab() != rRange.aEnd.Tab());
 
     pToken.reset(new ScDoubleRefToken(aData));
 }
diff --git a/sc/source/filter/excel/excform8.cxx b/sc/source/filter/excel/excform8.cxx
index 7241901..7a180e4 100644
--- a/sc/source/filter/excel/excform8.cxx
+++ b/sc/source/filter/excel/excform8.cxx
@@ -498,8 +498,6 @@ ConvErr ExcelToSc8::Convert( const ScTokenArray*& rpTokArray, XclImpStream& aIn,
 
                 aIn >> nRow >> nCol;
 
-                aSRD.nCol = static_cast<SCCOL>(nCol);
-                aSRD.nRow = nRow & 0x3FFF;
                 aSRD.SetRelTab(0);
                 aSRD.SetFlag3D( bRangeName && !bCondFormat );
 
@@ -1050,8 +1048,6 @@ ConvErr ExcelToSc8::Convert( _ScRangeListTabs& rRangeList, XclImpStream& aIn, sa
 
                 aIn >> nRow >> nCol;
 
-                aSRD.nCol = static_cast<SCCOL>(nCol);
-                aSRD.nRow = nRow & 0x3FFF;
                 aSRD.SetRelTab(0);
                 aSRD.SetFlag3D( bRangeName && !bCondFormat );
 
@@ -1191,9 +1187,8 @@ ConvErr ExcelToSc8::Convert( _ScRangeListTabs& rRangeList, XclImpStream& aIn, sa
                     if( nFirstScTab != nLastScTab )
                     {
                         aCRD.Ref1 = aSRD;
-                        aCRD.Ref2.nCol = aSRD.nCol;
-                        aCRD.Ref2.nRow = aSRD.nRow;
-                        aCRD.Ref2.nTab = nLastScTab;
+                        aCRD.Ref2 = aSRD;
+                        aCRD.Ref2.SetAbsTab(nLastScTab);
                         rRangeList.Append( aCRD, nTab );
                     }
                     else
diff --git a/sc/source/filter/inc/namebuff.hxx b/sc/source/filter/inc/namebuff.hxx
index a8b3089..38ead51 100644
--- a/sc/source/filter/inc/namebuff.hxx
+++ b/sc/source/filter/inc/namebuff.hxx
@@ -214,31 +214,14 @@ inline void RangeNameBufferWK3::Add( const String& rName, const ScRange& aScRang
 {
     ScComplexRefData        aCRD;
     ScSingleRefData*        pSRD;
-    const ScAddress*    pScAddr;
 
     pSRD = &aCRD.Ref1;
-    pScAddr = &aScRange.aStart;
-    pSRD->SetFlag3D( sal_True );
-    pSRD->nCol = pScAddr->Col();
-    pSRD->nRow = pScAddr->Row();
-    pSRD->nTab = pScAddr->Tab();
-
-    // zunaechst ALLE Refs nur absolut
-    pSRD->SetColRel( false );
-    pSRD->SetRowRel( false );
-    pSRD->SetTabRel( false );
+    pSRD->InitAddress(aScRange.aStart);
+    pSRD->SetFlag3D(true);
 
     pSRD = &aCRD.Ref2;
-    pScAddr = &aScRange.aEnd;
-    pSRD->SetFlag3D( sal_True );
-    pSRD->nCol = pScAddr->Col();
-    pSRD->nRow = pScAddr->Row();
-    pSRD->nTab = pScAddr->Tab();
-
-    // zunaechst ALLE Refs nur absolut
-    pSRD->SetColRel( false );
-    pSRD->SetRowRel( false );
-    pSRD->SetTabRel( false );
+    pSRD->InitAddress(aScRange.aEnd);
+    pSRD->SetFlag3D(true);
 
     Add( rName, aCRD );
 }
diff --git a/sc/source/filter/lotus/lotform.cxx b/sc/source/filter/lotus/lotform.cxx
index ed4d076..aaca8d2 100644
--- a/sc/source/filter/lotus/lotform.cxx
+++ b/sc/source/filter/lotus/lotform.cxx
@@ -464,7 +464,7 @@ ConvErr LotusToSc::Convert( const ScTokenArray*& rpErg, sal_Int32& rRest,
                     nNewId = aPool.Store( rR );
                 else
                 {
-                    nId = rRangeList.GetIndex( rR.nCol, rR.nRow );
+                    nId = rRangeList.GetIndex(rR.Col(), rR.Row());
 
                     if( nId == ID_FAIL )
                         // kein Range dazu
@@ -491,8 +491,7 @@ ConvErr LotusToSc::Convert( const ScTokenArray*& rpErg, sal_Int32& rRest,
                     nNewId = aPool.Store( aCRD );
                 else
                 {
-                    nId = rRangeList.GetIndex(
-                        rR.nCol, rR.nRow, aCRD.Ref2.nCol, aCRD.Ref2.nRow );
+                    nId = rRangeList.GetIndex(rR.Col(), rR.Row(), aCRD.Ref2.Col(), aCRD.Ref2.Row());
 
                     if( nId == ID_FAIL )
                         // kein Range dazu
diff --git a/sc/source/ui/unoobj/funcuno.cxx b/sc/source/ui/unoobj/funcuno.cxx
index 1090ea1..de55b28 100644
--- a/sc/source/ui/unoobj/funcuno.cxx
+++ b/sc/source/ui/unoobj/funcuno.cxx
@@ -355,13 +355,7 @@ static sal_Bool lcl_AddFunctionToken( ScTokenArray& rArray, const OUString& rNam
 static void lcl_AddRef( ScTokenArray& rArray, long nStartRow, long nColCount, long nRowCount )
 {
     ScComplexRefData aRef;
-    aRef.InitFlags();
-    aRef.Ref1.nTab = 0;
-    aRef.Ref2.nTab = 0;
-    aRef.Ref1.nCol = 0;
-    aRef.Ref1.nRow = (SCROW) nStartRow;
-    aRef.Ref2.nCol = (SCCOL) (nColCount - 1);
-    aRef.Ref2.nRow = (SCROW) (nStartRow + nRowCount - 1);
+    aRef.InitRange(ScRange(0,nStartRow,0,nColCount-1,nStartRow+nRowCount-1,0));
     rArray.AddDoubleReference(aRef);
 }
 
commit 38f0ef2e038f934acee71b2182d2f49b43bd12da
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Jul 26 20:07:31 2013 -0400

    Add test for exporting and importing of formula refs from xls format.
    
    Change-Id: I98f17889c8ad19114c055e87f9ab5dc4e864c817

diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx
index e145f58..6ba96ce 100644
--- a/sc/qa/unit/helper/qahelper.cxx
+++ b/sc/qa/unit/helper/qahelper.cxx
@@ -10,6 +10,7 @@
 #include "qahelper.hxx"
 #include "csv_handler.hxx"
 #include "drwlayer.hxx"
+#include "compiler.hxx"
 #include "svx/svdpage.hxx"
 #include "svx/svdoole2.hxx"
 
@@ -235,6 +236,48 @@ ScRangeList getChartRanges(ScDocument& rDoc, const SdrOle2Obj& rChartObj)
     return aRanges;
 }
 
+namespace {
+
+ScTokenArray* getTokens(ScDocument& rDoc, const ScAddress& rPos)
+{
+    ScFormulaCell* pCell = rDoc.GetFormulaCell(rPos);
+    if (!pCell)
+        return NULL;
+
+    return pCell->GetCode();
+}
+
+}
+
+bool checkFormula(ScDocument& rDoc, const ScAddress& rPos, const char* pExpected)
+{
+    ScTokenArray* pCode = getTokens(rDoc, rPos);
+    if (!pCode)
+    {
+        cerr << "Empty token array." << endl;
+        return false;
+    }
+
+    OUString aFormula = toString(rDoc, rPos, *pCode);
+    if (aFormula != OUString::createFromAscii(pExpected))
+    {
+        cerr << "Formula '" << pExpected << "' expected, but '" << aFormula << "' found" << endl;
+        return false;
+    }
+
+    return true;
+}
+
+OUString toString(
+    ScDocument& rDoc, const ScAddress& rPos, ScTokenArray& rArray, formula::FormulaGrammar::Grammar eGram)
+{
+    ScCompiler aComp(&rDoc, rPos, rArray);
+    aComp.SetGrammar(eGram);
+    OUStringBuffer aBuf;
+    aComp.CreateStringFromTokenArray(aBuf);
+    return aBuf.makeStringAndClear();
+}
+
 ScDocShellRef ScBootstrapFixture::load( bool bReadWrite,
     const OUString& rURL, const OUString& rFilter, const OUString &rUserData,
     const OUString& rTypeName, unsigned int nFilterFlags, unsigned int nClipboardID,
diff --git a/sc/qa/unit/helper/qahelper.hxx b/sc/qa/unit/helper/qahelper.hxx
index 6e332fe..a4966a1 100644
--- a/sc/qa/unit/helper/qahelper.hxx
+++ b/sc/qa/unit/helper/qahelper.hxx
@@ -24,6 +24,7 @@
 #include <sfx2/docfilt.hxx>
 #include "sfx2/docfile.hxx"
 #include "svl/stritem.hxx"
+#include "formula/grammar.hxx"
 
 #include <string>
 #include <sstream>
@@ -52,6 +53,7 @@ SC_DLLPUBLIC bool testEqualsWithTolerance( long nVal1, long nVal2, long nTol );
 
 class SdrOle2Obj;
 class ScRangeList;
+class ScTokenArray;
 
 // data format for row height tests
 struct TestParam
@@ -95,6 +97,15 @@ SC_DLLPUBLIC std::vector<OUString> getChartRangeRepresentations(const SdrOle2Obj
 
 SC_DLLPUBLIC ScRangeList getChartRanges(ScDocument& rDoc, const SdrOle2Obj& rChartObj);
 
+SC_DLLPUBLIC bool checkFormula(ScDocument& rDoc, const ScAddress& rPos, const char* pExpected);
+
+/**
+ * Convert formula token array to a formula string.
+ */
+SC_DLLPUBLIC OUString toString(
+    ScDocument& rDoc, const ScAddress& rPos, ScTokenArray& rArray,
+    formula::FormulaGrammar::Grammar eGram = formula::FormulaGrammar::GRAM_NATIVE);
+
 inline std::string print(const ScAddress& rAddr)
 {
     std::ostringstream str;
diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx
index 1a8eca8..19ecd3d 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -27,6 +27,7 @@
 #include "document.hxx"
 #include "cellform.hxx"
 #include "formulacell.hxx"
+#include "tokenarray.hxx"
 
 #include "svx/svdoole2.hxx"
 
@@ -56,6 +57,7 @@ public:
 
     void testInlineArrayXLS();
     void testEmbeddedChartXLS();
+    void testFormulaReferenceXLS();
 
     CPPUNIT_TEST_SUITE(ScExportTest);
     CPPUNIT_TEST(test);
@@ -70,6 +72,7 @@ public:
     CPPUNIT_TEST(testNamedRangeBugfdo62729);
     CPPUNIT_TEST(testInlineArrayXLS);
     CPPUNIT_TEST(testEmbeddedChartXLS);
+    CPPUNIT_TEST(testFormulaReferenceXLS);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -405,6 +408,45 @@ void ScExportTest::testEmbeddedChartXLS()
     xDocSh->DoClose();
 }
 
+void ScExportTest::testFormulaReferenceXLS()
+{
+    ScDocShellRef xShell = loadDoc("formula-reference.", XLS);
+    CPPUNIT_ASSERT(xShell.Is());
+
+    ScDocShellRef xDocSh = saveAndReload(xShell, XLS);
+    xShell->DoClose();
+    CPPUNIT_ASSERT(xDocSh.Is());
+
+    ScDocument* pDoc = xDocSh->GetDocument();
+    CPPUNIT_ASSERT(pDoc);
+
+    if (!checkFormula(*pDoc, ScAddress(3,1,0), "$A$2+$B$2+$C$2"))
+        CPPUNIT_FAIL("Wrong formula in D2");
+
+    if (!checkFormula(*pDoc, ScAddress(3,2,0), "A3+B3+C3"))
+        CPPUNIT_FAIL("Wrong formula in D3");
+
+    if (!checkFormula(*pDoc, ScAddress(3,5,0), "SUM($A$6:$C$6)"))
+        CPPUNIT_FAIL("Wrong formula in D6");
+
+    if (!checkFormula(*pDoc, ScAddress(3,6,0), "SUM(A7:C7)"))
+        CPPUNIT_FAIL("Wrong formula in D7");
+
+    if (!checkFormula(*pDoc, ScAddress(3,9,0), "$Two.$A$2+$Two.$B$2+$Two.$C$2"))
+        CPPUNIT_FAIL("Wrong formula in D10");
+
+    if (!checkFormula(*pDoc, ScAddress(3,10,0), "$Two.A3+$Two.B3+$Two.C3"))
+        CPPUNIT_FAIL("Wrong formula in D11");
+
+    if (!checkFormula(*pDoc, ScAddress(3,13,0), "MIN($Two.$A$2:$C$2)"))
+        CPPUNIT_FAIL("Wrong formula in D14");
+
+    if (!checkFormula(*pDoc, ScAddress(3,14,0), "MAX($Two.A3:C3)"))
+        CPPUNIT_FAIL("Wrong formula in D15");
+
+    xDocSh->DoClose();
+}
+
 ScExportTest::ScExportTest()
       : ScBootstrapFixture("/sc/qa/unit/data")
 {
diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index a8a54d3..def3902 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -155,48 +155,6 @@ void Test::testFormulaRefData()
     CPPUNIT_ASSERT_MESSAGE("Wrong end position of extended range.", aTest.aEnd == ScAddress(8,6,0));
 }
 
-namespace {
-
-OUString toString(
-    ScDocument& rDoc, const ScAddress& rPos, ScTokenArray& rArray, FormulaGrammar::Grammar eGram = FormulaGrammar::GRAM_NATIVE)
-{
-    ScCompiler aComp(&rDoc, rPos, rArray);
-    aComp.SetGrammar(eGram);
-    OUStringBuffer aBuf;
-    aComp.CreateStringFromTokenArray(aBuf);
-    return aBuf.makeStringAndClear();
-}
-
-ScTokenArray* getTokens(ScDocument& rDoc, const ScAddress& rPos)
-{
-    ScFormulaCell* pCell = rDoc.GetFormulaCell(rPos);
-    if (!pCell)
-        return NULL;
-
-    return pCell->GetCode();
-}
-
-bool checkFormula(ScDocument& rDoc, const ScAddress& rPos, const char* pExpected)
-{
-    ScTokenArray* pCode = getTokens(rDoc, rPos);
-    if (!pCode)
-    {
-        cerr << "Empty token array." << endl;
-        return false;
-    }
-
-    OUString aFormula = toString(rDoc, rPos, *pCode);
-    if (aFormula != OUString::createFromAscii(pExpected))
-    {
-        cerr << "Formula '" << pExpected << "' expected, but '" << aFormula << "' found" << endl;
-        return false;
-    }
-
-    return true;
-}
-
-}
-
 void Test::testFormulaCompiler()
 {
     struct {
commit 8f9c1cd2e97d5680080cf27c0939d11799423958
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Jul 26 19:59:55 2013 -0400

    Use correct sheet index values, to fix sheet name display issue.
    
    Change-Id: I8bafdbe5c30060802016b17a5a2077dfac2317cf

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 198f653..5e020d5 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -833,7 +833,7 @@ struct ConventionOOO_A1 : public Convention_A1
             if (!bSingleRef)
             {
                 rBuffer.append(sal_Unicode(':'));
-                MakeOneRefStrImpl(rBuffer, rComp, aRef.Ref2, aAbs2, (aRef.Ref2.nTab != aRef.Ref1.nTab), bODF);
+                MakeOneRefStrImpl(rBuffer, rComp, aRef.Ref2, aAbs2, aAbs1.Tab() != aAbs2.Tab(), bODF);
             }
         }
         if (bODF)
commit acf4c57040cc3d63d651af8d5a9eaa395b12622e
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Fri Jul 26 19:58:19 2013 -0400

    Organize the reference dumping code a bit.
    
    Change-Id: I97bfdc85ba1391cfe4f11148adb91d5e6960225a

diff --git a/sc/inc/refdata.hxx b/sc/inc/refdata.hxx
index 337b66c..653d1a0 100644
--- a/sc/inc/refdata.hxx
+++ b/sc/inc/refdata.hxx
@@ -102,7 +102,7 @@ struct SC_DLLPUBLIC ScSingleRefData
             bool operator!=( const ScSingleRefData& ) const;
 
 #if DEBUG_FORMULA_COMPILER
-    void Dump() const;
+    void Dump( int nIndent = 0 ) const;
 #endif
 };
 
@@ -152,7 +152,7 @@ struct ScComplexRefData
     ScComplexRefData& Extend( const ScComplexRefData & rRef, const ScAddress & rPos );
 
 #if DEBUG_FORMULA_COMPILER
-    void Dump() const;
+    void Dump( int nIndent = 0 ) const;
 #endif
 };
 
diff --git a/sc/source/core/tool/refdata.cxx b/sc/source/core/tool/refdata.cxx
index 45676a5..5969c88 100644
--- a/sc/source/core/tool/refdata.cxx
+++ b/sc/source/core/tool/refdata.cxx
@@ -222,16 +222,21 @@ bool ScSingleRefData::operator!=( const ScSingleRefData& r ) const
 }
 
 #if DEBUG_FORMULA_COMPILER
-void ScSingleRefData::Dump() const
-{
-    cout << "  address type column: " << (IsColRel()?"relative":"absolute")
-        << "  row : " << (IsRowRel()?"relative":"absolute") << "  sheet: "
-        << (IsTabRel()?"relative":"absolute") << endl;
-    cout << "  deleted column: " << (IsColDeleted()?"yes":"no")
-        << "  row : " << (IsRowDeleted()?"yes":"no") << "  sheet: "
-        << (IsTabDeleted()?"yes":"no") << endl;
-    cout << "  absolute pos column: " << nCol << "  row: " << nRow << "  sheet: " << nTab << endl;
-    cout << "  relative pos column: " << nRelCol << "  row: " << nRelRow << "  sheet: " << nRelTab << endl;
+void ScSingleRefData::Dump( int nIndent ) const
+{
+    std::string aIndent;
+    for (int i = 0; i < nIndent; ++i)
+        aIndent += "  ";
+
+    cout << aIndent << "address type column: " << (IsColRel()?"relative":"absolute")
+         << "  row : " << (IsRowRel()?"relative":"absolute") << "  sheet: "
+         << (IsTabRel()?"relative":"absolute") << endl;
+    cout << aIndent << "deleted column: " << (IsColDeleted()?"yes":"no")
+         << "  row : " << (IsRowDeleted()?"yes":"no") << "  sheet: "
+         << (IsTabDeleted()?"yes":"no") << endl;
+    cout << aIndent << "absolute pos column: " << nCol << "  row: " << nRow << "  sheet: " << nTab << endl;
+    cout << aIndent << "relative pos column: " << nRelCol << "  row: " << nRelRow << "  sheet: " << nRelTab << endl;
+    cout << aIndent << "3d ref: " << (IsFlag3D()?"yes":"no") << endl;
 }
 #endif
 
@@ -396,27 +401,16 @@ void ScComplexRefData::SetRange( const ScRange& rRange, const ScAddress& rPos )
 }
 
 #if DEBUG_FORMULA_COMPILER
-void ScComplexRefData::Dump() const
-{
-    cout << "  ref 1" << endl;
-    cout << "    address type column: " << (Ref1.IsColRel()?"relative":"absolute")
-        << "  row: " << (Ref1.IsRowRel()?"relative":"absolute")
-        << "  sheet: " << (Ref1.IsTabRel()?"relative":"absolute") << endl;
-    cout << "    deleted column: " << (Ref1.IsColDeleted()?"yes":"no")
-        << "  row: " << (Ref1.IsRowDeleted()?"yes":"no")
-        << "  sheet: " << (Ref1.IsTabDeleted()?"yes":"no") << endl;
-    cout << "    absolute pos column: " << Ref1.nCol << "  row: " << Ref1.nRow << "  sheet: " << Ref1.nTab << endl;
-    cout << "    relative pos column: " << Ref1.nRelCol << "  row: " << Ref1.nRelRow << "  sheet: " << Ref1.nRelTab << endl;
-
-    cout << "  ref 2" << endl;
-    cout << "    address type column: " << (Ref2.IsColRel()?"relative":"absolute")
-        << "  row: " << (Ref2.IsRowRel()?"relative":"absolute")
-        << "  sheet: " << (Ref2.IsTabRel()?"relative":"absolute") << endl;
-    cout << "    deleted column: " << (Ref2.IsColDeleted()?"yes":"no")
-        << "  row: " << (Ref2.IsRowDeleted()?"yes":"no")
-        << "  sheet: " << (Ref2.IsTabDeleted()?"yes":"no") << endl;
-    cout << "    absolute pos column: " << Ref2.nCol << "  row: " << Ref2.nRow << "  sheet: " << Ref2.nTab << endl;
-    cout << "    relative pos column: " << Ref2.nRelCol << "  row: " << Ref2.nRelRow << "  sheet: " << Ref2.nRelTab << endl;
+void ScComplexRefData::Dump( int nIndent ) const
+{
+    std::string aIndent;
+    for (int i = 0; i < nIndent; ++i)
+        aIndent += "  ";
+
+    cout << aIndent << "ref 1" << endl;
+    Ref1.Dump(nIndent+1);
+    cout << aIndent << "ref 2" << endl;
+    Ref2.Dump(nIndent+1);
 }
 #endif
 
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 79bdfa3..a46d33e 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -761,7 +761,7 @@ bool ScSingleRefToken::operator==( const FormulaToken& r ) const
 void ScSingleRefToken::Dump() const
 {
     cout << "-- ScSingleRefToken" << endl;
-    aSingleRef.Dump();
+    aSingleRef.Dump(1);
 }
 #endif
 
@@ -780,7 +780,7 @@ bool ScDoubleRefToken::operator==( const FormulaToken& r ) const
 void ScDoubleRefToken::Dump() const
 {
     cout << "-- ScDoubleRefToken" << endl;
-    aDoubleRef.Dump();
+    aDoubleRef.Dump(1);
 }
 #endif
 


More information about the Libreoffice-commits mailing list