/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <subtotalparam.hxx>
#include <osl/diagnose.h>
ScSubTotalParam::ScSubTotalParam()
{
for ( sal_uInt16 i=0; i<MAXSUBTOTAL; i++ )
{
nSubTotals[i] = 0;
pSubTotals[i] = nullptr;
pFunctions[i] = nullptr;
}
Clear();
}
ScSubTotalParam::ScSubTotalParam( const ScSubTotalParam& r ) :
nCol1(r.nCol1),nRow1(r.nRow1),nCol2(r.nCol2),nRow2(r.nRow2),nUserIndex(r.nUserIndex),
bRemoveOnly(r.bRemoveOnly),bReplace(r.bReplace),bPagebreak(r.bPagebreak),bCaseSens(r.bCaseSens),
bDoSort(r.bDoSort), bSummaryBelow(r.bSummaryBelow), bAscending(r.bAscending), bUserDef(r.bUserDef),
bIncludePattern(r.bIncludePattern)
{
for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
{
bGroupActive[i] = r.bGroupActive[i];
nField[i] = r.nField[i];
if ( (r.nSubTotals[i] > 0) && r.pSubTotals[i] && r.pFunctions[i] )
{
nSubTotals[i] = r.nSubTotals[i];
pSubTotals[i].reset(new SCCOL [r.nSubTotals[i]]);
pFunctions[i].reset(new ScSubTotalFunc [r.nSubTotals[i]]);
for (SCCOL j=0; j<r.nSubTotals[i]; j++)
{
pSubTotals[i][j] = r.pSubTotals[i][j];
pFunctions[i][j] = r.pFunctions[i][j];
}
}
else
{
nSubTotals[i] = 0;
}
}
}
void ScSubTotalParam::Clear()
{
nCol1=nCol2= 0;
nRow1=nRow2 = 0;
nUserIndex = 0;
bPagebreak=bCaseSens=bUserDef=bIncludePattern=bRemoveOnly = false;
bAscending=bReplace=bDoSort=bSummaryBelow = true;
for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
{
bGroupActive[i] = false;
nField[i] = 0;
if ( (nSubTotals[i] > 0) && pSubTotals[i] && pFunctions[i] )
{
for ( SCCOL j=0; j<nSubTotals[i]; j++ ) {
pSubTotals[i][j] = 0;
pFunctions[i][j] = SUBTOTAL_FUNC_NONE;
}
}
}
}
ScSubTotalParam& ScSubTotalParam::operator=( const ScSubTotalParam& r )
{
if(this == &r)
return *this;
nCol1 = r.nCol1;
nRow1 = r.nRow1;
nCol2 = r.nCol2;
nRow2 = r.nRow2;
bRemoveOnly = r.bRemoveOnly;
bReplace = r.bReplace;
bPagebreak = r.bPagebreak;
bCaseSens = r.bCaseSens;
bDoSort = r.bDoSort;
bSummaryBelow = r.bSummaryBelow;
bAscending = r.bAscending;
bUserDef = r.bUserDef;
nUserIndex = r.nUserIndex;
bIncludePattern = r.bIncludePattern;
for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++)
{
bGroupActive[i] = r.bGroupActive[i];
nField[i] = r.nField[i];
nSubTotals[i] = r.nSubTotals[i];
pSubTotals[i].reset();
pFunctions[i].reset();
if ( r.nSubTotals[i] > 0 )
{
pSubTotals[i].reset(new SCCOL [r.nSubTotals[i]]);
pFunctions[i].reset(new ScSubTotalFunc [r.nSubTotals[i]]);
for (SCCOL j=0; j<r.nSubTotals[i]; j++)
{
pSubTotals[i][j] = r.pSubTotals[i][j];
pFunctions[i][j] = r.pFunctions[i][j];
}
}
else
{
nSubTotals[i] = 0;
}
}
return *this;
}
bool ScSubTotalParam::operator==( const ScSubTotalParam& rOther ) const
{
bool bEqual = (nCol1 == rOther.nCol1)
&& (nRow1 == rOther.nRow1)
&& (nCol2 == rOther.nCol2)
&& (nRow2 == rOther.nRow2)
&& (nUserIndex == rOther.nUserIndex)
&& (bRemoveOnly == rOther.bRemoveOnly)
&& (bReplace == rOther.bReplace)
&& (bPagebreak == rOther.bPagebreak)
&& (bDoSort == rOther.bDoSort)
&& (bSummaryBelow == rOther.bSummaryBelow)
&& (bCaseSens == rOther.bCaseSens)
&& (bAscending == rOther.bAscending)
&& (bUserDef == rOther.bUserDef)
&& (bIncludePattern== rOther.bIncludePattern);
if ( bEqual )
{
bEqual = true;
for ( sal_uInt16 i=0; i<MAXSUBTOTAL && bEqual; i++ )
{
bEqual = (bGroupActive[i] == rOther.bGroupActive[i])
&& (nField[i] == rOther.nField[i])
&& (nSubTotals[i] == rOther.nSubTotals[i]);
if ( bEqual && (nSubTotals[i] > 0) )
{
for (SCCOL j=0; (j<nSubTotals[i]) && bEqual; j++)
{
bEqual = bEqual
&& (pSubTotals[i][j] == rOther.pSubTotals[i][j])
&& (pFunctions[i][j] == rOther.pFunctions[i][j]);
}
}
}
}
return bEqual;
}
void ScSubTotalParam::SetSubTotals( sal_uInt16 nGroup,
const SCCOL* ptrSubTotals,
const ScSubTotalFunc* ptrFunctions,
sal_uInt16 nCount )
{
OSL_ENSURE( (nGroup <= MAXSUBTOTAL),
"ScSubTotalParam::SetSubTotals(): nGroup > MAXSUBTOTAL!" );
OSL_ENSURE( ptrSubTotals,
"ScSubTotalParam::SetSubTotals(): ptrSubTotals == NULL!" );
OSL_ENSURE( ptrFunctions,
"ScSubTotalParam::SetSubTotals(): ptrFunctions == NULL!" );
OSL_ENSURE( (nCount > 0),
"ScSubTotalParam::SetSubTotals(): nCount <= 0!" );
if ( !(ptrSubTotals && ptrFunctions && (nCount > 0) && (nGroup <= MAXSUBTOTAL)) )
return;
// 0 is interpreted as 1, otherwise decrementing the array index
if (nGroup != 0)
nGroup--;
pSubTotals[nGroup].reset(new SCCOL[nCount]);
pFunctions[nGroup].reset(new ScSubTotalFunc[nCount]);
nSubTotals[nGroup] = static_cast<SCCOL>(nCount);
for ( sal_uInt16 i=0; i<nCount; i++ )
{
pSubTotals[nGroup][i] = ptrSubTotals[i];
pFunctions[nGroup][i] = ptrFunctions[i];
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
↑ V560 A part of conditional expression is always true: bEqual.
↑ V1048 The 'bEqual' variable was assigned the same value.