[Libreoffice-commits] core.git: Branch 'feature/calc-group-interpreter' - config_host/config_features.h.in configure.ac sc/source

Michael Meeks michael.meeks at suse.com
Wed Jun 26 06:15:06 PDT 2013


 config_host/config_features.h.in        |    7 +
 configure.ac                            |    1 
 sc/source/core/inc/openclwrapper.hxx    |  184 ++++++++++++++++++++++++++++++++
 sc/source/core/opencl/openclwrapper.hxx |  182 -------------------------------
 sc/source/core/tool/formulagroup.cxx    |   40 +++---
 sc/source/ui/app/scmod.cxx              |   10 +
 sc/source/ui/optdlg/calcoptionsdlg.cxx  |    4 
 7 files changed, 224 insertions(+), 204 deletions(-)

New commits:
commit 3f1136d41dda40e6b3b4e79f629752427f511784
Author: Michael Meeks <michael.meeks at suse.com>
Date:   Wed Jun 26 14:04:25 2013 +0100

    use #if to avoid gotchas, move header to include, make UI conditional.

diff --git a/config_host/config_features.h.in b/config_host/config_features.h.in
index e288eef..fac764e 100644
--- a/config_host/config_features.h.in
+++ b/config_host/config_features.h.in
@@ -59,4 +59,11 @@
 
 #define HAVE_FEATURE_MULTIUSER_ENVIRONMENT 0
 
+/*
+ * Whether we have the OpenCL headers and should compile in any
+ * support for that abstraction.
+ */
+
+#define HAVE_FEATURE_OPENCL 0
+
 #endif
diff --git a/configure.ac b/configure.ac
index 6624842..46cb73c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9691,6 +9691,7 @@ else
                OPENCL_CFLAGS="-I$with_opencl_sdk/include"
                OPENCL_LIBS="-L$with_opencl_sdk/lib/x86 -lOpenCL"
                AC_MSG_RESULT([found at path $with_opencl_sdk])
+               AC_DEFINE(HAVE_FEATURE_OPENCL)
        else
                AC_MSG_ERROR([no headers found found at $with_opencl_sdk/include ])
        fi
diff --git a/sc/source/core/opencl/openclwrapper.hxx b/sc/source/core/inc/openclwrapper.hxx
similarity index 99%
rename from sc/source/core/opencl/openclwrapper.hxx
rename to sc/source/core/inc/openclwrapper.hxx
index d3b5354..62006d1 100644
--- a/sc/source/core/opencl/openclwrapper.hxx
+++ b/sc/source/core/inc/openclwrapper.hxx
@@ -10,6 +10,8 @@
 #ifndef _OPENCL_WRAPPER_H_
 #define _OPENCL_WRAPPER_H_
 
+#include <config_features.h>
+
 #include <CL/cl.h>
 
 #define MaxTextExtent  4096
@@ -22,7 +24,7 @@
 #define strcasecmp strcmp
 #endif
 #endif
-#define ENABLE_OPENCL //dbg
+
 typedef struct _KernelEnv {
     cl_context context;
     cl_command_queue commandQueue;
diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx
index 43977ed..2262cc5 100644
--- a/sc/source/core/tool/formulagroup.cxx
+++ b/sc/source/core/tool/formulagroup.cxx
@@ -7,6 +7,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <config_features.h>
 #include "formulagroup.hxx"
 #include "document.hxx"
 #include "formulacell.hxx"
@@ -15,8 +16,8 @@
 #include "interpre.hxx"
 #include "formula/vectortoken.hxx"
 
-#ifdef ENABLE_OPENCL
-#include "openclwrapper.hxx"
+#if HAVE_FEATURE_OPENCL
+#  include "openclwrapper.hxx"
 #endif
 
 namespace sc {
@@ -40,7 +41,7 @@ TimeValue aTimeBefore, aTimeAfter;
 
 bool FormulaGroupInterpreter::interpret()
 {
-#ifdef ENABLE_OPENCL //dbg
+#if HAVE_FEATURE_OPENCL
     size_t rowSize = mxGroup->mnLength, srcSize = 0;
     fprintf(stderr,"rowSize at begin is ...%ld.\n",rowSize);
     int *rangeStart =NULL; // The first position for calculation,for example,the A1 in (=MAX(A1:A100))
@@ -100,7 +101,7 @@ bool FormulaGroupInterpreter::interpret()
                         nRowEnd += i;
                     size_t nRowSize = nRowEnd - nRowStart + 1;
                     ScMatrixRef pMat(new ScMatrix(nColSize, nRowSize, 0.0));
-#ifdef ENABLE_OPENCL
+#if HAVE_FEATURE_OPENCL
                     //srcSize = rowSize+nRowSize-rowSize%nRowSize;//align as nRowSize
                     //srcData = (double *)calloc(srcSize,sizeof(double));
                     rangeStart[i] = nRowStart;//record the start position
@@ -109,7 +110,7 @@ bool FormulaGroupInterpreter::interpret()
                     for (size_t nCol = 0; nCol < nColSize; ++nCol)
                     {
                         const double* pArray = rArrays[nCol];
-#ifdef ENABLE_OPENCL
+#if HAVE_FEATURE_OPENCL
                         //printf("pArray is %p.\n",pArray);
                         if( NULL==pArray )
                         {
@@ -146,7 +147,7 @@ bool FormulaGroupInterpreter::interpret()
         if (!pDest)
             return false;
 
-#ifdef ENABLE_OPENCL
+#if HAVE_FEATURE_OPENCL
         const formula::FormulaToken *pCur = aCode2.First();
         aCode2.Reset();
         while( ( pCur = aCode2.Next() ) != NULL )
@@ -187,7 +188,7 @@ bool FormulaGroupInterpreter::interpret()
         }
     } // for loop end (mxGroup->mnLength)
     // For GPU calculation
-#ifdef ENABLE_OPENCL //dbg: Using "export SC_GPU=1" to open if{} in terminal
+#if HAVE_FEATURE_OPENCL //dbg: Using "export SC_GPU=1" to open if{} in terminal
     if(getenv("SC_GPU"))
     {
             fprintf(stderr,"ggGPU flow...\n\n");
@@ -236,17 +237,20 @@ bool FormulaGroupInterpreter::interpret()
 //            }
 
 // We want to stuff the double data, which in rResult[i] from GPU calculated well, to UI view for users
-                for (sal_Int32 i = 0; i < mxGroup->mnLength; ++i)
-                    {
-                    ScFormulaCell* pDestx = mrDoc.GetFormulaCell(aTmpPos);
-                    if (!pDestx)
-                        return false;
-                    formula::FormulaTokenRef xResult = new formula::FormulaDoubleToken(rResult[i]);
-                    pDestx->SetResultToken(xResult.get());
-                    pDestx->ResetDirty();
-                    pDestx->SetChanged(true);
-                    aTmpPos.SetRow(mxGroup->mnStart + i + 1);
-                 }
+            ScAddress aInsertPos = maTopPos;
+            for (sal_Int32 i = 0; i < mxGroup->mnLength; ++i)
+            {
+                aInsertPos.SetRow(mxGroup->mnStart + i);
+                ScFormulaCell* pDestx = mrDoc.GetFormulaCell(aInsertPos);
+
+                SAL_DEBUG(" put value " << rResult[i] << " into formula at " << aInsertPos.Col() << " , " << aInsertPos.Row() );
+                assert(pDestx);
+
+                formula::FormulaTokenRef xResult = new formula::FormulaDoubleToken(rResult[i]);
+                pDestx->SetResultToken(xResult.get());
+                pDestx->ResetDirty();
+                pDestx->SetChanged(true);
+            }
         }
 
         if(leftData)
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index 05cef41..586e89d 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -17,6 +17,8 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <config_features.h>
+
 #include <com/sun/star/ui/dialogs/XSLTFilterDialog.hpp>
 #include <comphelper/processfactory.hxx>
 
@@ -101,8 +103,8 @@
 #include "scabstdlg.hxx"
 #include "formula/errorcodes.hxx"
 
-#ifdef ENABLE_OPENCL
-#include "openclwrapper.hxx"
+#if HAVE_FEATURE_OPENCL
+#  include "openclwrapper.hxx"
 #endif
 
 #define SC_IDLE_MIN     150
@@ -152,7 +154,7 @@ ScModule::ScModule( SfxObjectFactory* pFact ) :
     mbIsInSharedDocLoading( false ),
     mbIsInSharedDocSaving( false )
 {
-#ifdef ENABLE_OPENCL
+#if HAVE_FEATURE_OPENCL
     OclCalc::InitEnv();
 #endif
     //  im ctor ist der ResManager (DLL-Daten) noch nicht initialisiert!
@@ -188,7 +190,7 @@ ScModule::ScModule( SfxObjectFactory* pFact ) :
 
 ScModule::~ScModule()
 {
-#ifdef ENABLE_OPENCL
+#if HAVE_FEATURE_OPENCL
     OclCalc::ReleaseOpenclRunEnv();
 #endif
     OSL_ENSURE( !pSelTransfer, "Selection Transfer object not deleted" );
diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx
index 88eb78e..49bff5d 100644
--- a/sc/source/ui/optdlg/calcoptionsdlg.cxx
+++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx
@@ -10,6 +10,8 @@
  *
  */
 
+#include <config_features.h>
+
 #include "calcoptionsdlg.hxx"
 #include "calcoptionsdlg.hrc"
 #include "scresid.hxx"
@@ -174,7 +176,9 @@ void ScCalcOptionsDialog::FillOptionsList()
     }
 
     pModel->Insert(createBoolItem(maCaptionEmptyStringAsZero,maConfig.mbEmptyStringAsZero));
+#if HAVE_FEATURE_OPENCL
     pModel->Insert(createBoolItem(maCaptionOpenCLEnabled,maConfig.mbOpenCLEnabled));
+#endif
 
     maLbSettings.SetUpdateMode(true);
 }


More information about the Libreoffice-commits mailing list