[Libreoffice-commits] core.git: Branch 'feature/formula-core-rework' - sc/inc sc/source
Kohei Yoshida
kohei.yoshida at gmail.com
Fri Jun 28 12:50:12 PDT 2013
sc/inc/column.hxx | 4 +++
sc/inc/document.hxx | 5 ++++
sc/inc/table.hxx | 5 ++++
sc/source/core/data/column2.cxx | 40 +++++++++++++++++++++++++++++++++++++++
sc/source/core/data/document.cxx | 11 ++++++++++
sc/source/core/data/table1.cxx | 10 +++++++++
6 files changed, 75 insertions(+)
New commits:
commit 96e92dc1677f3884ec6a1ec3b67148c28b24bd24
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Fri Jun 28 15:49:43 2013 -0400
Add a convenient way to dump formula group states for a single column.
Useful when debugging.
Change-Id: I4e408ad9a3dc2046557d152fcd067c1b0c5645c0
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 4601ae2..6cc3c4b 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -525,6 +525,10 @@ public:
void FormulaCellsUndecided( SCROW nRow1, SCROW nRow2 );
+#if DEBUG_COLUMN_STORAGE
+ void DumpFormulaGroups() const;
+#endif
+
private:
sc::CellStoreType::iterator GetPositionToInsert( SCROW nRow );
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 8d942b7..806fb77 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -36,6 +36,7 @@
#include <com/sun/star/chart2/XChartDocument.hpp>
#include "typedstrdata.hxx"
#include "compressedarray.hxx"
+#include "calcmacros.hxx"
#include <tools/fract.hxx>
#include <tools/gen.hxx>
@@ -1984,6 +1985,10 @@ public:
*/
bool HasBroadcaster( SCTAB nTab, SCCOL nCol ) const;
+#if DEBUG_COLUMN_STORAGE
+ void DumpFormulaGroups( SCTAB nTab, SCCOL nCol ) const;
+#endif
+
private: // CLOOK-Impl-methods
/**
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index bda039f..03060bb 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -32,6 +32,7 @@
#include "types.hxx"
#include "cellvalue.hxx"
#include "formula/types.hxx"
+#include "calcmacros.hxx"
#include <set>
#include <map>
@@ -857,6 +858,10 @@ public:
void SetFormulaResults( SCCOL nCol, SCROW nRow, const double* pResults, size_t nLen );
+#if DEBUG_COLUMN_STORAGE
+ void DumpFormulaGroups( SCCOL nCol ) const;
+#endif
+
/** Replace behaves differently to the Search; adjust the rCol and rRow accordingly.
'Replace' replaces at the 'current' position, but in order to achieve
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index a7056d0..ae20e44 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1544,6 +1544,46 @@ void ScColumn::FormulaCellsUndecided( SCROW /*nRow1*/, SCROW /*nRow2*/ )
{
}
+#if DEBUG_COLUMN_STORAGE
+
+namespace {
+
+struct FormulaGroupDumper : std::unary_function<sc::CellStoreType::value_type, void>
+{
+ void operator() (const sc::CellStoreType::value_type& rNode) const
+ {
+ if (rNode.type != sc::element_type_formula)
+ return;
+
+ sc::formula_block::const_iterator it = sc::formula_block::begin(*rNode.data);
+ sc::formula_block::const_iterator itEnd = sc::formula_block::end(*rNode.data);
+
+ for (; it != itEnd; ++it)
+ {
+ const ScFormulaCell& rCell = **it;
+ if (!rCell.IsShared())
+ continue;
+
+ if (rCell.GetSharedTopRow() != rCell.aPos.Row())
+ continue;
+
+ SCROW nLen = rCell.GetSharedLength();
+ cout << " * group: start=" << rCell.aPos.Row() << ", length=" << nLen << endl;
+ std::advance(it, nLen-1);
+ }
+ }
+};
+
+}
+
+void ScColumn::DumpFormulaGroups() const
+{
+ cout << "-- formua groups" << endl;
+ std::for_each(maCells.begin(), maCells.end(), FormulaGroupDumper());
+ cout << "--" << endl;
+}
+#endif
+
void ScColumn::CopyCellTextAttrsToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol) const
{
rDestCol.maCellTextAttrs.set_empty(nRow1, nRow2); // Empty the destination range first.
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 3ce424f..9d3c72f 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -2266,6 +2266,17 @@ bool ScDocument::HasBroadcaster( SCTAB nTab, SCCOL nCol ) const
return pTab->HasBroadcaster(nCol);
}
+#if DEBUG_COLUMN_STORAGE
+void ScDocument::DumpFormulaGroups( SCTAB nTab, SCCOL nCol ) const
+{
+ const ScTable* pTab = FetchTable(nTab);
+ if (!pTab)
+ return;
+
+ pTab->DumpFormulaGroups(nCol);
+}
+#endif
+
bool ScDocument::TableExists( SCTAB nTab ) const
{
return ValidTab(nTab) && static_cast<size_t>(nTab) < maTabs.size() && maTabs[nTab];
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index dcd0344..02c8952 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -2221,6 +2221,16 @@ void ScTable::SetFormulaResults( SCCOL nCol, SCROW nRow, const double* pResults,
aCol[nCol].SetFormulaResults(nRow, pResults, nLen);
}
+#if DEBUG_COLUMN_STORAGE
+void ScTable::DumpFormulaGroups( SCCOL nCol ) const
+{
+ if (!ValidCol(nCol))
+ return;
+
+ aCol[nCol].DumpFormulaGroups();
+}
+#endif
+
const SvtBroadcaster* ScTable::GetBroadcaster( SCCOL nCol, SCROW nRow ) const
{
if (!ValidColRow(nCol, nRow))
More information about the Libreoffice-commits
mailing list