diff options
Diffstat (limited to 'chart2/source/tools/InternalData.cxx')
-rw-r--r-- | chart2/source/tools/InternalData.cxx | 133 |
1 files changed, 58 insertions, 75 deletions
diff --git a/chart2/source/tools/InternalData.cxx b/chart2/source/tools/InternalData.cxx index 91a9fbaa16fa..e6e926078eb3 100644 --- a/chart2/source/tools/InternalData.cxx +++ b/chart2/source/tools/InternalData.cxx @@ -21,8 +21,10 @@ #include <ResId.hxx> #include <strings.hrc> +#include <comphelper/sequence.hxx> +#include <o3tl/safeint.hxx> #include <osl/diagnose.h> -#include <rtl/math.hxx> + #ifdef DEBUG_CHART2_TOOLS #define DEBUG_INTERNAL_DATA 1 #endif @@ -33,11 +35,11 @@ #include <algorithm> #include <iterator> +#include <limits> using ::com::sun::star::uno::Sequence; using namespace ::com::sun::star; -using namespace ::std; namespace chart { @@ -46,18 +48,16 @@ namespace { struct lcl_NumberedStringGenerator { - lcl_NumberedStringGenerator( const OUString & rStub, const OUString & rWildcard ) : + lcl_NumberedStringGenerator( const OUString & rStub, std::u16string_view rWildcard ) : m_aStub( rStub ), m_nCounter( 0 ), m_nStubStartIndex( rStub.indexOf( rWildcard )), - m_nWildcardLength( rWildcard.getLength()) + m_nWildcardLength( rWildcard.size()) { } - vector< uno::Any > operator()() + std::vector< uno::Any > operator()() { - vector< uno::Any > aRet(1); - aRet[0] <<= m_aStub.replaceAt( m_nStubStartIndex, m_nWildcardLength, OUString::number( ++m_nCounter )); - return aRet; + return { uno::Any(m_aStub.replaceAt( m_nStubStartIndex, m_nWildcardLength, OUString::number( ++m_nCounter ))) }; } private: OUString m_aStub; @@ -69,11 +69,13 @@ private: template< typename T > Sequence< T > lcl_ValarrayToSequence( const std::valarray< T > & rValarray ) { - // is there a more elegant way of conversion? - Sequence< T > aResult( rValarray.size()); - for( size_t i = 0; i < rValarray.size(); ++i ) - aResult[i] = rValarray[i]; - return aResult; +#if defined __GLIBCXX__ && (!defined _GLIBCXX_RELEASE || _GLIBCXX_RELEASE < 12) + // workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103022 + if (!size(rValarray)) + return Sequence<T>(); +#endif + + return comphelper::containerToSequence(rValarray); } } // anonymous namespace @@ -111,12 +113,12 @@ void InternalData::createDefaultData() m_aRowLabels.clear(); m_aRowLabels.reserve( m_nRowCount ); generate_n( back_inserter( m_aRowLabels ), m_nRowCount, - lcl_NumberedStringGenerator( aRowName, "%ROWNUMBER" )); + lcl_NumberedStringGenerator( aRowName, u"%ROWNUMBER" )); m_aColumnLabels.clear(); m_aColumnLabels.reserve( m_nColumnCount ); generate_n( back_inserter( m_aColumnLabels ), m_nColumnCount, - lcl_NumberedStringGenerator( aColName, "%COLUMNNUMBER" )); + lcl_NumberedStringGenerator( aColName, u"%COLUMNNUMBER" )); } void InternalData::setData( const Sequence< Sequence< double > >& rDataInRows ) @@ -130,10 +132,8 @@ void InternalData::setData( const Sequence< Sequence< double > >& rDataInRows ) m_aColumnLabels.resize( m_nColumnCount ); m_aData.resize( m_nRowCount * m_nColumnCount ); - double fNan; - ::rtl::math::setNan( & fNan ); // set all values to Nan - m_aData = fNan; + m_aData = std::numeric_limits<double>::quiet_NaN(); for( sal_Int32 nRow=0; nRow<m_nRowCount; ++nRow ) { @@ -150,9 +150,10 @@ void InternalData::setData( const Sequence< Sequence< double > >& rDataInRows ) Sequence< Sequence< double > > InternalData::getData() const { Sequence< Sequence< double > > aResult( m_nRowCount ); + auto aResultRange = asNonConstRange(aResult); for( sal_Int32 i=0; i<m_nRowCount; ++i ) - aResult[i] = lcl_ValarrayToSequence< tDataType::value_type >( + aResultRange[i] = lcl_ValarrayToSequence< tDataType::value_type >( m_aData[ std::slice( i*m_nColumnCount, m_nColumnCount, 1 ) ] ); return aResult; @@ -173,49 +174,49 @@ Sequence< double > InternalData::getRowValues( sal_Int32 nRowIndex ) const return Sequence< double >(); } -void InternalData::setColumnValues( sal_Int32 nColumnIndex, const vector< double > & rNewData ) +void InternalData::setColumnValues( sal_Int32 nColumnIndex, const std::vector< double > & rNewData ) { if( nColumnIndex < 0 ) return; enlargeData( nColumnIndex + 1, rNewData.size() ); tDataType aSlice = m_aData[ std::slice( nColumnIndex, m_nRowCount, m_nColumnCount ) ]; - for( vector< double >::size_type i = 0; i < rNewData.size(); ++i ) + for( std::vector< double >::size_type i = 0; i < rNewData.size(); ++i ) aSlice[i] = rNewData[i]; m_aData[ std::slice( nColumnIndex, m_nRowCount, m_nColumnCount ) ] = aSlice; } -void InternalData::setRowValues( sal_Int32 nRowIndex, const vector< double > & rNewData ) +void InternalData::setRowValues( sal_Int32 nRowIndex, const std::vector< double > & rNewData ) { if( nRowIndex < 0 ) return; enlargeData( rNewData.size(), nRowIndex+1 ); tDataType aSlice = m_aData[ std::slice( nRowIndex*m_nColumnCount, m_nColumnCount, 1 ) ]; - for( vector< double >::size_type i = 0; i < rNewData.size(); ++i ) + for( std::vector< double >::size_type i = 0; i < rNewData.size(); ++i ) aSlice[i] = rNewData[i]; m_aData[ std::slice( nRowIndex*m_nColumnCount, m_nColumnCount, 1 ) ]= aSlice; } -void InternalData::setComplexColumnLabel( sal_Int32 nColumnIndex, const vector< uno::Any >& rComplexLabel ) +void InternalData::setComplexColumnLabel( sal_Int32 nColumnIndex, std::vector< uno::Any >&& rComplexLabel ) { if( nColumnIndex < 0 ) return; - if( nColumnIndex >= static_cast< sal_Int32 >( m_aColumnLabels.size() ) ) + if( o3tl::make_unsigned(nColumnIndex) >= m_aColumnLabels.size() ) { m_aColumnLabels.resize(nColumnIndex+1); enlargeData( nColumnIndex+1, 0 ); } - m_aColumnLabels[nColumnIndex]=rComplexLabel; + m_aColumnLabels[nColumnIndex] = std::move(rComplexLabel); dump(); } -void InternalData::setComplexRowLabel( sal_Int32 nRowIndex, const vector< uno::Any >& rComplexLabel ) +void InternalData::setComplexRowLabel( sal_Int32 nRowIndex, std::vector< uno::Any >&& rComplexLabel ) { if( nRowIndex < 0 ) return; - if( nRowIndex >= static_cast< sal_Int32 >( m_aRowLabels.size() ) ) + if( o3tl::make_unsigned(nRowIndex) >= m_aRowLabels.size() ) { m_aRowLabels.resize(nRowIndex+1); enlargeData( 0, nRowIndex+1 ); @@ -228,23 +229,23 @@ void InternalData::setComplexRowLabel( sal_Int32 nRowIndex, const vector< uno::A } else { - m_aRowLabels[nRowIndex] = rComplexLabel; + m_aRowLabels[nRowIndex] = std::move(rComplexLabel); } } -vector< uno::Any > InternalData::getComplexColumnLabel( sal_Int32 nColumnIndex ) const +std::vector< uno::Any > InternalData::getComplexColumnLabel( sal_Int32 nColumnIndex ) const { if( nColumnIndex < static_cast< sal_Int32 >( m_aColumnLabels.size() ) ) return m_aColumnLabels[nColumnIndex]; else - return vector< uno::Any >(); + return std::vector< uno::Any >(); } -vector< uno::Any > InternalData::getComplexRowLabel( sal_Int32 nRowIndex ) const +std::vector< uno::Any > InternalData::getComplexRowLabel( sal_Int32 nRowIndex ) const { if( nRowIndex < static_cast< sal_Int32 >( m_aRowLabels.size() ) ) return m_aRowLabels[nRowIndex]; else - return vector< uno::Any >(); + return std::vector< uno::Any >(); } void InternalData::swapRowWithNext( sal_Int32 nRowIndex ) @@ -257,14 +258,10 @@ void InternalData::swapRowWithNext( sal_Int32 nRowIndex ) { size_t nIndex1 = nColIdx + nRowIndex*m_nColumnCount; size_t nIndex2 = nIndex1 + m_nColumnCount; - double fTemp = m_aData[nIndex1]; - m_aData[nIndex1] = m_aData[nIndex2]; - m_aData[nIndex2] = fTemp; + std::swap(m_aData[nIndex1], m_aData[nIndex2]); } - vector< uno::Any > aTemp( m_aRowLabels[nRowIndex] ); - m_aRowLabels[nRowIndex] = m_aRowLabels[nRowIndex + 1]; - m_aRowLabels[nRowIndex + 1] = aTemp; + std::swap(m_aRowLabels[nRowIndex], m_aRowLabels[nRowIndex + 1]); } void InternalData::swapColumnWithNext( sal_Int32 nColumnIndex ) @@ -277,14 +274,10 @@ void InternalData::swapColumnWithNext( sal_Int32 nColumnIndex ) { size_t nIndex1 = nColumnIndex + nRowIdx*m_nColumnCount; size_t nIndex2 = nIndex1 + 1; - double fTemp = m_aData[nIndex1]; - m_aData[nIndex1] = m_aData[nIndex2]; - m_aData[nIndex2] = fTemp; + std::swap(m_aData[nIndex1], m_aData[nIndex2]); } - vector< uno::Any > aTemp( m_aColumnLabels[nColumnIndex] ); - m_aColumnLabels[nColumnIndex] = m_aColumnLabels[nColumnIndex + 1]; - m_aColumnLabels[nColumnIndex + 1] = aTemp; + std::swap(m_aColumnLabels[nColumnIndex], m_aColumnLabels[nColumnIndex + 1]); } bool InternalData::enlargeData( sal_Int32 nColumnCount, sal_Int32 nRowCount ) @@ -297,9 +290,7 @@ bool InternalData::enlargeData( sal_Int32 nColumnCount, sal_Int32 nRowCount ) if( bGrow ) { - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data for( int nCol=0; nCol<m_nColumnCount; ++nCol ) static_cast< tDataType >( @@ -323,9 +314,7 @@ void InternalData::insertColumn( sal_Int32 nAfterIndex ) sal_Int32 nNewColumnCount = m_nColumnCount + 1; sal_Int32 nNewSize( nNewColumnCount * m_nRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data int nCol=0; @@ -344,7 +333,7 @@ void InternalData::insertColumn( sal_Int32 nAfterIndex ) // labels if( nAfterIndex < static_cast< sal_Int32 >( m_aColumnLabels.size())) - m_aColumnLabels.insert( m_aColumnLabels.begin() + (nAfterIndex + 1), vector< uno::Any >(1) ); + m_aColumnLabels.insert( m_aColumnLabels.begin() + (nAfterIndex + 1), std::vector< uno::Any >(1) ); dump(); } @@ -380,9 +369,7 @@ void InternalData::insertRow( sal_Int32 nAfterIndex ) sal_Int32 nNewRowCount = m_nRowCount + 1; sal_Int32 nNewSize( m_nColumnCount * nNewRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data sal_Int32 nIndex = nAfterIndex + 1; @@ -404,7 +391,7 @@ void InternalData::insertRow( sal_Int32 nAfterIndex ) // labels if( nAfterIndex < static_cast< sal_Int32 >( m_aRowLabels.size())) - m_aRowLabels.insert( m_aRowLabels.begin() + nIndex, vector< uno::Any > (1)); + m_aRowLabels.insert( m_aRowLabels.begin() + nIndex, std::vector< uno::Any > (1)); dump(); } @@ -417,9 +404,7 @@ void InternalData::deleteColumn( sal_Int32 nAtIndex ) sal_Int32 nNewColumnCount = m_nColumnCount - 1; sal_Int32 nNewSize( nNewColumnCount * m_nRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data int nCol=0; @@ -451,9 +436,7 @@ void InternalData::deleteRow( sal_Int32 nAtIndex ) sal_Int32 nNewRowCount = m_nRowCount - 1; sal_Int32 nNewSize( m_nColumnCount * nNewRowCount ); - double fNan; - ::rtl::math::setNan( &fNan ); - tDataType aNewData( fNan, nNewSize ); + tDataType aNewData( std::numeric_limits<double>::quiet_NaN(), nNewSize ); // copy old data sal_Int32 nIndex = nAtIndex; @@ -481,9 +464,9 @@ void InternalData::deleteRow( sal_Int32 nAtIndex ) dump(); } -void InternalData::setComplexRowLabels( const tVecVecAny& rNewRowLabels ) +void InternalData::setComplexRowLabels( tVecVecAny&& rNewRowLabels ) { - m_aRowLabels = rNewRowLabels; + m_aRowLabels = std::move(rNewRowLabels); sal_Int32 nNewRowCount = static_cast< sal_Int32 >( m_aRowLabels.size() ); if( nNewRowCount < m_nRowCount ) m_aRowLabels.resize( m_nRowCount ); @@ -496,9 +479,9 @@ const InternalData::tVecVecAny& InternalData::getComplexRowLabels() const return m_aRowLabels; } -void InternalData::setComplexColumnLabels( const tVecVecAny& rNewColumnLabels ) +void InternalData::setComplexColumnLabels( tVecVecAny&& rNewColumnLabels ) { - m_aColumnLabels = rNewColumnLabels; + m_aColumnLabels = std::move(rNewColumnLabels); sal_Int32 nNewColumnCount = static_cast< sal_Int32 >( m_aColumnLabels.size() ); if( nNewColumnCount < m_nColumnCount ) m_aColumnLabels.resize( m_nColumnCount ); @@ -517,22 +500,22 @@ void InternalData::dump() const // Header if (!m_aColumnLabels.empty()) { - svl::GridPrinter aPrinter(1, m_aColumnLabels.size(), true); + svl::GridPrinter aPrinter(m_aColumnLabels[0].size(), m_aColumnLabels.size(), true); for (size_t nCol = 0; nCol < m_aColumnLabels.size(); ++nCol) { - if (m_aColumnLabels[nCol].empty()) - continue; - - OUString aStr; - if (m_aColumnLabels[nCol][0] >>= aStr) - aPrinter.set(0, nCol, aStr); + for (size_t nRow = 0; nRow < m_aColumnLabels[nCol].size(); ++nRow) + { + OUString aStr; + if (m_aColumnLabels[nCol].at(nRow) >>= aStr) + aPrinter.set(nRow, nCol, aStr); + } } aPrinter.print("Header"); } if (!m_aRowLabels.empty()) { - svl::GridPrinter aPrinter(m_aRowLabels.size(), m_aRowLabels[0].size()); + svl::GridPrinter aPrinter(m_aRowLabels.size(), m_aRowLabels[0].size(), true); for (size_t nRow = 0; nRow < m_aRowLabels.size(); ++nRow) { for (size_t nCol = 0; nCol < m_aRowLabels[nRow].size(); ++nCol) @@ -545,7 +528,7 @@ void InternalData::dump() const aPrinter.print("Row labels"); } - svl::GridPrinter aPrinter(m_nRowCount, m_nColumnCount); + svl::GridPrinter aPrinter(m_nRowCount, m_nColumnCount, true); for (sal_Int32 nRow = 0; nRow < m_nRowCount; ++nRow) { |