diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx index 351b2edd48f2..2a9f3f379eb1 100644 --- a/formula/source/core/api/token.cxx +++ b/formula/source/core/api/token.cxx @@ -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(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 ] ); diff --git a/include/formula/tokenarray.hxx b/include/formula/tokenarray.hxx index 06c5723bdc52..933c242c8e41 100644 --- a/include/formula/tokenarray.hxx +++ b/include/formula/tokenarray.hxx @@ -233,7 +233,7 @@ class FORMULA_DLLPUBLIC FormulaTokenArray { protected: std::unique_ptr pCode; // Token code array - FormulaToken** pRPN; // RPN array + std::unique_ptr 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(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 diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index b9ac09864110..2d0b5fe6a5dd 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -1909,8 +1909,9 @@ std::unique_ptr ScTokenArray::Clone() const } if( nRPN ) { - pp = p->pRPN = new FormulaToken*[ nRPN ]; - memcpy( pp, pRPN, nRPN * sizeof( formula::FormulaToken* ) ); + p->pRPN = std::make_unique(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(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& 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& 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& 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;