[Libreoffice-commits] core.git: chart2/source

Tomaž Vajngerl tomaz.vajngerl at collabora.co.uk
Mon Feb 27 17:36:05 UTC 2017


 chart2/source/view/charttypes/VSeriesPlotter.cxx |  208 +++++++----------------
 1 file changed, 71 insertions(+), 137 deletions(-)

New commits:
commit a57a890f286d9f63d0c2a1d23f7fac7092681a63
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Mon Feb 27 17:12:54 2017 +0100

    chart: use c++11 for-statement in VSeriesPlotter
    
    This makes the code much more readable..
    
    Change-Id: Ic9078daffeba28984749c61d059701b3cdcca8bd
    Reviewed-on: https://gerrit.libreoffice.org/34687
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index 9b4b3fa..bd17a54 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -118,11 +118,9 @@ VDataSeriesGroup::~VDataSeriesGroup()
 void VDataSeriesGroup::deleteSeries()
 {
     //delete all data series help objects:
-    std::vector< VDataSeries* >::const_iterator aIter = m_aSeriesVector.begin();
-    const std::vector< VDataSeries* >::const_iterator aEnd  = m_aSeriesVector.end();
-    for( ; aIter != aEnd; ++aIter )
+    for (VDataSeries* pSeries : m_aSeriesVector)
     {
-        delete *aIter;
+        delete pSeries;
     }
     m_aSeriesVector.clear();
 }
@@ -158,17 +156,13 @@ VSeriesPlotter::VSeriesPlotter( const uno::Reference<XChartType>& xChartTypeMode
 VSeriesPlotter::~VSeriesPlotter()
 {
     //delete all data series help objects:
-    std::vector< std::vector< VDataSeriesGroup > >::iterator             aZSlotIter = m_aZSlots.begin();
-    const std::vector< std::vector< VDataSeriesGroup > >::const_iterator  aZSlotEnd = m_aZSlots.end();
-    for( ; aZSlotIter != aZSlotEnd; ++aZSlotIter )
+    for (std::vector<VDataSeriesGroup>  & rGroupVector : m_aZSlots)
     {
-        std::vector< VDataSeriesGroup >::iterator             aXSlotIter = aZSlotIter->begin();
-        const std::vector< VDataSeriesGroup >::const_iterator aXSlotEnd = aZSlotIter->end();
-        for( ; aXSlotIter != aXSlotEnd; ++aXSlotIter )
+        for (VDataSeriesGroup & rGroup : rGroupVector)
         {
-            aXSlotIter->deleteSeries();
+            rGroup.deleteSeries();
         }
-        aZSlotIter->clear();
+        rGroupVector.clear();
     }
     m_aZSlots.clear();
 
@@ -271,23 +265,13 @@ drawing::Direction3D VSeriesPlotter::getPreferredDiagramAspectRatio() const
 
 void VSeriesPlotter::releaseShapes()
 {
-    std::vector< std::vector< VDataSeriesGroup > >::iterator             aZSlotIter = m_aZSlots.begin();
-    const std::vector< std::vector< VDataSeriesGroup > >::const_iterator aZSlotEnd = m_aZSlots.end();
-    for( ; aZSlotIter != aZSlotEnd; ++aZSlotIter )
+    for (std::vector<VDataSeriesGroup> const & rGroupVector :  m_aZSlots)
     {
-        std::vector< VDataSeriesGroup >::iterator             aXSlotIter = aZSlotIter->begin();
-        const std::vector< VDataSeriesGroup >::const_iterator aXSlotEnd = aZSlotIter->end();
-        for( ; aXSlotIter != aXSlotEnd; ++aXSlotIter )
+        for (VDataSeriesGroup const & rGroup : rGroupVector)
         {
-            std::vector< VDataSeries* >* pSeriesList = &(aXSlotIter->m_aSeriesVector);
-
-            std::vector< VDataSeries* >::iterator             aSeriesIter = pSeriesList->begin();
-            const std::vector< VDataSeries* >::const_iterator aSeriesEnd  = pSeriesList->end();
-
             //iterate through all series in this x slot
-            for( ; aSeriesIter != aSeriesEnd; ++aSeriesIter )
+            for (VDataSeries* pSeries : rGroup.m_aSeriesVector)
             {
-                VDataSeries* pSeries( *aSeriesIter );
                 pSeries->releaseShapes();
             }
         }
@@ -1651,12 +1635,10 @@ sal_Int32 VDataSeriesGroup::getPointCount() const
         return m_nMaxPointCount;
 
     sal_Int32 nRet = 0;
-    std::vector< VDataSeries* >::const_iterator       aSeriesIter = m_aSeriesVector.begin();
-    const std::vector< VDataSeries* >::const_iterator aSeriesEnd = m_aSeriesVector.end();
 
-    for( ; aSeriesIter != aSeriesEnd; ++aSeriesIter)
+    for (VDataSeries* pSeries : m_aSeriesVector)
     {
-        sal_Int32 nPointCount = (*aSeriesIter)->getTotalPointCount();
+        sal_Int32 nPointCount = pSeries->getTotalPointCount();
         if( nPointCount>nRet )
             nRet = nPointCount;
     }
@@ -1670,10 +1652,10 @@ sal_Int32 VDataSeriesGroup::getPointCount() const
 sal_Int32 VDataSeriesGroup::getAttachedAxisIndexForFirstSeries() const
 {
     sal_Int32 nRet = 0;
-    std::vector< VDataSeries* >::const_iterator       aSeriesIter = m_aSeriesVector.begin();
-    const std::vector< VDataSeries* >::const_iterator aSeriesEnd = m_aSeriesVector.end();
 
-    if( aSeriesIter != aSeriesEnd )
+    std::vector<VDataSeries*>::const_iterator aSeriesIter = m_aSeriesVector.begin();
+
+    if (aSeriesIter != m_aSeriesVector.end())
         nRet = (*aSeriesIter)->getAttachedAxisIndex();
 
     return nRet;
@@ -1681,20 +1663,16 @@ sal_Int32 VDataSeriesGroup::getAttachedAxisIndexForFirstSeries() const
 
 void VDataSeriesGroup::getMinimumAndMaximiumX( double& rfMinimum, double& rfMaximum ) const
 {
-    const std::vector< VDataSeries* >* pSeriesList = &this->m_aSeriesVector;
-
-    std::vector< VDataSeries* >::const_iterator       aSeriesIter = pSeriesList->begin();
-    const std::vector< VDataSeries* >::const_iterator aSeriesEnd  = pSeriesList->end();
 
     ::rtl::math::setInf(&rfMinimum, false);
     ::rtl::math::setInf(&rfMaximum, true);
 
-    for( ; aSeriesIter != aSeriesEnd; ++aSeriesIter )
+    for (VDataSeries* pSeries : m_aSeriesVector)
     {
-        sal_Int32 nPointCount = (*aSeriesIter)->getTotalPointCount();
+        sal_Int32 nPointCount = pSeries->getTotalPointCount();
         for(sal_Int32 nN=0;nN<nPointCount;nN++)
         {
-            double fX = (*aSeriesIter)->getXValue( nN );
+            double fX = pSeries->getXValue( nN );
             if( ::rtl::math::isNan(fX) )
                 continue;
             if(rfMaximum<fX)
@@ -1855,10 +1833,8 @@ void VDataSeriesGroup::getMinimumAndMaximiumYInContinuousXRange(
         return;
 
     PerXMinMaxCalculator aRangeCalc;
-    std::vector<VDataSeries*>::const_iterator it = m_aSeriesVector.begin(), itEnd = m_aSeriesVector.end();
-    for (; it != itEnd; ++it)
+    for (const VDataSeries* pSeries : m_aSeriesVector)
     {
-        const VDataSeries* pSeries = *it;
         if (!pSeries)
             continue;
 
@@ -1916,18 +1892,15 @@ void VDataSeriesGroup::calculateYMinAndMaxForCategory( sal_Int32 nCategoryIndex
     ::rtl::math::setNan( &fFirstPositiveY );
     ::rtl::math::setNan( &fFirstNegativeY );
 
-    std::vector< VDataSeries* >::const_iterator aSeriesIter = m_aSeriesVector.begin();
-    std::vector< VDataSeries* >::const_iterator aSeriesEnd  = m_aSeriesVector.end();
-
     if( bSeparateStackingForDifferentSigns )
     {
-        for( ; aSeriesIter != aSeriesEnd; ++aSeriesIter )
+        for (const VDataSeries* pSeries: m_aSeriesVector)
         {
-            if( nAxisIndex != (*aSeriesIter)->getAttachedAxisIndex() )
+            if( nAxisIndex != pSeries->getAttachedAxisIndex() )
                 continue;
 
-            double fValueMinY = (*aSeriesIter)->getMinimumofAllDifferentYValues( nCategoryIndex );
-            double fValueMaxY = (*aSeriesIter)->getMaximumofAllDifferentYValues( nCategoryIndex );
+            double fValueMinY = pSeries->getMinimumofAllDifferentYValues( nCategoryIndex );
+            double fValueMaxY = pSeries->getMaximumofAllDifferentYValues( nCategoryIndex );
 
             if( fValueMaxY >= 0 )
             {
@@ -1949,13 +1922,13 @@ void VDataSeriesGroup::calculateYMinAndMaxForCategory( sal_Int32 nCategoryIndex
     }
     else
     {
-        for( ; aSeriesIter != aSeriesEnd; ++aSeriesIter )
+        for (const VDataSeries* pSeries: m_aSeriesVector)
         {
-            if( nAxisIndex != (*aSeriesIter)->getAttachedAxisIndex() )
+            if( nAxisIndex != pSeries->getAttachedAxisIndex() )
                 continue;
 
-            double fValueMinY = (*aSeriesIter)->getMinimumofAllDifferentYValues( nCategoryIndex );
-            double fValueMaxY = (*aSeriesIter)->getMaximumofAllDifferentYValues( nCategoryIndex );
+            double fValueMinY = pSeries->getMinimumofAllDifferentYValues( nCategoryIndex );
+            double fValueMaxY = pSeries->getMaximumofAllDifferentYValues( nCategoryIndex );
 
             if( ::rtl::math::isNan( fTotalSum ) )
             {
@@ -2063,20 +2036,18 @@ void VSeriesPlotter::rearrangeLabelToAvoidOverlapIfRequested( const awt::Size& /
 
 VDataSeries* VSeriesPlotter::getFirstSeries() const
 {
-    std::vector< std::vector< VDataSeriesGroup > >::const_iterator aZSlotIter( m_aZSlots.begin() );
-    std::vector< std::vector< VDataSeriesGroup > >::const_iterator aZSlotEnd( m_aZSlots.end() );
-    for( ; aZSlotIter != aZSlotEnd; ++aZSlotIter )
+    for (std::vector<VDataSeriesGroup> const & rGroup : m_aZSlots)
     {
-        std::vector< VDataSeriesGroup >::const_iterator       aXSlotIter = aZSlotIter->begin();
-        const std::vector< VDataSeriesGroup >::const_iterator aXSlotEnd  = aZSlotIter->end();
+        std::vector<VDataSeriesGroup>::const_iterator       aXSlotIter = rGroup.begin();
+        const std::vector<VDataSeriesGroup>::const_iterator aXSlotEnd  = rGroup.end();
 
-        if( aXSlotIter != aXSlotEnd )
+        if (aXSlotIter != aXSlotEnd)
         {
-            VDataSeriesGroup aSeriesGroup( *aXSlotIter );
-            if( aSeriesGroup.m_aSeriesVector.size() )
+            VDataSeriesGroup aSeriesGroup(*aXSlotIter);
+            if (aSeriesGroup.m_aSeriesVector.size())
             {
                 VDataSeries* pSeries = aSeriesGroup.m_aSeriesVector[0];
-                if(pSeries)
+                if (pSeries)
                     return pSeries;
             }
         }
@@ -2086,64 +2057,37 @@ VDataSeries* VSeriesPlotter::getFirstSeries() const
 
 uno::Sequence< OUString > VSeriesPlotter::getSeriesNames() const
 {
-    std::vector< OUString > aRetVector;
+    std::vector<OUString> aRetVector;
 
     OUString aRole;
     if( m_xChartTypeModel.is() )
         aRole = m_xChartTypeModel->getRoleOfSequenceForSeriesLabel();
 
-    std::vector< std::vector< VDataSeriesGroup > >::const_iterator aZSlotIter( m_aZSlots.begin() );
-    std::vector< std::vector< VDataSeriesGroup > >::const_iterator aZSlotEnd( m_aZSlots.end() );
-    for( ; aZSlotIter != aZSlotEnd; ++aZSlotIter )
-    {
-        std::vector< VDataSeriesGroup >::const_iterator       aXSlotIter = aZSlotIter->begin();
-        const std::vector< VDataSeriesGroup >::const_iterator aXSlotEnd  = aZSlotIter->end();
 
-        if( aXSlotIter != aXSlotEnd )
-        {
-            VDataSeriesGroup aSeriesGroup( *aXSlotIter );
-            if( aSeriesGroup.m_aSeriesVector.size() )
-            {
-                VDataSeries* pSeries = aSeriesGroup.m_aSeriesVector[0];
-                uno::Reference< XDataSeries > xSeries( pSeries ? pSeries->getModel() : nullptr );
-                if( xSeries.is() )
-                {
-                    OUString aSeriesName( DataSeriesHelper::getDataSeriesLabel( xSeries, aRole ) );
-                    aRetVector.push_back( aSeriesName );
-                }
-            }
-        }
+    VDataSeries* pFirstSeries = getFirstSeries();
+    uno::Reference<XDataSeries> xSeries(pFirstSeries ? pFirstSeries->getModel() : nullptr);
+    if (xSeries.is())
+    {
+        OUString aSeriesName(DataSeriesHelper::getDataSeriesLabel(xSeries, aRole));
+        aRetVector.push_back(aSeriesName);
     }
     return comphelper::containerToSequence( aRetVector );
 }
 
-namespace
-{
-struct lcl_setRefSizeAtSeriesGroup : public std::unary_function< VDataSeriesGroup, void >
-{
-    explicit lcl_setRefSizeAtSeriesGroup( awt::Size aRefSize ) : m_aRefSize( aRefSize ) {}
-    void operator()( VDataSeriesGroup & rGroup )
-    {
-        std::vector< VDataSeries* >::iterator aIt( rGroup.m_aSeriesVector.begin());
-        const std::vector< VDataSeries* >::iterator aEndIt( rGroup.m_aSeriesVector.end());
-        for( ; aIt != aEndIt; ++aIt )
-            (*aIt)->setPageReferenceSize( m_aRefSize );
-    }
-
-private:
-    awt::Size m_aRefSize;
-};
-} // anonymous namespace
-
 void VSeriesPlotter::setPageReferenceSize( const css::awt::Size & rPageRefSize )
 {
     m_aPageReferenceSize = rPageRefSize;
 
     // set reference size also at all data series
 
-    std::vector< VDataSeriesGroup > aSeriesGroups( FlattenVector( m_aZSlots ));
-    std::for_each( aSeriesGroups.begin(), aSeriesGroups.end(),
-                     lcl_setRefSizeAtSeriesGroup( m_aPageReferenceSize ));
+    std::vector<VDataSeriesGroup> aSeriesGroups(FlattenVector(m_aZSlots));
+    for (VDataSeriesGroup const & rGroup : aSeriesGroups)
+    {
+        for (VDataSeries* pSeries : rGroup.m_aSeriesVector)
+        {
+            pSeries->setPageReferenceSize(m_aPageReferenceSize);
+        }
+    }
 }
 
 //better performance for big data
@@ -2180,31 +2124,26 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntries(
         //iterate through all series
         bool bBreak = false;
         bool bFirstSeries = true;
-        std::vector< std::vector< VDataSeriesGroup > >::iterator             aZSlotIter = m_aZSlots.begin();
-        const std::vector< std::vector< VDataSeriesGroup > >::const_iterator  aZSlotEnd = m_aZSlots.end();
-        for( ; aZSlotIter!=aZSlotEnd && !bBreak; ++aZSlotIter )
+
+
+        for (std::vector<VDataSeriesGroup> const & rGroupVector : m_aZSlots)
         {
-            std::vector< VDataSeriesGroup >::iterator             aXSlotIter = aZSlotIter->begin();
-            const std::vector< VDataSeriesGroup >::const_iterator aXSlotEnd = aZSlotIter->end();
-            for( ; aXSlotIter!=aXSlotEnd && !bBreak; ++aXSlotIter )
+            for (VDataSeriesGroup const & rGroup : rGroupVector)
             {
-                std::vector< VDataSeries* >* pSeriesList = &(aXSlotIter->m_aSeriesVector);
-                std::vector< VDataSeries* >::const_iterator       aSeriesIter = pSeriesList->begin();
-                const std::vector< VDataSeries* >::const_iterator aSeriesEnd  = pSeriesList->end();
-                //iterate through all series in this x slot
-                for( ; aSeriesIter!=aSeriesEnd && !bBreak; ++aSeriesIter )
+                for (VDataSeries* pSeries : rGroup.m_aSeriesVector)
                 {
-                    VDataSeries* pSeries( *aSeriesIter );
-                    if(!pSeries)
+                    if (!pSeries)
                         continue;
 
-                    std::vector< ViewLegendEntry > aSeriesEntries( this->createLegendEntriesForSeries( rEntryKeyAspectRatio,
-                            *pSeries, xTextProperties, xTarget, xShapeFactory, xContext ) );
+                    std::vector<ViewLegendEntry> aSeriesEntries(
+                            this->createLegendEntriesForSeries(
+                                        rEntryKeyAspectRatio, *pSeries, xTextProperties,
+                                        xTarget, xShapeFactory, xContext));
 
                     //add series entries to the result now
 
                     // use only the first series if VaryColorsByPoint is set for the first series
-                    if( bFirstSeries && pSeries->isVaryColorsByPoint() )
+                    if (bFirstSeries && pSeries->isVaryColorsByPoint())
                         bBreak = true;
                     bFirstSeries = false;
 
@@ -2220,11 +2159,13 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntries(
                         //todo: respect direction of axis in future
                     }
 
-                    if(bReverse)
+                    if (bReverse)
                         aResult.insert( aResult.begin(), aSeriesEntries.begin(), aSeriesEntries.end() );
                     else
                         aResult.insert( aResult.end(), aSeriesEntries.begin(), aSeriesEntries.end() );
                 }
+                if (bBreak)
+                    return aResult;
             }
         }
     }
@@ -2232,19 +2173,15 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntries(
     return aResult;
 }
 
-std::vector< VDataSeries* > VSeriesPlotter::getAllSeries()
+std::vector<VDataSeries*> VSeriesPlotter::getAllSeries()
 {
-    std::vector< VDataSeries* > aAllSeries;
-    std::vector< std::vector< VDataSeriesGroup > >::iterator            aZSlotIter = m_aZSlots.begin();
-    const std::vector< std::vector< VDataSeriesGroup > >::const_iterator aZSlotEnd = m_aZSlots.end();
-    for( ; aZSlotIter != aZSlotEnd; ++aZSlotIter )
+    std::vector<VDataSeries*> aAllSeries;
+    for (std::vector<VDataSeriesGroup> const & rXSlot : m_aZSlots)
     {
-        std::vector< VDataSeriesGroup >::iterator             aXSlotIter = aZSlotIter->begin();
-        const std::vector< VDataSeriesGroup >::const_iterator aXSlotEnd = aZSlotIter->end();
-        for( ; aXSlotIter != aXSlotEnd; ++aXSlotIter )
+        for(VDataSeriesGroup const & rGroup : rXSlot)
         {
-            std::vector< VDataSeries* > aSeriesList = aXSlotIter->m_aSeriesVector;
-            aAllSeries.insert( aAllSeries.end(), aSeriesList.begin(), aSeriesList.end() );
+            std::vector<VDataSeries*> aSeriesList = rGroup.m_aSeriesVector;
+            aAllSeries.insert(aAllSeries.end(), aSeriesList.begin(), aSeriesList.end());
         }
     }
     return aAllSeries;
@@ -2301,16 +2238,13 @@ awt::Size VSeriesPlotter::getPreferredLegendKeyAspectRatio()
     bool bSeriesAllowsLines = (getLegendSymbolStyle() == LegendSymbolStyle_LINE);
     bool bHasLines = false;
     bool bHasDashedLines = false;
-    std::vector< VDataSeries* > aAllSeries( getAllSeries() );
-    std::vector< VDataSeries* >::const_iterator       aSeriesIter = aAllSeries.begin();
-    const std::vector< VDataSeries* >::const_iterator aSeriesEnd  = aAllSeries.end();
     //iterate through all series
-    for( ; aSeriesIter != aSeriesEnd; ++aSeriesIter )
+    for (VDataSeries* pSeries :  getAllSeries())
     {
         if( bSeriesAllowsLines )
         {
             bool bCurrentDashed = false;
-            if( lcl_HasVisibleLine( (*aSeriesIter)->getPropertiesOfSeries(), bCurrentDashed ) )
+            if( lcl_HasVisibleLine( pSeries->getPropertiesOfSeries(), bCurrentDashed ) )
             {
                 bHasLines = true;
                 if( bCurrentDashed )
@@ -2321,7 +2255,7 @@ awt::Size VSeriesPlotter::getPreferredLegendKeyAspectRatio()
             }
         }
         bool bRegressionHasDashedLines=false;
-        if( lcl_HasRegressionCurves( **aSeriesIter, bRegressionHasDashedLines ) )
+        if( lcl_HasRegressionCurves( *pSeries, bRegressionHasDashedLines ) )
         {
             bHasLines = true;
             if( bRegressionHasDashedLines )


More information about the Libreoffice-commits mailing list