sc/source/core/opencl/formulagroupcl.cxx | 7 sc/source/core/opencl/op_statistical.cxx | 1044 ++++------ sc/source/core/opencl/opbase.cxx | 31 sc/source/core/tool/formulalogger.cxx | 24 sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx | 20 sc/source/ui/app/inputhdl.cxx | 74 sc/source/ui/dbgui/pfiltdlg.cxx | 122 - sc/source/ui/dbgui/tpsort.cxx | 227 +- sc/source/ui/dbgui/tpsubt.cxx | 82 sc/source/ui/docshell/docsh.cxx | 121 - sc/source/ui/drawfunc/fuconrec.cxx | 198 - sc/source/ui/drawfunc/fudraw.cxx | 96 sc/source/ui/drawfunc/fuins1.cxx | 40 sc/source/ui/drawfunc/fuins2.cxx | 166 - sc/source/ui/drawfunc/futext.cxx | 116 - sc/source/ui/drawfunc/futext3.cxx | 118 - sc/source/ui/drawfunc/mediash.cxx | 44 sc/source/ui/formdlg/formula.cxx | 268 +- sc/source/ui/namedlg/namedlg.cxx | 56 sc/source/ui/navipi/content.cxx | 254 +- sc/source/ui/navipi/navipi.cxx | 110 - sc/source/ui/optdlg/tpusrlst.cxx | 30 sc/source/ui/pagedlg/areasdlg.cxx | 48 sc/source/ui/pagedlg/scuitphfedit.cxx | 22 sc/source/ui/pagedlg/tphfedit.cxx | 64 sc/source/ui/undo/areasave.cxx | 24 sc/source/ui/undo/undobase.cxx | 70 sc/source/ui/undo/undoblk.cxx | 121 - sc/source/ui/undo/undocell.cxx | 22 sc/source/ui/undo/undodat.cxx | 30 sc/source/ui/undo/undoutil.cxx | 24 sc/source/ui/vba/excelvbahelper.cxx | 200 - sc/source/ui/vba/vbaapplication.cxx | 66 sc/source/ui/vba/vbaaxes.cxx | 40 sc/source/ui/vba/vbaeventshelper.cxx | 28 sc/source/ui/vba/vbaname.cxx | 21 sc/source/ui/vba/vbarange.cxx | 208 - sc/source/ui/vba/vbasheetobject.cxx | 26 sc/source/ui/vba/vbaworksheet.cxx | 56 sc/source/ui/vba/vbaworksheets.cxx | 72 40 files changed, 2194 insertions(+), 2196 deletions(-)
New commits: commit a7c8c5f49af7ad8c1101a4c73dbe7a83b7ba8cb5 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Sun Aug 9 11:55:27 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sun Aug 9 19:05:46 2020 +0200 loplugin:flatten in sc/ui/vba Change-Id: I9015274bdc71baac2bbef9d34e3d69557533d92e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100399 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/ui/vba/excelvbahelper.cxx b/sc/source/ui/vba/excelvbahelper.cxx index f251517cf415..db12c6bab9ca 100644 --- a/sc/source/ui/vba/excelvbahelper.cxx +++ b/sc/source/ui/vba/excelvbahelper.cxx @@ -173,18 +173,18 @@ implnCopy( const uno::Reference< frame::XModel>& xModel ) { ScTabViewShell* pViewShell = getBestViewShell( xModel ); ScDocShell* pDocShell = getDocShell( xModel ); - if ( pViewShell && pDocShell ) - { - pViewShell->CopyToClip(nullptr,false,false,true); + if ( !(pViewShell && pDocShell) ) + return; - // mark the copied transfer object so it is used in ScVbaRange::Insert - uno::Reference<datatransfer::XTransferable2> xTransferable(ScTabViewShell::GetClipData(pViewShell->GetViewData().GetActiveWin())); - ScTransferObj* pClipObj = ScTransferObj::GetOwnClipboard(xTransferable); - if (pClipObj) - { - pClipObj->SetUseInApi( true ); - pDocShell->SetClipData(xTransferable); - } + pViewShell->CopyToClip(nullptr,false,false,true); + + // mark the copied transfer object so it is used in ScVbaRange::Insert + uno::Reference<datatransfer::XTransferable2> xTransferable(ScTabViewShell::GetClipData(pViewShell->GetViewData().GetActiveWin())); + ScTransferObj* pClipObj = ScTransferObj::GetOwnClipboard(xTransferable); + if (pClipObj) + { + pClipObj->SetUseInApi( true ); + pDocShell->SetClipData(xTransferable); } } @@ -193,18 +193,18 @@ implnCut( const uno::Reference< frame::XModel>& xModel ) { ScTabViewShell* pViewShell = getBestViewShell( xModel ); ScDocShell* pDocShell = getDocShell( xModel ); - if ( pViewShell && pDocShell ) - { - pViewShell->CutToClip(); + if ( !(pViewShell && pDocShell) ) + return; - // mark the copied transfer object so it is used in ScVbaRange::Insert - uno::Reference<datatransfer::XTransferable2> xTransferable(ScTabViewShell::GetClipData(pViewShell->GetViewData().GetActiveWin())); - ScTransferObj* pClipObj = ScTransferObj::GetOwnClipboard(xTransferable); - if (pClipObj) - { - pClipObj->SetUseInApi( true ); - pDocShell->SetClipData(xTransferable); - } + pViewShell->CutToClip(); + + // mark the copied transfer object so it is used in ScVbaRange::Insert + uno::Reference<datatransfer::XTransferable2> xTransferable(ScTabViewShell::GetClipData(pViewShell->GetViewData().GetActiveWin())); + ScTransferObj* pClipObj = ScTransferObj::GetOwnClipboard(xTransferable); + if (pClipObj) + { + pClipObj->SetUseInApi( true ); + pDocShell->SetClipData(xTransferable); } } @@ -214,21 +214,21 @@ void implnPasteSpecial( const uno::Reference< frame::XModel>& xModel, InsertDele ScTabViewShell* pTabViewShell = getBestViewShell( xModel ); ScDocShell* pDocShell = getDocShell( xModel ); - if ( pTabViewShell && pDocShell ) + if ( !(pTabViewShell && pDocShell) ) + return; + + ScViewData& rView = pTabViewShell->GetViewData(); + vcl::Window* pWin = rView.GetActiveWin(); + if (pWin) { - ScViewData& rView = pTabViewShell->GetViewData(); - vcl::Window* pWin = rView.GetActiveWin(); - if (pWin) - { - const ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard(pDocShell->GetClipData()); - ScDocument* pDoc = nullptr; - if ( pOwnClip ) - pDoc = pOwnClip->GetDocument(); - pTabViewShell->PasteFromClip( nFlags, pDoc, - nFunction, bSkipEmpty, bTranspose, false, - INS_NONE, InsertDeleteFlags::NONE, true ); - pTabViewShell->CellContentChanged(); - } + const ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard(pDocShell->GetClipData()); + ScDocument* pDoc = nullptr; + if ( pOwnClip ) + pDoc = pOwnClip->GetDocument(); + pTabViewShell->PasteFromClip( nFlags, pDoc, + nFunction, bSkipEmpty, bTranspose, false, + INS_NONE, InsertDeleteFlags::NONE, true ); + pTabViewShell->CellContentChanged(); } } @@ -314,78 +314,78 @@ void setUpDocumentModules( const uno::Reference< sheet::XSpreadsheetDocument >& { uno::Reference< frame::XModel > xModel( xDoc, uno::UNO_QUERY ); ScDocShell* pShell = excel::getDocShell( xModel ); - if ( pShell ) - { - OUString aPrjName( "Standard" ); - pShell->GetBasicManager()->SetName( aPrjName ); + if ( !pShell ) + return; + + OUString aPrjName( "Standard" ); + pShell->GetBasicManager()->SetName( aPrjName ); - /* Set library container to VBA compatibility mode. This will create - the VBA Globals object and store it in the Basic manager of the - document. */ - uno::Reference<script::XLibraryContainer> xLibContainer = pShell->GetBasicContainer(); - uno::Reference<script::vba::XVBACompatibility> xVBACompat( xLibContainer, uno::UNO_QUERY_THROW ); - xVBACompat->setVBACompatibilityMode( true ); + /* Set library container to VBA compatibility mode. This will create + the VBA Globals object and store it in the Basic manager of the + document. */ + uno::Reference<script::XLibraryContainer> xLibContainer = pShell->GetBasicContainer(); + uno::Reference<script::vba::XVBACompatibility> xVBACompat( xLibContainer, uno::UNO_QUERY_THROW ); + xVBACompat->setVBACompatibilityMode( true ); - if( xLibContainer.is() ) + if( xLibContainer.is() ) + { + if( !xLibContainer->hasByName( aPrjName ) ) + xLibContainer->createLibrary( aPrjName ); + uno::Any aLibAny = xLibContainer->getByName( aPrjName ); + uno::Reference< container::XNameContainer > xLib; + aLibAny >>= xLib; + if( xLib.is() ) { - if( !xLibContainer->hasByName( aPrjName ) ) - xLibContainer->createLibrary( aPrjName ); - uno::Any aLibAny = xLibContainer->getByName( aPrjName ); - uno::Reference< container::XNameContainer > xLib; - aLibAny >>= xLib; - if( xLib.is() ) + uno::Reference< script::vba::XVBAModuleInfo > xVBAModuleInfo( xLib, uno::UNO_QUERY_THROW ); + uno::Reference< lang::XMultiServiceFactory> xSF( pShell->GetModel(), uno::UNO_QUERY_THROW); + uno::Reference< container::XNameAccess > xVBACodeNamedObjectAccess( xSF->createInstance("ooo.vba.VBAObjectModuleObjectProvider"), uno::UNO_QUERY_THROW ); + // set up the module info for the workbook and sheets in the newly created + // spreadsheet + ScDocument& rDoc = pShell->GetDocument(); + OUString sCodeName = rDoc.GetCodeName(); + if ( sCodeName.isEmpty() ) { - uno::Reference< script::vba::XVBAModuleInfo > xVBAModuleInfo( xLib, uno::UNO_QUERY_THROW ); - uno::Reference< lang::XMultiServiceFactory> xSF( pShell->GetModel(), uno::UNO_QUERY_THROW); - uno::Reference< container::XNameAccess > xVBACodeNamedObjectAccess( xSF->createInstance("ooo.vba.VBAObjectModuleObjectProvider"), uno::UNO_QUERY_THROW ); - // set up the module info for the workbook and sheets in the newly created - // spreadsheet - ScDocument& rDoc = pShell->GetDocument(); - OUString sCodeName = rDoc.GetCodeName(); - if ( sCodeName.isEmpty() ) - { - sCodeName = "ThisWorkbook"; - rDoc.SetCodeName( sCodeName ); - } - - std::vector< OUString > sDocModuleNames; - sDocModuleNames.push_back( sCodeName ); - - for ( SCTAB index = 0; index < rDoc.GetTableCount(); index++) - { - OUString aName; - rDoc.GetCodeName( index, aName ); - sDocModuleNames.push_back( aName ); - } - - for ( const auto& rName : sDocModuleNames ) - { - script::ModuleInfo sModuleInfo; - - uno::Any aName= xVBACodeNamedObjectAccess->getByName( rName ); - sModuleInfo.ModuleObject.set( aName, uno::UNO_QUERY ); - sModuleInfo.ModuleType = script::ModuleType::DOCUMENT; - xVBAModuleInfo->insertModuleInfo( rName, sModuleInfo ); - if( xLib->hasByName( rName ) ) - xLib->replaceByName( rName, uno::makeAny( OUString( "Option VBASupport 1\n") ) ); - else - xLib->insertByName( rName, uno::makeAny( OUString( "Option VBASupport 1\n" ) ) ); - } + sCodeName = "ThisWorkbook"; + rDoc.SetCodeName( sCodeName ); } - } - /* Trigger the Workbook_Open event, event processor will register - itself as listener for specific events. */ - try - { - uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( pShell->GetDocument().GetVbaEventProcessor(), uno::UNO_SET_THROW ); - uno::Sequence< uno::Any > aArgs; - xVbaEvents->processVbaEvent( script::vba::VBAEventId::WORKBOOK_OPEN, aArgs ); - } - catch( uno::Exception& ) - { + std::vector< OUString > sDocModuleNames; + sDocModuleNames.push_back( sCodeName ); + + for ( SCTAB index = 0; index < rDoc.GetTableCount(); index++) + { + OUString aName; + rDoc.GetCodeName( index, aName ); + sDocModuleNames.push_back( aName ); + } + + for ( const auto& rName : sDocModuleNames ) + { + script::ModuleInfo sModuleInfo; + + uno::Any aName= xVBACodeNamedObjectAccess->getByName( rName ); + sModuleInfo.ModuleObject.set( aName, uno::UNO_QUERY ); + sModuleInfo.ModuleType = script::ModuleType::DOCUMENT; + xVBAModuleInfo->insertModuleInfo( rName, sModuleInfo ); + if( xLib->hasByName( rName ) ) + xLib->replaceByName( rName, uno::makeAny( OUString( "Option VBASupport 1\n") ) ); + else + xLib->insertByName( rName, uno::makeAny( OUString( "Option VBASupport 1\n" ) ) ); + } } } + + /* Trigger the Workbook_Open event, event processor will register + itself as listener for specific events. */ + try + { + uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( pShell->GetDocument().GetVbaEventProcessor(), uno::UNO_SET_THROW ); + uno::Sequence< uno::Any > aArgs; + xVbaEvents->processVbaEvent( script::vba::VBAEventId::WORKBOOK_OPEN, aArgs ); + } + catch( uno::Exception& ) + { + } } SfxItemSet* diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx index af9af62e5d3d..c4cac4b68471 100644 --- a/sc/source/ui/vba/vbaapplication.cxx +++ b/sc/source/ui/vba/vbaapplication.cxx @@ -995,18 +995,18 @@ typedef ::std::list< ScRange > ListOfScRange; */ void lclAddToListOfScRange( ListOfScRange& rList, const uno::Any& rArg ) { - if( rArg.hasValue() ) + if( !rArg.hasValue() ) + return; + + uno::Reference< excel::XRange > xRange( rArg, uno::UNO_QUERY_THROW ); + uno::Reference< XCollection > xCol( xRange->Areas( uno::Any() ), uno::UNO_QUERY_THROW ); + for( sal_Int32 nIdx = 1, nCount = xCol->getCount(); nIdx <= nCount; ++nIdx ) { - uno::Reference< excel::XRange > xRange( rArg, uno::UNO_QUERY_THROW ); - uno::Reference< XCollection > xCol( xRange->Areas( uno::Any() ), uno::UNO_QUERY_THROW ); - for( sal_Int32 nIdx = 1, nCount = xCol->getCount(); nIdx <= nCount; ++nIdx ) - { - uno::Reference< excel::XRange > xAreaRange( xCol->Item( uno::Any( nIdx ), uno::Any() ), uno::UNO_QUERY_THROW ); - uno::Reference< sheet::XCellRangeAddressable > xAddressable( xAreaRange->getCellRange(), uno::UNO_QUERY_THROW ); - ScRange aScRange; - ScUnoConversion::FillScRange( aScRange, xAddressable->getRangeAddress() ); - rList.push_back( aScRange ); - } + uno::Reference< excel::XRange > xAreaRange( xCol->Item( uno::Any( nIdx ), uno::Any() ), uno::UNO_QUERY_THROW ); + uno::Reference< sheet::XCellRangeAddressable > xAddressable( xAreaRange->getCellRange(), uno::UNO_QUERY_THROW ); + ScRange aScRange; + ScUnoConversion::FillScRange( aScRange, xAddressable->getRangeAddress() ); + rList.push_back( aScRange ); } } @@ -1105,34 +1105,34 @@ void lclIntersectRanges( ListOfScRange& rList, const uno::Any& rArg ) ListOfScRange aList2; lclAddToListOfScRange( aList2, rArg ); // do nothing, if the passed list is already empty - if( !rList.empty() && !aList2.empty() ) + if( rList.empty() || aList2.empty() ) + return; + + // save original list in a local + ListOfScRange aList1; + aList1.swap( rList ); + // join ranges from passed argument + lclJoinRanges( aList2 ); + // calculate intersection of the ranges in both lists + for( const auto& rOuterItem : aList1 ) { - // save original list in a local - ListOfScRange aList1; - aList1.swap( rList ); - // join ranges from passed argument - lclJoinRanges( aList2 ); - // calculate intersection of the ranges in both lists - for( const auto& rOuterItem : aList1 ) + for( const auto& rInnerItem : aList2 ) { - for( const auto& rInnerItem : aList2 ) + if( rOuterItem.Intersects( rInnerItem ) ) { - if( rOuterItem.Intersects( rInnerItem ) ) - { - ScRange aIsectRange( - std::max( rOuterItem.aStart.Col(), rInnerItem.aStart.Col() ), - std::max( rOuterItem.aStart.Row(), rInnerItem.aStart.Row() ), - std::max( rOuterItem.aStart.Tab(), rInnerItem.aStart.Tab() ), - std::min( rOuterItem.aEnd.Col(), rInnerItem.aEnd.Col() ), - std::min( rOuterItem.aEnd.Row(), rInnerItem.aEnd.Row() ), - std::min( rOuterItem.aEnd.Tab(), rInnerItem.aEnd.Tab() ) ); - rList.push_back( aIsectRange ); - } + ScRange aIsectRange( + std::max( rOuterItem.aStart.Col(), rInnerItem.aStart.Col() ), + std::max( rOuterItem.aStart.Row(), rInnerItem.aStart.Row() ), + std::max( rOuterItem.aStart.Tab(), rInnerItem.aStart.Tab() ), + std::min( rOuterItem.aEnd.Col(), rInnerItem.aEnd.Col() ), + std::min( rOuterItem.aEnd.Row(), rInnerItem.aEnd.Row() ), + std::min( rOuterItem.aEnd.Tab(), rInnerItem.aEnd.Tab() ) ); + rList.push_back( aIsectRange ); } } - // again, join the result ranges - lclJoinRanges( rList ); } + // again, join the result ranges + lclJoinRanges( rList ); } /** Creates a VBA Range object from the passed list of ranges. diff --git a/sc/source/ui/vba/vbaaxes.cxx b/sc/source/ui/vba/vbaaxes.cxx index 6a750f7656b6..61d09208751e 100644 --- a/sc/source/ui/vba/vbaaxes.cxx +++ b/sc/source/ui/vba/vbaaxes.cxx @@ -95,26 +95,26 @@ class AxisIndexWrapper : public ::cppu::WeakImplHelper< container::XIndexAccess public: AxisIndexWrapper( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< excel::XChart >& xChart ) : mxContext( xContext ), mxChart( xChart ) { - if ( mxChart.is() ) - { - ScVbaChart* pChart = static_cast< ScVbaChart* >( mxChart.get() ); - // primary - bool bBool = false; - uno::Reference< beans::XPropertySet > xDiagramPropertySet( pChart->xDiagramPropertySet() ); - if ( ( xDiagramPropertySet->getPropertyValue("HasXAxis") >>= bBool ) && bBool ) - mCoordinates.emplace_back( xlPrimary, xlCategory ); - if ( ( xDiagramPropertySet->getPropertyValue("HasYAxis") >>= bBool ) && bBool ) - mCoordinates.emplace_back( xlPrimary, xlSeriesAxis ); - - if ( pChart->is3D() ) - mCoordinates.emplace_back( xlPrimary, xlValue ); - - // secondary - if ( ( xDiagramPropertySet->getPropertyValue("HasSecondaryXAxis") >>= bBool ) && bBool ) - mCoordinates.emplace_back( xlSecondary, xlCategory ); - if ( ( xDiagramPropertySet->getPropertyValue("HasSecondaryYAxis") >>= bBool ) && bBool ) - mCoordinates.emplace_back( xlSecondary, xlSeriesAxis ); - } + if ( !mxChart.is() ) + return; + + ScVbaChart* pChart = static_cast< ScVbaChart* >( mxChart.get() ); + // primary + bool bBool = false; + uno::Reference< beans::XPropertySet > xDiagramPropertySet( pChart->xDiagramPropertySet() ); + if ( ( xDiagramPropertySet->getPropertyValue("HasXAxis") >>= bBool ) && bBool ) + mCoordinates.emplace_back( xlPrimary, xlCategory ); + if ( ( xDiagramPropertySet->getPropertyValue("HasYAxis") >>= bBool ) && bBool ) + mCoordinates.emplace_back( xlPrimary, xlSeriesAxis ); + + if ( pChart->is3D() ) + mCoordinates.emplace_back( xlPrimary, xlValue ); + + // secondary + if ( ( xDiagramPropertySet->getPropertyValue("HasSecondaryXAxis") >>= bBool ) && bBool ) + mCoordinates.emplace_back( xlSecondary, xlCategory ); + if ( ( xDiagramPropertySet->getPropertyValue("HasSecondaryYAxis") >>= bBool ) && bBool ) + mCoordinates.emplace_back( xlSecondary, xlSeriesAxis ); } virtual ::sal_Int32 SAL_CALL getCount() override { return mCoordinates.size(); } diff --git a/sc/source/ui/vba/vbaeventshelper.cxx b/sc/source/ui/vba/vbaeventshelper.cxx index 51e2d9edd728..536423a957ca 100644 --- a/sc/source/ui/vba/vbaeventshelper.cxx +++ b/sc/source/ui/vba/vbaeventshelper.cxx @@ -278,20 +278,20 @@ void SAL_CALL ScVbaEventListener::windowActivated( const lang::EventObject& rEve { ::osl::MutexGuard aGuard( maMutex ); - if( !mbDisposed ) - { - uno::Reference< awt::XWindow > xWindow( rEvent.Source, uno::UNO_QUERY ); - VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow( xWindow ); - // do not fire activation event multiple time for the same window - if( pWindow && (pWindow != mpActiveWindow) ) - { - // if another window is active, fire deactivation event first - if( mpActiveWindow ) - processWindowActivateEvent( mpActiveWindow, false ); - // fire activation event for the new window - processWindowActivateEvent( pWindow, true ); - mpActiveWindow = pWindow; - } + if( mbDisposed ) + return; + + uno::Reference< awt::XWindow > xWindow( rEvent.Source, uno::UNO_QUERY ); + VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow( xWindow ); + // do not fire activation event multiple time for the same window + if( pWindow && (pWindow != mpActiveWindow) ) + { + // if another window is active, fire deactivation event first + if( mpActiveWindow ) + processWindowActivateEvent( mpActiveWindow, false ); + // fire activation event for the new window + processWindowActivateEvent( pWindow, true ); + mpActiveWindow = pWindow; } } diff --git a/sc/source/ui/vba/vbaname.cxx b/sc/source/ui/vba/vbaname.cxx index 6d2072f97ba5..45e88a4c1395 100644 --- a/sc/source/ui/vba/vbaname.cxx +++ b/sc/source/ui/vba/vbaname.cxx @@ -106,18 +106,17 @@ void ScVbaName::setContent( const OUString& rContent, const formula::FormulaGra // We should be able to do the below by just setting calling SetCode on pNamedRange // right? - if ( pNamedRange && pNamedRange->pDocShell ) - { + if ( !(pNamedRange && pNamedRange->pDocShell) ) + return; - ScDocument& rDoc = pNamedRange->pDocShell->GetDocument(); - ScRangeData* pOldData = pNamedRange->GetRangeData_Impl(); - if (pOldData) - { - // Shorter way of doing this ? - ScCompiler aComp( &rDoc, pOldData->GetPos(), eGrammar ); - std::unique_ptr<ScTokenArray> pArray(aComp.CompileString(sContent)); - pOldData->SetCode(*pArray); - } + ScDocument& rDoc = pNamedRange->pDocShell->GetDocument(); + ScRangeData* pOldData = pNamedRange->GetRangeData_Impl(); + if (pOldData) + { + // Shorter way of doing this ? + ScCompiler aComp( &rDoc, pOldData->GetPos(), eGrammar ); + std::unique_ptr<ScTokenArray> pArray(aComp.CompileString(sContent)); + pOldData->SetCode(*pArray); } } diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx index 91f6956a267d..37c40d7f5c13 100644 --- a/sc/source/ui/vba/vbarange.cxx +++ b/sc/source/ui/vba/vbarange.cxx @@ -250,19 +250,19 @@ SfxItemSet* ScVbaRange::getCurrentDataSet( ) void ScVbaRange::fireChangeEvent() { - if( ScVbaApplication::getDocumentEventsEnabled() ) + if( !ScVbaApplication::getDocumentEventsEnabled() ) + return; + + ScDocument& rDoc = getScDocument(); + const uno::Reference< script::vba::XVBAEventProcessor >& xVBAEvents = rDoc.GetVbaEventProcessor(); + if( xVBAEvents.is() ) try + { + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[ 0 ] <<= uno::Reference< excel::XRange >( this ); + xVBAEvents->processVbaEvent( script::vba::VBAEventId::WORKSHEET_CHANGE, aArgs ); + } + catch( uno::Exception& ) { - ScDocument& rDoc = getScDocument(); - const uno::Reference< script::vba::XVBAEventProcessor >& xVBAEvents = rDoc.GetVbaEventProcessor(); - if( xVBAEvents.is() ) try - { - uno::Sequence< uno::Any > aArgs( 1 ); - aArgs[ 0 ] <<= uno::Reference< excel::XRange >( this ); - xVBAEvents->processVbaEvent( script::vba::VBAEventId::WORKSHEET_CHANGE, aArgs ); - } - catch( uno::Exception& ) - { - } } } @@ -1313,21 +1313,21 @@ void lclExpandAndMerge( const uno::Reference< table::XCellRange >& rxCellRange, uno::Reference< util::XMergeable > xMerge( lclExpandToMerged( rxCellRange, true ), uno::UNO_QUERY_THROW ); // Calc cannot merge over merged ranges, always unmerge first xMerge->merge( false ); - if( bMerge ) - { - // clear all contents of the covered cells (not the top-left cell) - table::CellRangeAddress aRangeAddr = lclGetRangeAddress( rxCellRange ); - sal_Int32 nLastColIdx = aRangeAddr.EndColumn - aRangeAddr.StartColumn; - sal_Int32 nLastRowIdx = aRangeAddr.EndRow - aRangeAddr.StartRow; - // clear cells of top row, right of top-left cell - if( nLastColIdx > 0 ) - lclClearRange( rxCellRange->getCellRangeByPosition( 1, 0, nLastColIdx, 0 ) ); - // clear all rows below top row - if( nLastRowIdx > 0 ) - lclClearRange( rxCellRange->getCellRangeByPosition( 0, 1, nLastColIdx, nLastRowIdx ) ); - // merge the range - xMerge->merge( true ); - } + if( !bMerge ) + return; + + // clear all contents of the covered cells (not the top-left cell) + table::CellRangeAddress aRangeAddr = lclGetRangeAddress( rxCellRange ); + sal_Int32 nLastColIdx = aRangeAddr.EndColumn - aRangeAddr.StartColumn; + sal_Int32 nLastRowIdx = aRangeAddr.EndRow - aRangeAddr.StartRow; + // clear cells of top row, right of top-left cell + if( nLastColIdx > 0 ) + lclClearRange( rxCellRange->getCellRangeByPosition( 1, 0, nLastColIdx, 0 ) ); + // clear all rows below top row + if( nLastRowIdx > 0 ) + lclClearRange( rxCellRange->getCellRangeByPosition( 0, 1, nLastColIdx, nLastRowIdx ) ); + // merge the range + xMerge->merge( true ); } /// @throws uno::RuntimeException @@ -2239,26 +2239,26 @@ ScVbaRange::Select() if ( !pUnoRangesBase ) throw uno::RuntimeException("Failed to access underlying uno range object" ); ScDocShell* pShell = pUnoRangesBase->GetDocShell(); - if ( pShell ) + if ( !pShell ) + return; + + uno::Reference< frame::XModel > xModel( pShell->GetModel(), uno::UNO_SET_THROW ); + uno::Reference< view::XSelectionSupplier > xSelection( xModel->getCurrentController(), uno::UNO_QUERY_THROW ); + if ( mxRanges.is() ) + xSelection->select( uno::Any( lclExpandToMerged( mxRanges ) ) ); + else + xSelection->select( uno::Any( lclExpandToMerged( mxRange, true ) ) ); + // set focus on document e.g. + // ThisComponent.CurrentController.Frame.getContainerWindow.SetFocus + try + { + uno::Reference< frame::XController > xController( xModel->getCurrentController(), uno::UNO_SET_THROW ); + uno::Reference< frame::XFrame > xFrame( xController->getFrame(), uno::UNO_SET_THROW ); + uno::Reference< awt::XWindow > xWin( xFrame->getContainerWindow(), uno::UNO_SET_THROW ); + xWin->setFocus(); + } + catch( uno::Exception& ) { - uno::Reference< frame::XModel > xModel( pShell->GetModel(), uno::UNO_SET_THROW ); - uno::Reference< view::XSelectionSupplier > xSelection( xModel->getCurrentController(), uno::UNO_QUERY_THROW ); - if ( mxRanges.is() ) - xSelection->select( uno::Any( lclExpandToMerged( mxRanges ) ) ); - else - xSelection->select( uno::Any( lclExpandToMerged( mxRange, true ) ) ); - // set focus on document e.g. - // ThisComponent.CurrentController.Frame.getContainerWindow.SetFocus - try - { - uno::Reference< frame::XController > xController( xModel->getCurrentController(), uno::UNO_SET_THROW ); - uno::Reference< frame::XFrame > xFrame( xController->getFrame(), uno::UNO_SET_THROW ); - uno::Reference< awt::XWindow > xWin( xFrame->getContainerWindow(), uno::UNO_SET_THROW ); - xWin->setFocus(); - } - catch( uno::Exception& ) - { - } } } @@ -3806,19 +3806,19 @@ ScVbaRange::setColumnWidth( const uno::Any& _columnwidth ) _columnwidth >>= nColWidth; nColWidth = lcl_Round2DecPlaces( nColWidth ); ScDocShell* pDocShell = getScDocShell(); - if ( pDocShell ) - { - if ( nColWidth != 0.0 ) - nColWidth = ( nColWidth + fExtraWidth ) * getDefaultCharWidth( pDocShell ); - RangeHelper thisRange( mxRange ); - table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress(); - sal_uInt16 nTwips = lcl_pointsToTwips( nColWidth ); + if ( !pDocShell ) + return; - std::vector<sc::ColRowSpan> aColArr(1, sc::ColRowSpan(thisAddress.StartColumn, thisAddress.EndColumn)); - // #163561# use mode SC_SIZE_DIRECT: hide for width 0, show for other values - pDocShell->GetDocFunc().SetWidthOrHeight( - true, aColArr, thisAddress.Sheet, SC_SIZE_DIRECT, nTwips, true, true); - } + if ( nColWidth != 0.0 ) + nColWidth = ( nColWidth + fExtraWidth ) * getDefaultCharWidth( pDocShell ); + RangeHelper thisRange( mxRange ); + table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress(); + sal_uInt16 nTwips = lcl_pointsToTwips( nColWidth ); + + std::vector<sc::ColRowSpan> aColArr(1, sc::ColRowSpan(thisAddress.StartColumn, thisAddress.EndColumn)); + // #163561# use mode SC_SIZE_DIRECT: hide for width 0, show for other values + pDocShell->GetDocFunc().SetWidthOrHeight( + true, aColArr, thisAddress.Sheet, SC_SIZE_DIRECT, nTwips, true, true); } uno::Any SAL_CALL @@ -4022,27 +4022,27 @@ ScVbaRange::setPageBreak( const uno::Any& _pagebreak) _pagebreak >>= nPageBreak; ScDocShell* pShell = getDocShellFromRange( mxRange ); - if ( pShell ) - { - RangeHelper thisRange( mxRange ); - table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress(); - if ((thisAddress.StartColumn==0) && (thisAddress.StartRow==0)) - return; - bool bColumn = false; + if ( !pShell ) + return; - if (thisAddress.StartRow==0) - bColumn = true; + RangeHelper thisRange( mxRange ); + table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress(); + if ((thisAddress.StartColumn==0) && (thisAddress.StartRow==0)) + return; + bool bColumn = false; - ScAddress aAddr( static_cast<SCCOL>(thisAddress.StartColumn), thisAddress.StartRow, thisAddress.Sheet ); - uno::Reference< frame::XModel > xModel = pShell->GetModel(); - if ( xModel.is() ) - { - ScTabViewShell* pViewShell = excel::getBestViewShell( xModel ); - if ( nPageBreak == excel::XlPageBreak::xlPageBreakManual ) - pViewShell->InsertPageBreak( bColumn, true, &aAddr); - else if ( nPageBreak == excel::XlPageBreak::xlPageBreakNone ) - pViewShell->DeletePageBreak( bColumn, true, &aAddr); - } + if (thisAddress.StartRow==0) + bColumn = true; + + ScAddress aAddr( static_cast<SCCOL>(thisAddress.StartColumn), thisAddress.StartRow, thisAddress.Sheet ); + uno::Reference< frame::XModel > xModel = pShell->GetModel(); + if ( xModel.is() ) + { + ScTabViewShell* pViewShell = excel::getBestViewShell( xModel ); + if ( nPageBreak == excel::XlPageBreak::xlPageBreakManual ) + pViewShell->InsertPageBreak( bColumn, true, &aAddr); + else if ( nPageBreak == excel::XlPageBreak::xlPageBreakNone ) + pViewShell->DeletePageBreak( bColumn, true, &aAddr); } } @@ -4250,19 +4250,19 @@ static ScDBData* lcl_GetDBData_Impl( ScDocShell* pDocShell, sal_Int16 nSheet ) static void lcl_SelectAll( ScDocShell* pDocShell, const ScQueryParam& aParam ) { - if ( pDocShell ) + if ( !pDocShell ) + return; + + ScViewData* pViewData = ScDocShell::GetViewData(); + if ( !pViewData ) { - ScViewData* pViewData = ScDocShell::GetViewData(); - if ( !pViewData ) - { - ScTabViewShell* pViewSh = pDocShell->GetBestViewShell( true ); - pViewData = pViewSh ? &pViewSh->GetViewData() : nullptr; - } + ScTabViewShell* pViewSh = pDocShell->GetBestViewShell( true ); + pViewData = pViewSh ? &pViewSh->GetViewData() : nullptr; + } - if ( pViewData ) - { - pViewData->GetView()->Query( aParam, nullptr, true ); - } + if ( pViewData ) + { + pViewData->GetView()->Query( aParam, nullptr, true ); } } @@ -4721,28 +4721,28 @@ ScVbaRange::Autofit() } return; } - // if the range is a not a row or column range autofit will - // throw an error + // if the range is a not a row or column range autofit will + // throw an error if ( !( mbIsColumns || mbIsRows ) ) DebugHelper::basicexception(ERRCODE_BASIC_METHOD_FAILED, OUString()); ScDocShell* pDocShell = getDocShellFromRange( mxRange ); - if ( pDocShell ) - { - RangeHelper thisRange( mxRange ); - table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress(); + if ( !pDocShell ) + return; - std::vector<sc::ColRowSpan> aColArr(1, sc::ColRowSpan(thisAddress.StartColumn,thisAddress.EndColumn)); - bool bDirection = true; - if ( mbIsRows ) - { - bDirection = false; - aColArr[0].mnStart = thisAddress.StartRow; - aColArr[0].mnEnd = thisAddress.EndRow; - } - pDocShell->GetDocFunc().SetWidthOrHeight( - bDirection, aColArr, thisAddress.Sheet, SC_SIZE_OPTIMAL, 0, true, true); + RangeHelper thisRange( mxRange ); + table::CellRangeAddress thisAddress = thisRange.getCellRangeAddressable()->getRangeAddress(); + + std::vector<sc::ColRowSpan> aColArr(1, sc::ColRowSpan(thisAddress.StartColumn,thisAddress.EndColumn)); + bool bDirection = true; + if ( mbIsRows ) + { + bDirection = false; + aColArr[0].mnStart = thisAddress.StartRow; + aColArr[0].mnEnd = thisAddress.EndRow; } + pDocShell->GetDocFunc().SetWidthOrHeight( + bDirection, aColArr, thisAddress.Sheet, SC_SIZE_OPTIMAL, 0, true, true); } uno::Any SAL_CALL diff --git a/sc/source/ui/vba/vbasheetobject.cxx b/sc/source/ui/vba/vbasheetobject.cxx index b5fdcd159c10..f7e1a45cee2d 100644 --- a/sc/source/ui/vba/vbasheetobject.cxx +++ b/sc/source/ui/vba/vbasheetobject.cxx @@ -353,19 +353,19 @@ void SAL_CALL ScVbaControlObjectBase::setOnAction( const OUString& rMacroName ) try { xEventMgr->revokeScriptEvent( nIndex, gaListenerType, gaEventMethod, OUString() ); } catch( uno::Exception& ) {} // if a macro name has been passed, try to attach it to the event - if( !rMacroName.isEmpty() ) - { - MacroResolvedInfo aResolvedMacro = resolveVBAMacro( getSfxObjShell( mxModel ), rMacroName ); - if( !aResolvedMacro.mbFound ) - throw uno::RuntimeException(); - script::ScriptEventDescriptor aDescriptor; - aDescriptor.ListenerType = gaListenerType; - aDescriptor.EventMethod = gaEventMethod; - aDescriptor.ScriptType = "Script"; - aDescriptor.ScriptCode = makeMacroURL( aResolvedMacro.msResolvedMacro ); - NotifyMacroEventRead(); - xEventMgr->registerScriptEvent( nIndex, aDescriptor ); - } + if( rMacroName.isEmpty() ) + return; + + MacroResolvedInfo aResolvedMacro = resolveVBAMacro( getSfxObjShell( mxModel ), rMacroName ); + if( !aResolvedMacro.mbFound ) + throw uno::RuntimeException(); + script::ScriptEventDescriptor aDescriptor; + aDescriptor.ListenerType = gaListenerType; + aDescriptor.EventMethod = gaEventMethod; + aDescriptor.ScriptType = "Script"; + aDescriptor.ScriptCode = makeMacroURL( aResolvedMacro.msResolvedMacro ); + NotifyMacroEventRead(); + xEventMgr->registerScriptEvent( nIndex, aDescriptor ); } sal_Bool SAL_CALL ScVbaControlObjectBase::getPrintObject() diff --git a/sc/source/ui/vba/vbaworksheet.cxx b/sc/source/ui/vba/vbaworksheet.cxx index 4b66c0a776ff..57aca4796e41 100644 --- a/sc/source/ui/vba/vbaworksheet.cxx +++ b/sc/source/ui/vba/vbaworksheet.cxx @@ -101,20 +101,20 @@ static void removeAllSheets( const uno::Reference <sheet::XSpreadsheetDocument>& uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets(); uno::Reference <container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY ); - if ( xIndex.is() ) - { - uno::Reference<container::XNameContainer> xNameContainer(xSheets,uno::UNO_QUERY_THROW); - for (sal_Int32 i = xIndex->getCount() -1; i>= 1; i--) - { - uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(i), uno::UNO_QUERY); - uno::Reference< container::XNamed > xNamed( xSheet, uno::UNO_QUERY_THROW ); - xNameContainer->removeByName(xNamed->getName()); - } + if ( !xIndex.is() ) + return; - uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(0), uno::UNO_QUERY); + uno::Reference<container::XNameContainer> xNameContainer(xSheets,uno::UNO_QUERY_THROW); + for (sal_Int32 i = xIndex->getCount() -1; i>= 1; i--) + { + uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(i), uno::UNO_QUERY); uno::Reference< container::XNamed > xNamed( xSheet, uno::UNO_QUERY_THROW ); - xNamed->setName(aSheetName); + xNameContainer->removeByName(xNamed->getName()); } + + uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(0), uno::UNO_QUERY); + uno::Reference< container::XNamed > xNamed( xSheet, uno::UNO_QUERY_THROW ); + xNamed->setName(aSheetName); } static uno::Reference<frame::XModel> @@ -381,23 +381,23 @@ void SAL_CALL ScVbaWorksheet::setAutoFilterMode( sal_Bool bAutoFilterMode ) ScDocShell* pDocShell = excel::getDocShell( xModel ); ScDocument& rDoc = pDocShell->GetDocument(); ScDBData* pDBData = rDoc.GetAnonymousDBData(getSheetID()); - if (pDBData) - { - pDBData->SetAutoFilter(bAutoFilterMode); - ScRange aRange; - pDBData->GetArea(aRange); - if (bAutoFilterMode) - rDoc.ApplyFlagsTab( aRange.aStart.Col(), aRange.aStart.Row(), - aRange.aEnd.Col(), aRange.aStart.Row(), - aRange.aStart.Tab(), ScMF::Auto ); - else if (!bAutoFilterMode) - rDoc.RemoveFlagsTab(aRange.aStart.Col(), aRange.aStart.Row(), - aRange.aEnd.Col(), aRange.aStart.Row(), - aRange.aStart.Tab(), ScMF::Auto ); - ScRange aPaintRange(aRange.aStart, aRange.aEnd); - aPaintRange.aEnd.SetRow(aPaintRange.aStart.Row()); - pDocShell->PostPaint(aPaintRange, PaintPartFlags::Grid); - } + if (!pDBData) + return; + + pDBData->SetAutoFilter(bAutoFilterMode); + ScRange aRange; + pDBData->GetArea(aRange); + if (bAutoFilterMode) + rDoc.ApplyFlagsTab( aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aStart.Row(), + aRange.aStart.Tab(), ScMF::Auto ); + else if (!bAutoFilterMode) + rDoc.RemoveFlagsTab(aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aStart.Row(), + aRange.aStart.Tab(), ScMF::Auto ); + ScRange aPaintRange(aRange.aStart, aRange.aEnd); + aPaintRange.aEnd.SetRow(aPaintRange.aStart.Row()); + pDocShell->PostPaint(aPaintRange, PaintPartFlags::Grid); } uno::Reference< excel::XRange > diff --git a/sc/source/ui/vba/vbaworksheets.cxx b/sc/source/ui/vba/vbaworksheets.cxx index be76009bc351..3953cb881815 100644 --- a/sc/source/ui/vba/vbaworksheets.cxx +++ b/sc/source/ui/vba/vbaworksheets.cxx @@ -491,44 +491,44 @@ void ScVbaWorksheets::PrintPreview( const css::uno::Any& /*EnableChanges*/ ) SfxViewFrame* pViewFrame = nullptr; if ( pViewShell ) pViewFrame = pViewShell->GetViewFrame(); - if ( pViewFrame ) - { - if ( !pViewFrame->GetFrame().IsInPlace() ) - { - dispatchExecute( pViewShell, SID_VIEWSHELL1 ); - SfxViewShell* pShell = SfxViewShell::Get( pViewFrame->GetFrame().GetFrameInterface()->getController() ); + if ( !pViewFrame ) + return; - if ( dynamic_cast<const ScPreviewShell*>( pShell) != nullptr ) - { - ScPreviewShell* pPrvShell = static_cast< ScPreviewShell* >( pShell ); - ScPreview* pPrvView = pPrvShell->GetPreview(); - const ScDocument& rDoc = *pViewShell->GetViewData().GetDocument(); - ScMarkData aMarkData(rDoc.GetSheetLimits()); - sal_Int32 nElems = getCount(); - for ( sal_Int32 nItem = 1; nItem <= nElems; ++nItem ) - { - uno::Reference< excel::XWorksheet > xSheet( Item( uno::makeAny( nItem ), uno::Any() ), uno::UNO_QUERY_THROW ); - ScVbaWorksheet* pSheet = excel::getImplFromDocModuleWrapper<ScVbaWorksheet>( xSheet ); - if ( pSheet ) - aMarkData.SelectTable(static_cast< SCTAB >( pSheet->getSheetID() ), true ); - } - // save old selection, setting the selectedtabs in the preview - // can affect the current selection when preview has been - // closed - ScMarkData::MarkedTabsType aOldTabs = pPrvView->GetSelectedTabs(); - pPrvView->SetSelectedTabs( aMarkData ); - // force update - pPrvView->DataChanged(false); - // set sensible first page - long nPage = pPrvView->GetFirstPage( 1 ); - pPrvView->SetPageNo( nPage ); - WaitUntilPreviewIsClosed( pViewFrame ); - // restore old tab selection - pViewShell = excel::getBestViewShell( mxModel ); - pViewShell->GetViewData().GetMarkData().SetSelectedTabs(aOldTabs); - } - } + if ( pViewFrame->GetFrame().IsInPlace() ) + return; + + dispatchExecute( pViewShell, SID_VIEWSHELL1 ); + SfxViewShell* pShell = SfxViewShell::Get( pViewFrame->GetFrame().GetFrameInterface()->getController() ); + + if ( dynamic_cast<const ScPreviewShell*>( pShell) == nullptr ) + return; + + ScPreviewShell* pPrvShell = static_cast< ScPreviewShell* >( pShell ); + ScPreview* pPrvView = pPrvShell->GetPreview(); + const ScDocument& rDoc = *pViewShell->GetViewData().GetDocument(); + ScMarkData aMarkData(rDoc.GetSheetLimits()); + sal_Int32 nElems = getCount(); + for ( sal_Int32 nItem = 1; nItem <= nElems; ++nItem ) + { + uno::Reference< excel::XWorksheet > xSheet( Item( uno::makeAny( nItem ), uno::Any() ), uno::UNO_QUERY_THROW ); + ScVbaWorksheet* pSheet = excel::getImplFromDocModuleWrapper<ScVbaWorksheet>( xSheet ); + if ( pSheet ) + aMarkData.SelectTable(static_cast< SCTAB >( pSheet->getSheetID() ), true ); } + // save old selection, setting the selectedtabs in the preview + // can affect the current selection when preview has been + // closed + ScMarkData::MarkedTabsType aOldTabs = pPrvView->GetSelectedTabs(); + pPrvView->SetSelectedTabs( aMarkData ); + // force update + pPrvView->DataChanged(false); + // set sensible first page + long nPage = pPrvView->GetFirstPage( 1 ); + pPrvView->SetPageNo( nPage ); + WaitUntilPreviewIsClosed( pViewFrame ); + // restore old tab selection + pViewShell = excel::getBestViewShell( mxModel ); + pViewShell->GetViewData().GetMarkData().SetSelectedTabs(aOldTabs); } commit 8c505204f25b509daa586c2d308fb870325c59b9 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Sun Aug 9 11:59:30 2020 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sun Aug 9 19:05:34 2020 +0200 loplugin:flatten in sc Change-Id: Iedb6ca37d1b006131d1fc77eca3303a12ccb60c9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100401 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 459de3fae64b..59e4ff1480bf 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -2737,11 +2737,12 @@ DynamicKernelSoPArguments::DynamicKernelSoPArguments(const ScCalcConfig& config, // explicitly claims it will handle this situation properly. if( pDVR->GetArrays().size() > 1 ) { - if( pCodeGen->canHandleMultiVector()) - SAL_INFO("sc.opencl", "multi-column DoubleRef"); - else + if( !pCodeGen->canHandleMultiVector()) throw UnhandledToken(("Function '" + pCodeGen->BinFuncName() + "' cannot handle multi-column DoubleRef").c_str(), __FILE__, __LINE__); + + SAL_INFO("sc.opencl", "multi-column DoubleRef"); + } // FIXME: The Right Thing to do would be to compare the accumulated kernel diff --git a/sc/source/core/opencl/op_statistical.cxx b/sc/source/core/opencl/op_statistical.cxx index 94415b39e41a..273f37dcc204 100644 --- a/sc/source/core/opencl/op_statistical.cxx +++ b/sc/source/core/opencl/op_statistical.cxx @@ -494,167 +494,73 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, ss << "}\n"; return ; } - if(vSubArguments.size() == 4) + if(vSubArguments.size() != 4) + return; + + FormulaToken *pCur = vSubArguments[0]->GetFormulaToken(); + FormulaToken *pCur1 = vSubArguments[1]->GetFormulaToken(); + FormulaToken *pCur2 = vSubArguments[2]->GetFormulaToken(); + FormulaToken *pCur3 = vSubArguments[3]->GetFormulaToken(); + assert(pCur); + assert(pCur1); + assert(pCur2); + assert(pCur3); + if(ocPush == vSubArguments[2]->GetFormulaToken()->GetOpCode()) { - FormulaToken *pCur = vSubArguments[0]->GetFormulaToken(); - FormulaToken *pCur1 = vSubArguments[1]->GetFormulaToken(); - FormulaToken *pCur2 = vSubArguments[2]->GetFormulaToken(); - FormulaToken *pCur3 = vSubArguments[3]->GetFormulaToken(); - assert(pCur); - assert(pCur1); - assert(pCur2); - assert(pCur3); - if(ocPush == vSubArguments[2]->GetFormulaToken()->GetOpCode()) + if(pCur2->GetType() == formula::svSingleVectorRef) { - if(pCur2->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken* pSVR = - static_cast< const formula::SingleVectorRefToken*>(pCur2); - ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; - ss << " {\n"; - ss << " mode = " ; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(mode))\n"; - ss << " mode = 0.0;\n"; - ss << " else\n"; - ss << " mode = floor(mode);\n"; - ss << " }\n"; - } - else if(pCur2->GetType() == formula::svDouble) - { - ss << " mode = floor(convert_double("; - ss << pCur2->GetDouble() << "));\n"; - } - else - { - ss << " return DBL_MAX;\n"; - ss << "}\n"; - return ; - } + const formula::SingleVectorRefToken* pSVR = + static_cast< const formula::SingleVectorRefToken*>(pCur2); + ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; + ss << " {\n"; + ss << " mode = " ; + ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; + ss << " if (isnan(mode))\n"; + ss << " mode = 0.0;\n"; + ss << " else\n"; + ss << " mode = floor(mode);\n"; + ss << " }\n"; } - else + else if(pCur2->GetType() == formula::svDouble) { - ss << " mode = floor(" ; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ");\n"; + ss << " mode = floor(convert_double("; + ss << pCur2->GetDouble() << "));\n"; } - ss << " if(!(mode == 1.0 || mode == 2.0))\n"; - ss << " return DBL_MAX;\n"; - if(ocPush==vSubArguments[3]->GetFormulaToken()->GetOpCode()) + else { - if(pCur3->GetType() == formula::svSingleVectorRef) - { - const formula::SingleVectorRefToken* pSVR = - static_cast< const formula::SingleVectorRefToken*>(pCur3); - assert(pSVR); - ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; - ss << " {\n"; - ss << " if (isnan("; - ss << vSubArguments[3]->GenSlidingWindowDeclRef() << "))\n"; - ss << " type=0.0;\n"; - ss << " else\n"; - ss << " type=floor("; - ss << vSubArguments[3]->GenSlidingWindowDeclRef() << ");\n"; - ss << " }\n"; - } - else if(pCur3->GetType() == formula::svDouble) - { - ss << " type = floor(convert_double(" << pCur3->GetDouble() << - "));\n"; - } - else - { - ss << " return DBL_MAX;\n"; - ss << "}\n"; - return ; - } + ss << " return DBL_MAX;\n"; + ss << "}\n"; + return ; } - else + } + else + { + ss << " mode = floor(" ; + ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ");\n"; + } + ss << " if(!(mode == 1.0 || mode == 2.0))\n"; + ss << " return DBL_MAX;\n"; + if(ocPush==vSubArguments[3]->GetFormulaToken()->GetOpCode()) + { + if(pCur3->GetType() == formula::svSingleVectorRef) { - ss << " type=floor("; + const formula::SingleVectorRefToken* pSVR = + static_cast< const formula::SingleVectorRefToken*>(pCur3); + assert(pSVR); + ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; + ss << " {\n"; + ss << " if (isnan("; + ss << vSubArguments[3]->GenSlidingWindowDeclRef() << "))\n"; + ss << " type=0.0;\n"; + ss << " else\n"; + ss << " type=floor("; ss << vSubArguments[3]->GenSlidingWindowDeclRef() << ");\n"; + ss << " }\n"; } - ss << " if(!(type == 1.0||type == 2.0||type == 3.0))\n"; - ss << " return DBL_MAX;\n"; - - if(pCur->GetType() == formula::svDoubleVectorRef && - pCur1->GetType() == formula::svDoubleVectorRef) + else if(pCur3->GetType() == formula::svDouble) { - const formula::DoubleVectorRefToken* pDVR = - static_cast<const formula::DoubleVectorRefToken *>(pCur); - const formula::DoubleVectorRefToken* pDVR1 = - static_cast<const formula::DoubleVectorRefToken *>(pCur1); - - size_t nCurWindowSize = pDVR->GetRefRowSize(); - size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); - - if(nCurWindowSize == nCurWindowSize1) - { - ss << " if(type == 1.0)\n"; - ss << " {\n"; - ss << " for (int i = "; - if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) && - (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "gid0; i < " << pDVR->GetArrayLength(); - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && - (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i < " << pDVR->GetArrayLength(); - ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && - (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i + gid0 < " << pDVR->GetArrayLength(); - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) && - (pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "0; i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else - { - ss << "0; i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - ss << " break;\n"; - ss << " }"; - ss << " return DBL_MAX;\n"; - ss << " }\n"; - ss << "}\n"; - return ; - } - - ss << " arg1 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " arg2 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " if (isnan(arg1)||isnan(arg2))\n"; - ss << " continue;\n"; - ss << " fSum1 += arg1;\n"; - ss << " fSum2 += arg2;\n"; - ss << " fSumSqr1 += (arg1 - arg2)*(arg1 - arg2);\n"; - ss << " fCount1 += 1;\n"; - ss << " }\n"; - ss << " if(fCount1 < 1.0)\n"; - ss << " return DBL_MAX;\n"; - ss << " fT = sqrt(fCount1-1.0) * fabs(fSum1 - fSum2)\n"; - ss << " /sqrt(fCount1 * fSumSqr1 - (fSum1-fSum2)\n"; - ss << " *(fSum1-fSum2));\n"; - ss << " fF = fCount1 - 1.0;\n"; - } - else - { - ss << " return DBL_MAX;\n"; - ss << "}\n"; - return ; - } + ss << " type = floor(convert_double(" << pCur3->GetDouble() << + "));\n"; } else { @@ -662,131 +568,225 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, ss << "}\n"; return ; } - ss << " }\n"; - ss << " if(type == 2.0 || type == 3.0)\n"; - ss << " {\n"; + } + else + { + ss << " type=floor("; + ss << vSubArguments[3]->GenSlidingWindowDeclRef() << ");\n"; + } + ss << " if(!(type == 1.0||type == 2.0||type == 3.0))\n"; + ss << " return DBL_MAX;\n"; - if(pCur->GetType() == formula::svDoubleVectorRef && - pCur1->GetType() == formula::svDoubleVectorRef) - { - const formula::DoubleVectorRefToken* pDVR = - static_cast<const formula::DoubleVectorRefToken *>(pCur); - const formula::DoubleVectorRefToken* pDVR1 = - static_cast<const formula::DoubleVectorRefToken *>(pCur1); + if(pCur->GetType() == formula::svDoubleVectorRef && + pCur1->GetType() == formula::svDoubleVectorRef) + { + const formula::DoubleVectorRefToken* pDVR = + static_cast<const formula::DoubleVectorRefToken *>(pCur); + const formula::DoubleVectorRefToken* pDVR1 = + static_cast<const formula::DoubleVectorRefToken *>(pCur1); + + size_t nCurWindowSize = pDVR->GetRefRowSize(); + size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); - size_t nCurWindowSize = pDVR->GetRefRowSize(); - size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); + if(nCurWindowSize == nCurWindowSize1) + { + ss << " if(type == 1.0)\n"; + ss << " {\n"; ss << " for (int i = "; - if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) + if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) && + (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) { ss << "gid0; i < " << pDVR->GetArrayLength(); ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; } - else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && + (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) { ss << "0; i < " << pDVR->GetArrayLength(); ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; ss << " {\n"; } - else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) && + (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) { ss << "0; i + gid0 < " << pDVR->GetArrayLength(); ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; } - else + else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) && + (pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) { ss << "0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; } - - ss << " arg1 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " if (isnan(arg1))\n"; - ss << " continue;\n"; - ss << " fSum1 += arg1;\n"; - ss << " fSumSqr1 += arg1 * arg1;\n"; - ss << " fCount1 += 1;\n"; - ss << " }\n"; - - ss << " for (int i = "; - if (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed()) - { - ss << "gid0; i < " << pDVR1->GetArrayLength(); - ss << " && i < " << nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } - else if (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) - { - ss << "0; i < " << pDVR1->GetArrayLength(); - ss << " && i < gid0+"<< nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } - else if (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) - { - ss << "0; i + gid0 < " << pDVR1->GetArrayLength(); - ss << " && i < " << nCurWindowSize1 << "; i++)\n"; - ss << " {\n"; - } else { - ss << "0; i < " << nCurWindowSize1 << "; i++)\n"; + ss << "0; i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; + ss << " break;\n"; + ss << " }"; + ss << " return DBL_MAX;\n"; + ss << " }\n"; + ss << "}\n"; + return ; } + + ss << " arg1 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; ss << " arg2 = "; ss << vSubArguments[1]->GenSlidingWindowDeclRef(true) << ";\n"; - ss << " if (isnan(arg2))\n"; + ss << " if (isnan(arg1)||isnan(arg2))\n"; ss << " continue;\n"; + ss << " fSum1 += arg1;\n"; ss << " fSum2 += arg2;\n"; - ss << " fSumSqr2 += arg2 * arg2;\n"; - ss << " fCount2 += 1;\n"; + ss << " fSumSqr1 += (arg1 - arg2)*(arg1 - arg2);\n"; + ss << " fCount1 += 1;\n"; ss << " }\n"; + ss << " if(fCount1 < 1.0)\n"; + ss << " return DBL_MAX;\n"; + ss << " fT = sqrt(fCount1-1.0) * fabs(fSum1 - fSum2)\n"; + ss << " /sqrt(fCount1 * fSumSqr1 - (fSum1-fSum2)\n"; + ss << " *(fSum1-fSum2));\n"; + ss << " fF = fCount1 - 1.0;\n"; } else { - ss << " return DBL_MAX;\n"; - ss << " }\n"; + ss << " return DBL_MAX;\n"; ss << "}\n"; return ; } - ss << " if (fCount1 < 2.0 || fCount2 < 2.0)\n"; - ss << " return DBL_MAX;\n"; - ss << " }\n"; - ss << " if(type == 3.0)\n"; - ss << " {\n"; - ss << " double fS1 = (fSumSqr1-fSum1*fSum1/fCount1)\n"; - ss << " /(fCount1-1.0)/fCount1;\n"; - ss << " double fS2 = (fSumSqr2-fSum2*fSum2/fCount2)\n"; - ss << " /(fCount2-1.0)/fCount2;\n"; - ss << " if (fS1 + fS2 == 0.0)\n"; - ss << " return DBL_MAX;\n"; - ss << " fT = fabs(fSum1/fCount1 - fSum2/fCount2)\n"; - ss << " /sqrt(fS1+fS2);\n"; - ss << " double c = fS1/(fS1+fS2);\n"; - ss << " fF = 1.0/(c*c/(fCount1-1.0)+(1.0-c)*(1.0-c)\n"; - ss << " /(fCount2-1.0));\n"; - ss << " }\n"; - ss << " if(type == 2.0)\n"; - ss << " {\n"; - ss << " double fS1 = (fSumSqr1 - fSum1*fSum1/fCount1)\n"; - ss << " /(fCount1 - 1.0);\n"; - ss << " double fS2 = (fSumSqr2 - fSum2*fSum2/fCount2)\n"; - ss << " /(fCount2 - 1.0);\n"; - ss << " fT = fabs( fSum1/fCount1 - fSum2/fCount2 )\n"; - ss << " /sqrt( (fCount1-1.0)*fS1 + (fCount2-1.0)*fS2 )\n"; - ss << " *sqrt( fCount1*fCount2*(fCount1+fCount2-2)\n"; - ss << " /(fCount1+fCount2) );\n"; - ss << " fF = fCount1 + fCount2 - 2;\n"; - ss << " }\n"; + } + else + { + ss << " return DBL_MAX;\n"; + ss << "}\n"; + return ; + } + ss << " }\n"; + ss << " if(type == 2.0 || type == 3.0)\n"; + ss << " {\n"; - ss << " double tdist=GetTDist(fT, fF);\n"; - ss << " if (mode==1)\n"; - ss << " return tdist;\n"; - ss << " else\n"; - ss << " return 2.0*tdist;\n"; + if(pCur->GetType() == formula::svDoubleVectorRef && + pCur1->GetType() == formula::svDoubleVectorRef) + { + const formula::DoubleVectorRefToken* pDVR = + static_cast<const formula::DoubleVectorRefToken *>(pCur); + const formula::DoubleVectorRefToken* pDVR1 = + static_cast<const formula::DoubleVectorRefToken *>(pCur1); + + size_t nCurWindowSize = pDVR->GetRefRowSize(); + size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); + ss << " for (int i = "; + if (!pDVR->IsStartFixed() && pDVR->IsEndFixed()) + { + ss << "gid0; i < " << pDVR->GetArrayLength(); + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if (pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + { + ss << "0; i < " << pDVR->GetArrayLength(); + ss << " && i < gid0+"<< nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if (!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + { + ss << "0; i + gid0 < " << pDVR->GetArrayLength(); + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else + { + ss << "0; i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + + ss << " arg1 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef(true) << ";\n"; + ss << " if (isnan(arg1))\n"; + ss << " continue;\n"; + ss << " fSum1 += arg1;\n"; + ss << " fSumSqr1 += arg1 * arg1;\n"; + ss << " fCount1 += 1;\n"; + ss << " }\n"; + + ss << " for (int i = "; + if (!pDVR1->IsStartFixed() && pDVR1->IsEndFixed()) + { + ss << "gid0; i < " << pDVR1->GetArrayLength(); + ss << " && i < " << nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + else if (pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) + { + ss << "0; i < " << pDVR1->GetArrayLength(); + ss << " && i < gid0+"<< nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + else if (!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed()) + { + ss << "0; i + gid0 < " << pDVR1->GetArrayLength(); + ss << " && i < " << nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + else + { + ss << "0; i < " << nCurWindowSize1 << "; i++)\n"; + ss << " {\n"; + } + ss << " arg2 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef(true) << ";\n"; + ss << " if (isnan(arg2))\n"; + ss << " continue;\n"; + ss << " fSum2 += arg2;\n"; + ss << " fSumSqr2 += arg2 * arg2;\n"; + ss << " fCount2 += 1;\n"; + ss << " }\n"; + } + else + { + ss << " return DBL_MAX;\n"; + ss << " }\n"; ss << "}\n"; + return ; } + ss << " if (fCount1 < 2.0 || fCount2 < 2.0)\n"; + ss << " return DBL_MAX;\n"; + ss << " }\n"; + ss << " if(type == 3.0)\n"; + ss << " {\n"; + ss << " double fS1 = (fSumSqr1-fSum1*fSum1/fCount1)\n"; + ss << " /(fCount1-1.0)/fCount1;\n"; + ss << " double fS2 = (fSumSqr2-fSum2*fSum2/fCount2)\n"; + ss << " /(fCount2-1.0)/fCount2;\n"; + ss << " if (fS1 + fS2 == 0.0)\n"; + ss << " return DBL_MAX;\n"; + ss << " fT = fabs(fSum1/fCount1 - fSum2/fCount2)\n"; + ss << " /sqrt(fS1+fS2);\n"; + ss << " double c = fS1/(fS1+fS2);\n"; + ss << " fF = 1.0/(c*c/(fCount1-1.0)+(1.0-c)*(1.0-c)\n"; + ss << " /(fCount2-1.0));\n"; + ss << " }\n"; + ss << " if(type == 2.0)\n"; + ss << " {\n"; + ss << " double fS1 = (fSumSqr1 - fSum1*fSum1/fCount1)\n"; + ss << " /(fCount1 - 1.0);\n"; + ss << " double fS2 = (fSumSqr2 - fSum2*fSum2/fCount2)\n"; + ss << " /(fCount2 - 1.0);\n"; + ss << " fT = fabs( fSum1/fCount1 - fSum2/fCount2 )\n"; + ss << " /sqrt( (fCount1-1.0)*fS1 + (fCount2-1.0)*fS2 )\n"; + ss << " *sqrt( fCount1*fCount2*(fCount1+fCount2-2)\n"; + ss << " /(fCount1+fCount2) );\n"; + ss << " fF = fCount1 + fCount2 - 2;\n"; + ss << " }\n"; + + ss << " double tdist=GetTDist(fT, fF);\n"; + ss << " if (mode==1)\n"; + ss << " return tdist;\n"; + ss << " else\n"; + ss << " return 2.0*tdist;\n"; + ss << "}\n"; } void OpVarP::GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) @@ -2572,122 +2572,121 @@ void OpSlope::GenSlidingWindowFunction(std::stringstream &ss, FormulaToken *pCur1 = vSubArguments[0]->GetFormulaToken(); assert(pCur); assert(pCur1); - if (pCur->GetType() == formula::svDoubleVectorRef&& - pCur1->GetType() == formula::svDoubleVectorRef) + if (pCur->GetType() != formula::svDoubleVectorRef || + pCur1->GetType() != formula::svDoubleVectorRef) { - const formula::DoubleVectorRefToken* pDVR = - static_cast<const formula::DoubleVectorRefToken *>(pCur); - const formula::DoubleVectorRefToken* pDVR1 = - static_cast<const formula::DoubleVectorRefToken *>(pCur1); - - size_t nCurWindowSize = pDVR->GetRefRowSize(); - size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); - size_t arrayLength = pDVR->GetArrayLength()< - pDVR1->GetArrayLength() ? pDVR->GetArrayLength(): - pDVR1->GetArrayLength(); - if(nCurWindowSize != nCurWindowSize1) - throw Unhandled(__FILE__, __LINE__); - ss << " for (int i = "; - if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "gid0; i < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i < " << arrayLength ; - ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i + gid0 < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) - &&(pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "0; i < " << arrayLength << "; i++)\n"; - ss << " {\n"; - } - else - { - throw Unhandled(__FILE__, __LINE__); - } + throw Unhandled(__FILE__, __LINE__); + } - ss << " argX = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " argY = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(argX) || isnan(argY))\n"; - ss << " continue;\n"; - ss << " fSumX += argX;\n"; - ss << " fSumY += argY;\n"; - ss << " fCount += 1.0;\n"; - ss << " }\n"; + const formula::DoubleVectorRefToken* pDVR = + static_cast<const formula::DoubleVectorRefToken *>(pCur); + const formula::DoubleVectorRefToken* pDVR1 = + static_cast<const formula::DoubleVectorRefToken *>(pCur1); - ss << " if (fCount < 1.0)\n"; - ss << " return CreateDoubleError(NoValue);\n"; - ss << " else\n"; + size_t nCurWindowSize = pDVR->GetRefRowSize(); + size_t nCurWindowSize1 = pDVR1->GetRefRowSize(); + size_t arrayLength = pDVR->GetArrayLength()< + pDVR1->GetArrayLength() ? pDVR->GetArrayLength(): + pDVR1->GetArrayLength(); + if(nCurWindowSize != nCurWindowSize1) + throw Unhandled(__FILE__, __LINE__); + ss << " for (int i = "; + if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "gid0; i < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; - ss << " fMeanX = fSumX * pow(fCount,-1.0);\n"; - ss << " fMeanY = fSumY * pow(fCount,-1.0);\n"; + } + else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i < " << arrayLength ; + ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i + gid0 < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && pDVR->IsEndFixed()) + &&(pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "0; i < " << arrayLength << "; i++)\n"; + ss << " {\n"; + } + else + { + throw Unhandled(__FILE__, __LINE__); + } - ss << " for (int i = "; - if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) - { - ss << "gid0; i < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i < " << arrayLength ; - ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) - &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) - { - ss << "0; i + gid0 < " << arrayLength; - ss << " && i < " << nCurWindowSize << "; i++)\n"; - ss << " {\n"; - } - else - { - ss << "0; i < " << arrayLength << "; i++)\n"; - ss << " {\n"; - } + ss << " argX = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " argY = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " if (isnan(argX) || isnan(argY))\n"; + ss << " continue;\n"; + ss << " fSumX += argX;\n"; + ss << " fSumY += argY;\n"; + ss << " fCount += 1.0;\n"; + ss << " }\n"; - ss << " argX = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " argY = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " if (isnan(argX) || isnan(argY))\n"; - ss << " continue;\n"; - ss << " fSumDeltaXDeltaY += (argX-fMeanX)*(argY-fMeanY);\n"; - ss << " fSumSqrDeltaX += (argX-fMeanX) * (argX-fMeanX);\n"; - ss << " }\n"; - ss << " if(fSumSqrDeltaX == 0.0)\n"; - ss << " return CreateDoubleError(DivisionByZero);\n"; - ss << " else\n"; + ss << " if (fCount < 1.0)\n"; + ss << " return CreateDoubleError(NoValue);\n"; + ss << " else\n"; + ss << " {\n"; + ss << " fMeanX = fSumX * pow(fCount,-1.0);\n"; + ss << " fMeanY = fSumY * pow(fCount,-1.0);\n"; + + ss << " for (int i = "; + if ((!pDVR->IsStartFixed() && pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && pDVR1->IsEndFixed())) + { + ss << "gid0; i < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i < " << arrayLength ; + ss << " && i < gid0+" << nCurWindowSize << "; i++)\n"; + ss << " {\n"; + } + else if ((!pDVR->IsStartFixed() && !pDVR->IsEndFixed()) + &&(!pDVR1->IsStartFixed() && !pDVR1->IsEndFixed())) + { + ss << "0; i + gid0 < " << arrayLength; + ss << " && i < " << nCurWindowSize << "; i++)\n"; ss << " {\n"; - ss << " return fSumDeltaXDeltaY*pow(fSumSqrDeltaX,-1.0);\n"; - ss << " }\n"; - ss << " }\n"; - ss << "}\n"; } else { - throw Unhandled(__FILE__, __LINE__); + ss << "0; i < " << arrayLength << "; i++)\n"; + ss << " {\n"; } + + ss << " argX = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " argY = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " if (isnan(argX) || isnan(argY))\n"; + ss << " continue;\n"; + ss << " fSumDeltaXDeltaY += (argX-fMeanX)*(argY-fMeanY);\n"; + ss << " fSumSqrDeltaX += (argX-fMeanX) * (argX-fMeanX);\n"; + ss << " }\n"; + ss << " if(fSumSqrDeltaX == 0.0)\n"; + ss << " return CreateDoubleError(DivisionByZero);\n"; + ss << " else\n"; + ss << " {\n"; + ss << " return fSumDeltaXDeltaY*pow(fSumSqrDeltaX,-1.0);\n"; + ss << " }\n"; + ss << " }\n"; + ss << "}\n"; + } void OpSTEYX::GenSlidingWindowFunction(std::stringstream &ss, const std::string &sSymName, SubArguments &vSubArguments) @@ -6874,193 +6873,192 @@ void OpCovar::GenSlidingWindowFunction(std::stringstream& ss, static_cast<const formula::DoubleVectorRefToken* >(pCurY); size_t nCurWindowSizeX = pCurDVRX->GetRefRowSize(); size_t nCurWindowSizeY = pCurDVRY->GetRefRowSize(); - if(nCurWindowSizeX == nCurWindowSizeY) - { - ss << " for( "; - if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = gid0; i < " << nCurWindowSizeX; - ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++){\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << "}\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; - ss << " i < " << pCurDVRX->GetArrayLength() << " && "; - ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; - ss << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - else { - ss << "int i = 0; i < " << nCurWindowSizeX << " && "; - ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); - ss << " && i + gid0 < " << pCurDVRY->GetArrayLength(); - ss << "; i++) {\n"; - ss << "if ((isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; - ss << "(isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << "))) {\n"; - ss << " arg0 = 0.0;\n"; - ss << " arg1 = 0.0;\n"; - ss << " --cnt;\n"; - ss << " }\n"; - ss << " else {\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " }\n"; - ss << " ++cnt;\n"; - ss << " vSum0 += arg0;\n"; - ss << " vSum1 += arg1;\n"; - ss << " }\n"; - } - ss << " if(cnt < 1) {\n"; - ss << " return CreateDoubleError(NoValue);\n"; + if(nCurWindowSizeX != nCurWindowSizeY) + { + throw Unhandled(__FILE__, __LINE__); + } + + ss << " for( "; + if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = gid0; i < " << nCurWindowSizeX; + ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++){\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << "}\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; ss << " }\n"; - ss << " else {\n"; - ss << " vMean0 = vSum0 / cnt;\n"; - ss << " vMean1 = vSum1 / cnt;\n"; - ss << " for("; - if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = gid0; i < " << nCurWindowSizeX; - ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++){\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; - ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")){\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << " else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; - ss << " i < " << pCurDVRX->GetArrayLength() << " && "; - ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; - ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; - ss << " }\n"; - } - else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { - ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; - ss << pCurDVRX->GetArrayLength() << " && i < "; - ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; - ss << " if(isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; - ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << ")) {\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << "else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; - ss << " }\n"; - } - else { - ss << "int i = 0; i < " << nCurWindowSizeX << " && "; - ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); - ss << " && i + gid0 < " << pCurDVRX->GetArrayLength(); - ss << "; i++) {\n"; - ss << "if((isnan("; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; - ss << "(isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); - ss << "))) {\n"; - ss << " arg0 = vMean0;\n"; - ss << " arg1 = vMean1;\n"; - ss << " }\n"; - ss << " else{\n"; - ss << " arg0 = "; - ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; - ss << " arg1 = "; - ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; - ss << " }\n"; - ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; - ss << " }\n"; - } - ss << " return vSum / cnt;\n"; + } + else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; + ss << " i < " << pCurDVRX->GetArrayLength() << " && "; + ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; ss << " }\n"; - ss << "}"; } - else - { - throw Unhandled(__FILE__, __LINE__); + else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; + ss << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; + ss << " }\n"; } + else { + ss << "int i = 0; i < " << nCurWindowSizeX << " && "; + ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); + ss << " && i + gid0 < " << pCurDVRY->GetArrayLength(); + ss << "; i++) {\n"; + ss << "if ((isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; + ss << "(isnan("<< vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << "))) {\n"; + ss << " arg0 = 0.0;\n"; + ss << " arg1 = 0.0;\n"; + ss << " --cnt;\n"; + ss << " }\n"; + ss << " else {\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " }\n"; + ss << " ++cnt;\n"; + ss << " vSum0 += arg0;\n"; + ss << " vSum1 += arg1;\n"; + ss << " }\n"; + } + ss << " if(cnt < 1) {\n"; + ss << " return CreateDoubleError(NoValue);\n"; + ss << " }\n"; + ss << " else {\n"; + ss << " vMean0 = vSum0 / cnt;\n"; + ss << " vMean1 = vSum1 / cnt;\n"; + ss << " for("; + if (!pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = gid0; i < " << nCurWindowSizeX; + ss << " && i < " << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++){\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") ||"; + ss << " isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")){\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << " else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + else if (pCurDVRX->IsStartFixed() && !pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < gid0 + " << nCurWindowSizeX << " && "; + ss << " i < " << pCurDVRX->GetArrayLength() << " && "; + ss << " i < " << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; + ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + else if (pCurDVRX->IsStartFixed() && pCurDVRX->IsEndFixed()) { + ss << "int i = 0; i < " << nCurWindowSizeX << " && i < "; + ss << pCurDVRX->GetArrayLength() << " && i < "; + ss << pCurDVRY->GetArrayLength() << "; i++) {\n"; + ss << " if(isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ") || "; + ss << "isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << ")) {\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << "else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";}\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + else { + ss << "int i = 0; i < " << nCurWindowSizeX << " && "; + ss << " i + gid0 < " << pCurDVRX->GetArrayLength(); + ss << " && i + gid0 < " << pCurDVRX->GetArrayLength(); + ss << "; i++) {\n"; + ss << "if((isnan("; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ")) || "; + ss << "(isnan(" << vSubArguments[1]->GenSlidingWindowDeclRef(); + ss << "))) {\n"; + ss << " arg0 = vMean0;\n"; + ss << " arg1 = vMean1;\n"; + ss << " }\n"; + ss << " else{\n"; + ss << " arg0 = "; + ss << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n"; + ss << " arg1 = "; + ss << vSubArguments[1]->GenSlidingWindowDeclRef() << ";\n"; + ss << " }\n"; + ss << " vSum += (arg0 - vMean0) * (arg1 - vMean1);\n"; + ss << " }\n"; + } + ss << " return vSum / cnt;\n"; + ss << " }\n"; + ss << "}"; + } else { ss << " int cnt0 = 0,cnt1 = 0;\n"; diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx index 7755610a14f3..e197ea002bb3 100644 --- a/sc/source/core/opencl/opbase.cxx +++ b/sc/source/core/opencl/opbase.cxx @@ -251,23 +251,22 @@ void CheckVariables::CheckSubArgumentIsNan( std::stringstream& ss, ss << vSubArguments[i]->GenSlidingWindowDeclRef(); ss << ";\n"; } - if (vSubArguments[i]->GetFormulaToken()->GetType() == formula::svDouble || - vSubArguments[i]->GetFormulaToken()->GetOpCode() != ocPush) - { - ss << " if("; - ss << "isnan("; - ss << vSubArguments[i]->GenSlidingWindowDeclRef(); - ss << "))\n"; - ss << " tmp"; - ss << i; - ss << "=0;\n else \n"; - ss << " tmp"; - ss << i; - ss << "="; - ss << vSubArguments[i]->GenSlidingWindowDeclRef(); - ss << ";\n"; + if (vSubArguments[i]->GetFormulaToken()->GetType() != formula::svDouble && + vSubArguments[i]->GetFormulaToken()->GetOpCode() == ocPush) + return; - } + ss << " if("; + ss << "isnan("; + ss << vSubArguments[i]->GenSlidingWindowDeclRef(); + ss << "))\n"; + ss << " tmp"; + ss << i; + ss << "=0;\n else \n"; + ss << " tmp"; + ss << i; + ss << "="; + ss << vSubArguments[i]->GenSlidingWindowDeclRef(); + ss << ";\n"; } diff --git a/sc/source/core/tool/formulalogger.cxx b/sc/source/core/tool/formulalogger.cxx index cb072c7a4ef8..3f600cdb9743 100644 --- a/sc/source/core/tool/formulalogger.cxx +++ b/sc/source/core/tool/formulalogger.cxx @@ -75,20 +75,20 @@ struct FormulaLogger::GroupScope::Impl { ++mrLogger.mnNestLevel; - if (mbOutputEnabled) - { - sc::TokenStringContext aCxt(&rDoc, rDoc.GetGrammar()); - OUString aFormula = rCell.GetCode()->CreateString(aCxt, rCell.aPos); + if (!mbOutputEnabled) + return; - mrLogger.write(maPrefix); - mrLogger.writeNestLevel(); + sc::TokenStringContext aCxt(&rDoc, rDoc.GetGrammar()); + OUString aFormula = rCell.GetCode()->CreateString(aCxt, rCell.aPos); - mrLogger.writeAscii("-- enter (formula='"); - mrLogger.write(aFormula); - mrLogger.writeAscii("', size="); - mrLogger.write(rCell.GetSharedLength()); - mrLogger.writeAscii(")\n"); - } + mrLogger.write(maPrefix); + mrLogger.writeNestLevel(); + + mrLogger.writeAscii("-- enter (formula='"); + mrLogger.write(aFormula); + mrLogger.writeAscii("', size="); + mrLogger.write(rCell.GetSharedLength()); + mrLogger.writeAscii(")\n"); } ~Impl() diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx index 9127f879d17a..dea6561288a6 100644 --- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx @@ -132,19 +132,19 @@ void ScRandomNumberGeneratorDialog::Close() void ScRandomNumberGeneratorDialog::SetReference( const ScRange& rReferenceRange, ScDocument& rDoc ) { - if (mxInputRangeEdit->GetWidget()->get_sensitive()) - { - if ( rReferenceRange.aStart != rReferenceRange.aEnd ) - RefInputStart(mxInputRangeEdit.get()); + if (!mxInputRangeEdit->GetWidget()->get_sensitive()) + return; - maInputRange = rReferenceRange; + if ( rReferenceRange.aStart != rReferenceRange.aEnd ) + RefInputStart(mxInputRangeEdit.get()); - OUString aReferenceString(maInputRange.Format(rDoc, ScRefFlags::RANGE_ABS_3D, rDoc.GetAddressConvention())); - mxInputRangeEdit->SetRefString( aReferenceString ); + maInputRange = rReferenceRange; - mxButtonApply->set_sensitive(true); - mxButtonOk->set_sensitive(true); - } ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits