Kaydet (Commit) 75bde904 authored tarafından Winfried Donkers's avatar Winfried Donkers Kaydeden (comit) Eike Rathke

tdf#94079 allow empty array for holiday sequence

in Calc functions NETWORKDAYS and WORKDAY.INTL

Change-Id: I2d42ab956e4ab9f2187a0c6bc3c64c9306ca892a
Reviewed-on: https://gerrit.libreoffice.org/18559Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
Tested-by: 's avatarEike Rathke <erack@redhat.com>
üst d8f78d62
...@@ -821,7 +821,7 @@ double GetMedian( ::std::vector<double> & rArray ); ...@@ -821,7 +821,7 @@ double GetMedian( ::std::vector<double> & rArray );
double GetPercentile( ::std::vector<double> & rArray, double fPercentile ); double GetPercentile( ::std::vector<double> & rArray, double fPercentile );
double GetPercentileExclusive( ::std::vector<double> & rArray, double fPercentile ); double GetPercentileExclusive( ::std::vector<double> & rArray, double fPercentile );
void GetNumberSequenceArray( sal_uInt8 nParamCount, ::std::vector<double>& rArray, bool bConvertTextInArray ); void GetNumberSequenceArray( sal_uInt8 nParamCount, ::std::vector<double>& rArray, bool bConvertTextInArray );
void GetSortArray( sal_uInt8 nParamCount, ::std::vector<double>& rSortArray, ::std::vector<long>* pIndexOrder, bool bConvertTextInArray ); void GetSortArray( sal_uInt8 nParamCount, ::std::vector<double>& rSortArray, ::std::vector<long>* pIndexOrder, bool bConvertTextInArray, bool bAllowEmptyArray );
static void QuickSort(::std::vector<double>& rSortArray, ::std::vector<long>* pIndexOrder = NULL); static void QuickSort(::std::vector<double>& rSortArray, ::std::vector<long>* pIndexOrder = NULL);
void ScModalValue(); void ScModalValue();
void ScModalValue_Multi(); void ScModalValue_Multi();
......
...@@ -277,7 +277,7 @@ sal_uInt16 ScInterpreter::GetWeekendAndHolidayMasks( ...@@ -277,7 +277,7 @@ sal_uInt16 ScInterpreter::GetWeekendAndHolidayMasks(
if ( nParamCount >= 3 ) if ( nParamCount >= 3 )
{ {
GetSortArray( 1, rSortArray, NULL, false ); GetSortArray( 1, rSortArray, NULL, false, true );
size_t nMax = rSortArray.size(); size_t nMax = rSortArray.size();
for ( size_t i = 0; i < nMax; i++ ) for ( size_t i = 0; i < nMax; i++ )
rSortArray.at( i ) = ::rtl::math::approxFloor( rSortArray.at( i ) ) + nNullDate; rSortArray.at( i ) = ::rtl::math::approxFloor( rSortArray.at( i ) ) + nNullDate;
...@@ -294,7 +294,7 @@ sal_uInt16 ScInterpreter::GetWeekendAndHolidayMasks_MS( ...@@ -294,7 +294,7 @@ sal_uInt16 ScInterpreter::GetWeekendAndHolidayMasks_MS(
OUString aWeekendDays; OUString aWeekendDays;
if ( nParamCount == 4 ) if ( nParamCount == 4 )
{ {
GetSortArray( 1, rSortArray, NULL, true ); GetSortArray( 1, rSortArray, NULL, true, true );
size_t nMax = rSortArray.size(); size_t nMax = rSortArray.size();
for ( size_t i = 0; i < nMax; i++ ) for ( size_t i = 0; i < nMax; i++ )
rSortArray.at( i ) = ::rtl::math::approxFloor( rSortArray.at( i ) ) + nNullDate; rSortArray.at( i ) = ::rtl::math::approxFloor( rSortArray.at( i ) ) + nNullDate;
......
...@@ -3463,7 +3463,7 @@ void ScInterpreter::ScModalValue() ...@@ -3463,7 +3463,7 @@ void ScInterpreter::ScModalValue()
if ( !MustHaveParamCountMin( nParamCount, 1 ) ) if ( !MustHaveParamCountMin( nParamCount, 1 ) )
return; return;
vector<double> aSortArray; vector<double> aSortArray;
GetSortArray( nParamCount, aSortArray, NULL, false ); GetSortArray( nParamCount, aSortArray, NULL, false, false );
SCSIZE nSize = aSortArray.size(); SCSIZE nSize = aSortArray.size();
if (aSortArray.empty() || nSize == 0 || nGlobalError) if (aSortArray.empty() || nSize == 0 || nGlobalError)
PushNoValue(); PushNoValue();
...@@ -3549,7 +3549,7 @@ void ScInterpreter::ScPercentrank( bool bInclusive ) ...@@ -3549,7 +3549,7 @@ void ScInterpreter::ScPercentrank( bool bInclusive )
double fSignificance = ( nParamCount == 3 ? ::rtl::math::approxFloor( GetDouble() ) : 3.0 ); double fSignificance = ( nParamCount == 3 ? ::rtl::math::approxFloor( GetDouble() ) : 3.0 );
double fNum = GetDouble(); double fNum = GetDouble();
vector<double> aSortArray; vector<double> aSortArray;
GetSortArray( 1, aSortArray, NULL, false ); GetSortArray( 1, aSortArray, NULL, false, false );
SCSIZE nSize = aSortArray.size(); SCSIZE nSize = aSortArray.size();
if ( aSortArray.empty() || nSize == 0 || nGlobalError ) if ( aSortArray.empty() || nSize == 0 || nGlobalError )
PushNoValue(); PushNoValue();
...@@ -3642,7 +3642,7 @@ void ScInterpreter::ScTrimMean() ...@@ -3642,7 +3642,7 @@ void ScInterpreter::ScTrimMean()
return; return;
} }
vector<double> aSortArray; vector<double> aSortArray;
GetSortArray( 1, aSortArray, NULL, false ); GetSortArray( 1, aSortArray, NULL, false, false );
SCSIZE nSize = aSortArray.size(); SCSIZE nSize = aSortArray.size();
if (aSortArray.empty() || nSize == 0 || nGlobalError) if (aSortArray.empty() || nSize == 0 || nGlobalError)
PushNoValue(); PushNoValue();
...@@ -3781,13 +3781,17 @@ void ScInterpreter::GetNumberSequenceArray( sal_uInt8 nParamCount, vector<double ...@@ -3781,13 +3781,17 @@ void ScInterpreter::GetNumberSequenceArray( sal_uInt8 nParamCount, vector<double
PopError(); PopError();
} }
void ScInterpreter::GetSortArray( sal_uInt8 nParamCount, vector<double>& rSortArray, vector<long>* pIndexOrder, bool bConvertTextInArray ) void ScInterpreter::GetSortArray( sal_uInt8 nParamCount, vector<double>& rSortArray, vector<long>* pIndexOrder, bool bConvertTextInArray, bool bAllowEmptyArray )
{ {
GetNumberSequenceArray( nParamCount, rSortArray, bConvertTextInArray ); GetNumberSequenceArray( nParamCount, rSortArray, bConvertTextInArray );
if (rSortArray.size() > MAX_ANZ_DOUBLE_FOR_SORT) if (rSortArray.size() > MAX_ANZ_DOUBLE_FOR_SORT)
SetError( errStackOverflow); SetError( errStackOverflow);
else if (rSortArray.empty()) else if ( rSortArray.empty() )
{
if ( bAllowEmptyArray )
return;
SetError( errNoValue); SetError( errNoValue);
}
if (nGlobalError == 0) if (nGlobalError == 0)
QuickSort( rSortArray, pIndexOrder); QuickSort( rSortArray, pIndexOrder);
...@@ -3883,7 +3887,7 @@ void ScInterpreter::ScRank( bool bAverage ) ...@@ -3883,7 +3887,7 @@ void ScInterpreter::ScRank( bool bAverage )
bAscending = false; bAscending = false;
vector<double> aSortArray; vector<double> aSortArray;
GetSortArray( 1, aSortArray, NULL, false ); GetSortArray( 1, aSortArray, NULL, false, false );
double fVal = GetDouble(); double fVal = GetDouble();
SCSIZE nSize = aSortArray.size(); SCSIZE nSize = aSortArray.size();
if ( aSortArray.empty() || nSize == 0 || nGlobalError ) if ( aSortArray.empty() || nSize == 0 || nGlobalError )
......
...@@ -837,7 +837,7 @@ void ScInterpreter::ScModalValue_Multi() ...@@ -837,7 +837,7 @@ void ScInterpreter::ScModalValue_Multi()
if ( !MustHaveParamCountMin( nParamCount, 1 ) ) if ( !MustHaveParamCountMin( nParamCount, 1 ) )
return; return;
vector<double> aSortArray; vector<double> aSortArray;
GetSortArray( nParamCount, aSortArray, NULL, false ); GetSortArray( nParamCount, aSortArray, NULL, false, false );
SCSIZE nSize = aSortArray.size(); SCSIZE nSize = aSortArray.size();
if ( aSortArray.empty() || nSize == 0 || nGlobalError ) if ( aSortArray.empty() || nSize == 0 || nGlobalError )
PushNoValue(); PushNoValue();
...@@ -1804,7 +1804,7 @@ void ScInterpreter::ScFrequency() ...@@ -1804,7 +1804,7 @@ void ScInterpreter::ScFrequency()
vector<double> aBinArray; vector<double> aBinArray;
vector<long> aBinIndexOrder; vector<long> aBinIndexOrder;
GetSortArray( 1, aBinArray, &aBinIndexOrder, false ); GetSortArray( 1, aBinArray, &aBinIndexOrder, false, false );
SCSIZE nBinSize = aBinArray.size(); SCSIZE nBinSize = aBinArray.size();
if (nGlobalError) if (nGlobalError)
{ {
...@@ -1813,7 +1813,7 @@ void ScInterpreter::ScFrequency() ...@@ -1813,7 +1813,7 @@ void ScInterpreter::ScFrequency()
} }
vector<double> aDataArray; vector<double> aDataArray;
GetSortArray( 1, aDataArray, NULL, false ); GetSortArray( 1, aDataArray, NULL, false, false );
SCSIZE nDataSize = aDataArray.size(); SCSIZE nDataSize = aDataArray.size();
if (aDataArray.empty() || nGlobalError) if (aDataArray.empty() || nGlobalError)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment