use more unique_ptr in FormulaTokenArray

Change-Id: Ife00f7e119e4870a3584ae7d766d9debd6220217
Reviewed-on: https://gerrit.collaboraoffice.com/c/core/+/632
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.com>
(cherry picked from commit b80addae75093d947065f0e41e1a1aebd2c89a03)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208327
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Tested-by: Jenkins
This commit is contained in:
Noel Grandin
2026-07-21 09:02:51 +02:00
committed by Xisco Fauli
parent 33469f27f2
commit 288a6e815d
3 changed files with 37 additions and 37 deletions
+7 -9
View File
@@ -361,14 +361,13 @@ void FormulaTokenArray::DelRPN()
{
if( nRPN )
{
FormulaToken** p = pRPN;
FormulaToken** p = pRPN.get();
for( sal_uInt16 i = 0; i < nRPN; i++ )
{
(*p++)->DecRef();
}
delete [] pRPN;
pRPN.reset();
}
pRPN = nullptr;
nRPN = 0;
}
@@ -469,7 +468,6 @@ bool FormulaTokenArray::HasOpCodes(const unordered_opcode_set& rOpCodes) const
}
FormulaTokenArray::FormulaTokenArray() :
pRPN(nullptr),
nLen(0),
nRPN(0),
nError(FormulaError::NONE),
@@ -534,8 +532,9 @@ void FormulaTokenArray::Assign( const FormulaTokenArray& r )
}
if( nRPN )
{
pp = pRPN = new FormulaToken*[ nRPN ];
memcpy( pp, r.pRPN, nRPN * sizeof( FormulaToken* ) );
pRPN = std::make_unique<FormulaToken*[]>(nRPN);
pp = pRPN.get();
memcpy( pp, r.pRPN.get(), nRPN * sizeof( FormulaToken* ) );
for( sal_uInt16 i = 0; i < nRPN; i++ )
(*pp++)->IncRef();
}
@@ -544,8 +543,7 @@ void FormulaTokenArray::Assign( const FormulaTokenArray& r )
void FormulaTokenArray::Move( FormulaTokenArray&& r )
{
pCode = std::move(r.pCode);
pRPN = r.pRPN;
r.pRPN = nullptr;
pRPN = std::move(r.pRPN);
nLen = r.nLen;
r.nLen = 0;
nRPN = r.nRPN;
@@ -627,7 +625,7 @@ void FormulaTokenArray::CheckAllRPNTokens()
{
if( nRPN )
{
FormulaToken** p = pRPN;
FormulaToken** p = pRPN.get();
for( sal_uInt16 i = 0; i < nRPN; i++ )
{
CheckToken( *p[ i ] );
+5 -5
View File
@@ -233,7 +233,7 @@ class FORMULA_DLLPUBLIC FormulaTokenArray
{
protected:
std::unique_ptr<FormulaToken*[]> pCode; // Token code array
FormulaToken** pRPN; // RPN array
std::unique_ptr<FormulaToken*[]> pRPN; // RPN array
sal_uInt16 nLen; // Length of token array
sal_uInt16 nRPN; // Length of RPN array
FormulaError nError; // Error code
@@ -360,9 +360,9 @@ public:
/// Assign pRPN to point to a newly created array filled with the data from pData
void CreateNewRPNArrayFromData( FormulaToken** pData, sal_uInt16 nSize )
{
pRPN = new FormulaToken*[ nSize ];
pRPN = std::make_unique<FormulaToken*[]>(nSize);
nRPN = nSize;
memcpy( pRPN, pData, nSize * sizeof( FormulaToken* ) );
memcpy( pRPN.get(), pData, nSize * sizeof( FormulaToken* ) );
}
FormulaToken** GetArray() const { return pCode.get(); }
@@ -372,11 +372,11 @@ public:
return FormulaTokenArrayStandardRange(pCode.get(), nLen);
}
FormulaToken** GetCode() const { return pRPN; }
FormulaToken** GetCode() const { return pRPN.get(); }
FormulaTokenArrayStandardRange RPNTokens() const
{
return FormulaTokenArrayStandardRange(pRPN, nRPN);
return FormulaTokenArrayStandardRange(pRPN.get(), nRPN);
}
FormulaTokenArrayReferencesRange References() const
+25 -23
View File
@@ -1909,8 +1909,9 @@ std::unique_ptr<ScTokenArray> ScTokenArray::Clone() const
}
if( nRPN )
{
pp = p->pRPN = new FormulaToken*[ nRPN ];
memcpy( pp, pRPN, nRPN * sizeof( formula::FormulaToken* ) );
p->pRPN = std::make_unique<FormulaToken*[]>(nRPN);
pp = p->pRPN.get();
memcpy( pp, pRPN.get(), nRPN * sizeof( formula::FormulaToken* ) );
for( sal_uInt16 i = 0; i < nRPN; i++, pp++ )
{
FormulaToken* t = *pp;
@@ -1968,8 +1969,9 @@ ScTokenArray ScTokenArray::CloneValue() const
}
if( nRPN )
{
pp = aNew.pRPN = new FormulaToken*[ nRPN ];
memcpy( pp, pRPN, nRPN * sizeof( formula::FormulaToken* ) );
aNew.pRPN = std::make_unique<FormulaToken*[]>(nRPN);
pp = aNew.pRPN.get();
memcpy( pp, pRPN.get(), nRPN * sizeof( formula::FormulaToken* ) );
for( sal_uInt16 i = 0; i < nRPN; i++, pp++ )
{
FormulaToken* t = *pp;
@@ -2558,7 +2560,7 @@ void ScTokenArray::ReadjustAbsolute3DReferences( const ScDocument& rOldDoc, ScDo
void ScTokenArray::AdjustAbsoluteRefs( const ScDocument& rOldDoc, const ScAddress& rOldPos, const ScAddress& rNewPos,
bool bCheckCopyRange)
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN, true);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN, true);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -2622,7 +2624,7 @@ void adjustRelativeTabRef(ScSingleRefData& rRef, SCTAB nOldTab, SCTAB nNewTab, b
void ScTokenArray::AdjustRelativeTabRefs(SCTAB nOldTab, SCTAB nNewTab, sc::TargetTabState eMode)
{
const bool bInsertedTab = (eMode == sc::TargetTabState::Inserted);
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN, true);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN, true);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -2657,7 +2659,7 @@ void ScTokenArray::AdjustRelativeTabRefs(SCTAB nOldTab, SCTAB nNewTab, sc::Targe
void ScTokenArray::AdjustSheetLocalNameReferences( SCTAB nOldTab, SCTAB nNewTab )
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN, false);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN, false);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -2705,7 +2707,7 @@ void ScTokenArray::AdjustSheetLocalNameReferences( SCTAB nOldTab, SCTAB nNewTab
bool ScTokenArray::ReferencesSheet( SCTAB nTab, SCTAB nPosTab ) const
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN, false);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN, false);
for (size_t j=0; j<2; ++j)
{
FormulaToken* const * pp = aPtrs.maPointerRange[j].mpStart;
@@ -3182,7 +3184,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon
}
}
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -3427,7 +3429,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove(
assert(!"can't move");
}
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -3576,7 +3578,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove(
void ScTokenArray::MoveReferenceColReorder(
const ScAddress& rPos, SCTAB nTab, SCROW nRow1, SCROW nRow2, const sc::ColRowReorderMapType& rColMap )
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -3645,7 +3647,7 @@ void ScTokenArray::MoveReferenceColReorder(
void ScTokenArray::MoveReferenceRowReorder( const ScAddress& rPos, SCTAB nTab, SCCOL nCol1, SCCOL nCol2, const sc::ColRowReorderMapType& rRowMap )
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -3872,7 +3874,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInName(
// Copying cells does not modify named expressions.
return aRes;
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4147,7 +4149,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInMovedName( const sc::RefUpdat
sc::RefUpdateResult aRes;
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4310,7 +4312,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnDeletedTab( const sc::RefUpda
ScAddress aNewPos = rOldPos;
ScRangeUpdater::UpdateDeleteTab( aNewPos, rCxt);
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4393,7 +4395,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnInsertedTab( const sc::RefUpd
if (rCxt.mnInsertPos <= rOldPos.Tab())
aNewPos.IncTab(rCxt.mnSheets);
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4487,7 +4489,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMovedTab( const sc::RefUpdate
aRes.mnTab = aNewPos.Tab(); // this sets the new tab position used when deleting
}
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4561,7 +4563,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMovedTab( const sc::RefUpdate
void ScTokenArray::AdjustReferenceOnMovedOrigin( const ScAddress& rOldPos, const ScAddress& rNewPos )
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4611,7 +4613,7 @@ void ScTokenArray::AdjustReferenceOnMovedOrigin( const ScAddress& rOldPos, const
void ScTokenArray::AdjustReferenceOnMovedOriginIfOtherSheet( const ScAddress& rOldPos, const ScAddress& rNewPos )
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4665,7 +4667,7 @@ void ScTokenArray::AdjustReferenceOnMovedOriginIfOtherSheet( const ScAddress& rO
void ScTokenArray::AdjustReferenceOnCopy( const ScAddress& rNewPos )
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN, false);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN, false);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4848,7 +4850,7 @@ void checkBounds(
void ScTokenArray::CheckRelativeReferenceBounds(
const sc::RefUpdateContext& rCxt, const ScAddress& rPos, SCROW nGroupLen, std::vector<SCROW>& rBounds ) const
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4883,7 +4885,7 @@ void ScTokenArray::CheckRelativeReferenceBounds(
void ScTokenArray::CheckRelativeReferenceBounds(
const ScAddress& rPos, SCROW nGroupLen, const ScRange& rRange, std::vector<SCROW>& rBounds ) const
{
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken** pp = aPtrs.maPointerRange[j].mpStart;
@@ -4920,7 +4922,7 @@ void ScTokenArray::CheckExpandReferenceBounds(
const sc::RefUpdateContext& rCxt, const ScAddress& rPos, SCROW nGroupLen, std::vector<SCROW>& rBounds ) const
{
const SCROW nInsRow = rCxt.maRange.aStart.Row();
TokenPointers aPtrs( pCode.get(), nLen, pRPN, nRPN);
TokenPointers aPtrs( pCode.get(), nLen, pRPN.get(), nRPN);
for (size_t j=0; j<2; ++j)
{
FormulaToken* const * pp = aPtrs.maPointerRange[j].mpStart;