[Libreoffice-commits] core.git: sc/inc sc/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Mon Nov 12 05:12:08 UTC 2018
sc/inc/formularesult.hxx | 4 ++--
sc/source/core/tool/formularesult.cxx | 22 +++++++++++++++-------
2 files changed, 17 insertions(+), 9 deletions(-)
New commits:
commit 69f279d7fd266c80584eb845291a6ba3df26631b
Author: Dennis Francis <dennis.francis at collabora.co.uk>
AuthorDate: Thu Nov 8 09:42:04 2018 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Mon Nov 12 06:11:47 2018 +0100
Re-order the members of ScFormulaResult...
to make the common access pattern cache friendly.
For example, in case of a large sum like =SUM(A1:A50000)
where the column A itself is composed of formulas, the inner
loop of computation involves accessing ScFormulaResult's of
each formulacell of column A. Recently this was made faster
by the use of a "cache" flag (commit 77f7b4768a), so to get
the result it just need access to the cache bool-flag and the
mfValue member. Hence it makes sense to group the bools
together with the mfValue member.
Change-Id: If12d0736ba98b9d74e7b96304fce71e8e6e66619
Reviewed-on: https://gerrit.libreoffice.org/63063
Tested-by: Jenkins
Reviewed-by: Dennis Francis <dennis.francis at collabora.com>
diff --git a/sc/inc/formularesult.hxx b/sc/inc/formularesult.hxx
index fea35eb49a31..d6e9293569ac 100644
--- a/sc/inc/formularesult.hxx
+++ b/sc/inc/formularesult.hxx
@@ -77,13 +77,13 @@ class ScFormulaResult
double mfValue; // double result direct for performance and memory consumption
const formula::FormulaToken* mpToken; // if not, result token obtained from interpreter
};
- FormulaError mnError; // error code
bool mbToken :1; // whether content of union is a token
bool mbEmpty :1; // empty cell result
bool mbEmptyDisplayedAsString :1; // only if mbEmpty
- Multiline meMultiline :2; // result is multiline
// If set it implies that the result is a simple double (in mfValue) and no error
bool mbValueCached :1;
+ Multiline meMultiline :2; // result is multiline
+ FormulaError mnError; // error code
/** Reset mnError, mbEmpty and mbEmptyDisplayedAsString to their defaults
prior to assigning other types */
diff --git a/sc/source/core/tool/formularesult.cxx b/sc/source/core/tool/formularesult.cxx
index 80d6ccfbc0f4..c81bb1e54d22 100644
--- a/sc/source/core/tool/formularesult.cxx
+++ b/sc/source/core/tool/formularesult.cxx
@@ -23,17 +23,21 @@ FormulaResultValue::FormulaResultValue( FormulaError nErr ) : meType(Error), mfV
}
ScFormulaResult::ScFormulaResult() :
- mpToken(nullptr), mnError(FormulaError::NONE), mbToken(true),
- mbEmpty(false), mbEmptyDisplayedAsString(false),
+ mpToken(nullptr),
+ mbToken(true),
+ mbEmpty(false),
+ mbEmptyDisplayedAsString(false),
+ mbValueCached(false),
meMultiline(MULTILINE_UNKNOWN),
- mbValueCached(false) {}
+ mnError(FormulaError::NONE) {}
ScFormulaResult::ScFormulaResult( const ScFormulaResult & r ) :
- mnError( r.mnError), mbToken( r.mbToken),
+ mbToken( r.mbToken),
mbEmpty( r.mbEmpty),
mbEmptyDisplayedAsString( r.mbEmptyDisplayedAsString),
+ mbValueCached( r.mbValueCached),
meMultiline( r.meMultiline),
- mbValueCached( r.mbValueCached)
+ mnError( r.mnError)
{
if (mbToken)
{
@@ -60,8 +64,12 @@ ScFormulaResult::ScFormulaResult( const ScFormulaResult & r ) :
}
ScFormulaResult::ScFormulaResult( const formula::FormulaToken* p ) :
- mnError(FormulaError::NONE), mbToken(false), mbEmpty(false), mbEmptyDisplayedAsString(false),
- meMultiline(MULTILINE_UNKNOWN), mbValueCached(false)
+ mbToken(false),
+ mbEmpty(false),
+ mbEmptyDisplayedAsString(false),
+ mbValueCached(false),
+ meMultiline(MULTILINE_UNKNOWN),
+ mnError(FormulaError::NONE)
{
SetToken( p);
}
More information about the Libreoffice-commits
mailing list