summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-08-01 10:42:16 +0100
committerAndras Timar <andras.timar@collabora.com>2018-08-08 13:07:15 +0200
commit0ad2f3c452159df6a4d106a571534c4db69a6506 (patch)
treee583805465789e37d4b64620a524ea196bd8bc57
parentf32ba7a73497e871353a69212c41ee99507b6f8a (diff)
forcepoint#59 the "matrix" is always one row in height
so it can be a vector instead, and by using vector::at() instead of matrix::at() vector bounds checking is performed, unlike matrix::at() which does no checking Change-Id: Ic767c2dd884bffbf1cdff65c0980b21170612f4d Reviewed-on: https://gerrit.libreoffice.org/58399 Tested-by: Jenkins Reviewed-by: Michael Stahl <Michael.Stahl@cib.de> (cherry picked from commit ccfdc4b675233131fb99c998d2dc48affb0ac7af) (cherry picked from commit 58b4de56a389463eaef6dd228ffb7f37c1ba6103)
-rw-r--r--oox/source/drawingml/chart/chartconverter.cxx40
1 files changed, 17 insertions, 23 deletions
diff --git a/oox/source/drawingml/chart/chartconverter.cxx b/oox/source/drawingml/chart/chartconverter.cxx
index ff43fa7a5460..581608482b05 100644
--- a/oox/source/drawingml/chart/chartconverter.cxx
+++ b/oox/source/drawingml/chart/chartconverter.cxx
@@ -44,7 +44,6 @@ using ::oox::core::XmlFilterBase;
static const sal_Unicode API_TOKEN_ARRAY_OPEN = '{';
static const sal_Unicode API_TOKEN_ARRAY_CLOSE = '}';
-static const sal_Unicode API_TOKEN_ARRAY_ROWSEP = '|';
static const sal_Unicode API_TOKEN_ARRAY_COLSEP = ';';
// Code similar to oox/source/xls/formulabase.cxx
@@ -57,28 +56,23 @@ static OUString lclGenerateApiString( const OUString& rString )
return "\"" + aRetString + "\"";
}
-static OUString lclGenerateApiArray( const Matrix< Any >& rMatrix )
+static OUString lclGenerateApiArray(const std::vector<Any>& rRow)
{
- OSL_ENSURE( !rMatrix.empty(), "ChartConverter::lclGenerateApiArray - missing matrix values" );
+ OSL_ENSURE( !rRow.empty(), "ChartConverter::lclGenerateApiArray - missing matrix values" );
OUStringBuffer aBuffer;
aBuffer.append( API_TOKEN_ARRAY_OPEN );
- for( size_t nRow = 0, nHeight = rMatrix.height(); nRow < nHeight; ++nRow )
+ for (auto aBeg = rRow.begin(), aIt = aBeg, aEnd = rRow.end(); aIt != aEnd; ++aIt)
{
- if( nRow > 0 )
- aBuffer.append( API_TOKEN_ARRAY_ROWSEP );
- for( Matrix< Any >::const_iterator aBeg = rMatrix.row_begin( nRow ), aIt = aBeg, aEnd = rMatrix.row_end( nRow ); aIt != aEnd; ++aIt )
- {
- double fValue = 0.0;
- OUString aString;
- if( aIt != aBeg )
- aBuffer.append( API_TOKEN_ARRAY_COLSEP );
- if( *aIt >>= fValue )
- aBuffer.append( fValue );
- else if( *aIt >>= aString )
- aBuffer.append( lclGenerateApiString( aString ) );
- else
- aBuffer.append( "\"\"" );
- }
+ double fValue = 0.0;
+ OUString aString;
+ if( aIt != aBeg )
+ aBuffer.append( API_TOKEN_ARRAY_COLSEP );
+ if( *aIt >>= fValue )
+ aBuffer.append( fValue );
+ else if( *aIt >>= aString )
+ aBuffer.append( lclGenerateApiString( aString ) );
+ else
+ aBuffer.append( "\"\"" );
}
aBuffer.append( API_TOKEN_ARRAY_CLOSE );
return aBuffer.makeStringAndClear();
@@ -133,11 +127,11 @@ Reference< XDataSequence > ChartConverter::createDataSequence(
if( !rDataSeq.maData.empty() )
{
// create a single-row array from constant source data
- Matrix< Any > aMatrix( rDataSeq.mnPointCount, 1 );
- for( DataSequenceModel::AnyMap::const_iterator aDIt = rDataSeq.maData.begin(), aDEnd = rDataSeq.maData.end(); aDIt != aDEnd; ++aDIt )
- *aMatrix.at(aDIt->first, 0) = aDIt->second;
+ std::vector<Any> aRow(rDataSeq.mnPointCount);
+ for (auto const& elem : rDataSeq.maData)
+ aRow.at(elem.first) = elem.second;
- aRangeRep = lclGenerateApiArray( aMatrix );
+ aRangeRep = lclGenerateApiArray(aRow);
}
if( !aRangeRep.isEmpty() ) try