[Libreoffice-commits] .: Branch 'feature/matrix-new-backend' - 3 commits - sc/inc sc/qa sc/source
Kohei Yoshida
kohei at kemper.freedesktop.org
Tue Jul 17 13:00:57 PDT 2012
sc/inc/scmatrix.hxx | 46 +++++++++++----------------------------
sc/qa/unit/ucalc.cxx | 2 -
sc/source/core/data/cell.cxx | 8 +++---
sc/source/core/tool/scmatrix.cxx | 2 -
4 files changed, 20 insertions(+), 38 deletions(-)
New commits:
commit 1e33865cac30a7cd7d9696bbc91519a95a264aa0
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Tue Jul 17 15:55:38 2012 -0400
It's no longer possible to unionize value and string here...
Thereby leaving a note to discourage use of ScMatrixValue. Incidentally,
now all the unit test passes.
Change-Id: I5d12f8ab654f985ef43b887a22abb6de45fea1fc
diff --git a/sc/inc/scmatrix.hxx b/sc/inc/scmatrix.hxx
index 409fea5..034bc4d 100644
--- a/sc/inc/scmatrix.hxx
+++ b/sc/inc/scmatrix.hxx
@@ -49,16 +49,18 @@ const ScMatValType SC_MATVAL_EMPTY = SC_MATVAL_STRING | 0x04; // STRING plus
const ScMatValType SC_MATVAL_EMPTYPATH = SC_MATVAL_EMPTY | 0x08; // EMPTY plus flag
const ScMatValType SC_MATVAL_NONVALUE = SC_MATVAL_EMPTYPATH; // mask of all non-value bits
+/**
+ * Try NOT to use this struct. This struct should go away in a hopefully
+ * not so distant futture.
+ */
struct ScMatrixValue
{
- union {
- double fVal;
- const ::rtl::OUString* pS;
- };
+ double fVal;
+ rtl::OUString aStr;
ScMatValType nType;
/// Only valid if ScMatrix methods indicate so!
- const ::rtl::OUString& GetString() const { return pS ? *pS : EMPTY_OUSTRING; }
+ const ::rtl::OUString& GetString() const { return aStr; }
/// Only valid if ScMatrix methods indicate that this is no string!
sal_uInt16 GetError() const { return GetDoubleErrorValue( fVal); }
@@ -68,12 +70,8 @@ struct ScMatrixValue
ScMatrixValue() : fVal(0.0), nType(SC_MATVAL_EMPTY) {}
- ScMatrixValue(const ScMatrixValue& r) : fVal(r.fVal), nType(r.nType)
- {
- if (nType == SC_MATVAL_STRING)
- // This is probably not necessary but just in case...
- pS = r.pS;
- }
+ ScMatrixValue(const ScMatrixValue& r) :
+ fVal(r.fVal), aStr(r.aStr), nType(r.nType) {}
bool operator== (const ScMatrixValue& r) const
{
@@ -89,10 +87,8 @@ struct ScMatrixValue
default:
;
}
- if (!pS)
- return r.pS == NULL;
- return GetString().equals(r.GetString());
+ return aStr == r.aStr;
}
bool operator!= (const ScMatrixValue& r) const
@@ -102,13 +98,12 @@ struct ScMatrixValue
ScMatrixValue& operator= (const ScMatrixValue& r)
{
+ if (this == &r)
+ return *this;
+
nType = r.nType;
fVal = r.fVal;
-
- if (nType == SC_MATVAL_STRING)
- // This is probably not necessary but just in case...
- pS = r.pS;
-
+ aStr = r.aStr;
return *this;
}
};
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index ef7c916..8178a47 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -1209,7 +1209,7 @@ struct PartiallyFilledEmptyMatrix
else if (nCol == 8 && nRow == 2)
{
CPPUNIT_ASSERT_MESSAGE("element is not of value type", rVal.nType == SC_MATVAL_STRING);
- CPPUNIT_ASSERT_MESSAGE("element value is not what is expected", rVal.pS->equalsAscii("Test"));
+ CPPUNIT_ASSERT_MESSAGE("element value is not what is expected", rVal.aStr == "Test");
}
else if (nCol == 8 && nRow == 11)
{
diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx
index 6ab3d2d..0e34b35 100644
--- a/sc/source/core/data/cell.cxx
+++ b/sc/source/core/data/cell.cxx
@@ -1926,11 +1926,11 @@ void ScFormulaCell::GetURLResult( rtl::OUString& rURL, rtl::OUString& rCellText
if (xMat)
{
// determine if the matrix result is a string or value.
- ScMatrixValue nMatVal = xMat->Get(0, 1);
- if (!ScMatrix::IsValueType( nMatVal.nType))
- rURL = nMatVal.GetString();
+ if (!xMat->IsValue(0, 1))
+ rURL = xMat->GetString(0, 1);
else
- pFormatter->GetOutputString( nMatVal.fVal, nURLFormat, rURL, &pColor );
+ pFormatter->GetOutputString(
+ xMat->GetDouble(0, 1), nURLFormat, rURL, &pColor);
}
if(rURL.isEmpty())
diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx
index 3b1aecb..4dfa738 100644
--- a/sc/source/core/tool/scmatrix.cxx
+++ b/sc/source/core/tool/scmatrix.cxx
@@ -740,7 +740,7 @@ ScMatrixValue ScMatrixImpl::Get(SCSIZE nC, SCSIZE nR) const
break;
case mdds::mtm::element_string:
aVal.nType = SC_MATVAL_STRING;
- aVal.pS = &EMPTY_OUSTRING;
+ aVal.aStr = maMat.get_string(nR, nC);
break;
case mdds::mtm::element_empty:
// Empty path equals empty plus flag.
commit 4e671bbcfc6b70ada37cf29a3bec7fbc6af20b5b
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Tue Jul 17 15:22:52 2012 -0400
We no longer need density types.
Change-Id: I4a02e9e025b6004806350fc8c78f6080176df8d6
diff --git a/sc/inc/scmatrix.hxx b/sc/inc/scmatrix.hxx
index e1098c5..409fea5 100644
--- a/sc/inc/scmatrix.hxx
+++ b/sc/inc/scmatrix.hxx
@@ -131,14 +131,6 @@ class SC_DLLPUBLIC ScMatrix
ScMatrix& operator=( const ScMatrix&);
public:
- enum DensityType
- {
- FILLED_ZERO,
- FILLED_EMPTY,
- SPARSE_ZERO,
- SPARSE_EMPTY
- };
-
/**
* When adding all numerical matrix elements for a scalar result such as
* summation, the interpreter wants to separate the first non-zero value
commit 1b081bc369032e13fecccf6737331afc824eff01
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date: Tue Jul 17 15:15:32 2012 -0400
This is no longer true.
Change-Id: Id132c4bb7455acbdaa2287666523f42c20172f37
diff --git a/sc/inc/scmatrix.hxx b/sc/inc/scmatrix.hxx
index 984561e..e1098c5 100644
--- a/sc/inc/scmatrix.hxx
+++ b/sc/inc/scmatrix.hxx
@@ -117,11 +117,6 @@ struct ScMatrixValue
* Matrix data type that can store values of mixed types. Each element can
* be one of the following types: numeric, string, boolean, empty, and empty
* path.
- *
- * This class also supports four different density types: filled zero,
- * filled empty, sparse zero, and sparse empty. The filled density type
- * allocates memory for every single element at all times, whereas the
- * sparse density types allocates memory only for non-default elements.
*/
class SC_DLLPUBLIC ScMatrix
{
More information about the Libreoffice-commits
mailing list