summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-09-04 09:02:15 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-09-04 14:03:19 +0200
commit45b17d9d5bf98aefba392da6271c7077c1363238 (patch)
tree6c8825ac3b8fb8147d9e488eb64aacd5bd7e0e42 /formula
parent10d86d8526126956758501604f1bd2e3fe102076 (diff)
store ScTokenArray by value in SharedFormulaBuffer
Change-Id: Ibff3c2fea3cadc234266953ab15ae5f25c4ac1e1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121626 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'formula')
-rw-r--r--formula/source/core/api/token.cxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index c5b69acf2c90..89ae03162778 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -598,6 +598,11 @@ FormulaTokenArray::FormulaTokenArray( const FormulaTokenArray& rArr )
Assign( rArr );
}
+FormulaTokenArray::FormulaTokenArray( FormulaTokenArray&& rArr )
+{
+ Move( std::move(rArr) );
+}
+
FormulaTokenArray::~FormulaTokenArray()
{
FormulaTokenArray::Clear();
@@ -646,6 +651,23 @@ void FormulaTokenArray::Assign( const FormulaTokenArray& r )
}
}
+void FormulaTokenArray::Move( FormulaTokenArray&& r )
+{
+ pCode = std::move(r.pCode);
+ pRPN = r.pRPN;
+ r.pRPN = nullptr;
+ nLen = r.nLen;
+ r.nLen = 0;
+ nRPN = r.nRPN;
+ r.nRPN = 0;
+ nError = r.nError;
+ nMode = r.nMode;
+ bHyperLink = r.bHyperLink;
+ mbFromRangeName = r.mbFromRangeName;
+ mbShareable = r.mbShareable;
+ mbFinalized = r.mbFinalized;
+}
+
/// Optimisation for efficiently creating StringXML placeholders
void FormulaTokenArray::Assign( sal_uInt16 nCode, FormulaToken **pTokens )
{
@@ -675,6 +697,13 @@ FormulaTokenArray& FormulaTokenArray::operator=( const FormulaTokenArray& rArr )
return *this;
}
+FormulaTokenArray& FormulaTokenArray::operator=( FormulaTokenArray&& rArr )
+{
+ Clear();
+ Move( std::move(rArr) );
+ return *this;
+}
+
void FormulaTokenArray::Clear()
{
if( nRPN ) DelRPN();