sc/inc/formulagroup.hxx | 5 +-- sc/source/core/tool/formulagroup.cxx | 51 ++++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-)
New commits: commit 0da704e16a8c21a2d5e178b00af97774be5ef820 Author: Michael Meeks <[email protected]> Date: Tue Jul 2 22:01:01 2013 +0100 Dummy formula group interpreter for testing. diff --git a/sc/inc/formulagroup.hxx b/sc/inc/formulagroup.hxx index 1c573c4..e645968 100644 --- a/sc/inc/formulagroup.hxx +++ b/sc/inc/formulagroup.hxx @@ -30,9 +30,8 @@ struct FormulaGroupContext : boost::noncopyable }; /** - * All the vectorized formula calculation code should be collected here. - * - * Abstract base class for formula group interpreters, and a factory. + * Abstract base class for vectorised formula group interpreters, + * plus a global instance factory. */ class SC_DLLPUBLIC FormulaGroupInterpreter { diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx index 3dd43e3..ae0b0d6 100644 --- a/sc/source/core/tool/formulagroup.cxx +++ b/sc/source/core/tool/formulagroup.cxx @@ -20,6 +20,8 @@ #include <vector> +#define USE_DUMMY_INTERPRETER 1 + namespace sc { ScMatrixRef FormulaGroupInterpreterSoftware::inverseMatrix(const ScMatrix& /*rMat*/) @@ -108,14 +110,61 @@ bool FormulaGroupInterpreterSoftware::interpret(ScDocument& rDoc, const ScAddres namespace opencl { extern sc::FormulaGroupInterpreter *createFormulaGroupInterpreter(); } - FormulaGroupInterpreter *FormulaGroupInterpreter::msInstance = NULL; +#if USE_DUMMY_INTERPRETER +class FormulaGroupInterpreterDummy : public FormulaGroupInterpreter +{ + enum Mode { + WRITE_OUTPUT = 0 + }; + Mode meMode; +public: + FormulaGroupInterpreterDummy() + { + const char *pValue = getenv("FORMULA_GROUP_DUMMY"); + meMode = static_cast<Mode>(OString(pValue, strlen(pValue)).toInt32()); + fprintf(stderr, "Using Dummy Formula Group interpreter mode %d\n", (int)meMode); + } + + virtual ScMatrixRef inverseMatrix(const ScMatrix& /*rMat*/) + { + return ScMatrixRef(); + } + + virtual bool interpret(ScDocument& rDoc, const ScAddress& rTopPos, + const ScFormulaCellGroupRef& xGroup, + ScTokenArray& rCode) + { + (void)rCode; + + // Write simple data back into the sheet + if (meMode == WRITE_OUTPUT) + { + double *pDoubles = new double[xGroup->mnLength]; + for (sal_Int32 i = 0; i < xGroup->mnLength; i++) + pDoubles[i] = 42.0 + i; + rDoc.SetFormulaResults(rTopPos, pDoubles, xGroup->mnLength); + delete [] pDoubles; + } + return true; + } +}; +#endif + /// load and/or configure the correct formula group interpreter FormulaGroupInterpreter *FormulaGroupInterpreter::getStatic() { static bool bOpenCLEnabled = false; +#if USE_DUMMY_INTERPRETER + if (getenv("FORMULA_GROUP_DUMMY")) + { + delete msInstance; + return msInstance = new sc::FormulaGroupInterpreterDummy(); + } +#endif + if ( msInstance && bOpenCLEnabled != ScInterpreter::GetGlobalConfig().mbOpenCLEnabled ) { _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
