summaryrefslogtreecommitdiff
path: root/sc/source/core/data/dpitemdata.cxx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2017-05-30 20:14:15 -0400
committerKohei Yoshida <libreoffice@kohei.us>2017-06-01 15:32:00 +0200
commit5ecb3f4625188d02e85a3daef76ccf7f26b33a61 (patch)
tree411a48e9fdcece29c83907e686e928d0bbb7521d /sc/source/core/data/dpitemdata.cxx
parentf681a8623059345ad0103294f22de89e287820de (diff)
tdf#107945: store rtl_uString pointers instead of heap OUString objects.
Change-Id: I61079e041a79195f9e9cb77ce80368ef7e909cef Reviewed-on: https://gerrit.libreoffice.org/38288 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
Diffstat (limited to 'sc/source/core/data/dpitemdata.cxx')
-rw-r--r--sc/source/core/data/dpitemdata.cxx31
1 files changed, 19 insertions, 12 deletions
diff --git a/sc/source/core/data/dpitemdata.cxx b/sc/source/core/data/dpitemdata.cxx
index fa8021f62d4a..0fd3357c4c9e 100644
--- a/sc/source/core/data/dpitemdata.cxx
+++ b/sc/source/core/data/dpitemdata.cxx
@@ -83,7 +83,9 @@ ScDPItemData::ScDPItemData(const ScDPItemData& r) :
{
case String:
case Error:
- mpString = mbStringInterned ? r.mpString : new OUString(*r.mpString);
+ mpString = r.mpString;
+ if (!mbStringInterned)
+ rtl_uString_acquire(mpString);
break;
case Value:
case RangeStart:
@@ -104,14 +106,17 @@ void ScDPItemData::DisposeString()
if (!mbStringInterned)
{
if (meType == String || meType == Error)
- delete mpString;
+ rtl_uString_release(mpString);
}
mbStringInterned = false;
}
ScDPItemData::ScDPItemData(const OUString& rStr) :
- mpString(new OUString(rStr)), meType(String), mbStringInterned(false) {}
+ mpString(rStr.pData), meType(String), mbStringInterned(false)
+{
+ rtl_uString_acquire(mpString);
+}
ScDPItemData::ScDPItemData(sal_Int32 nGroupType, sal_Int32 nValue) :
meType(GroupValue), mbStringInterned(false)
@@ -134,11 +139,12 @@ void ScDPItemData::SetEmpty()
void ScDPItemData::SetString(const OUString& rS)
{
DisposeString();
- mpString = new OUString(rS);
+ mpString = rS.pData;
+ rtl_uString_acquire(mpString);
meType = String;
}
-void ScDPItemData::SetString(const OUString* pS)
+void ScDPItemData::SetStringInterned( rtl_uString* pS )
{
DisposeString();
mpString = pS;
@@ -174,9 +180,9 @@ void ScDPItemData::SetRangeLast()
meType = RangeStart;
}
-void ScDPItemData::SetErrorString(const OUString* pS)
+void ScDPItemData::SetErrorStringInterned( rtl_uString* pS )
{
- SetString(pS);
+ SetStringInterned(pS);
meType = Error;
}
@@ -234,13 +240,14 @@ ScDPItemData& ScDPItemData::operator= (const ScDPItemData& r)
{
DisposeString();
meType = r.meType;
- mbStringInterned = false;
switch (r.meType)
{
case String:
case Error:
- mpString = r.mbStringInterned ? r.mpString : new OUString(*r.mpString);
mbStringInterned = r.mbStringInterned;
+ mpString = r.mpString;
+ if (!mbStringInterned)
+ rtl_uString_acquire(mpString);
break;
case Value:
case RangeStart:
@@ -286,7 +293,7 @@ void ScDPItemData::Dump(const char* msg) const
break;
case Error:
printf("error: %s\n",
- OUStringToOString(*mpString, RTL_TEXTENCODING_UTF8).getStr());
+ OUStringToOString(OUString(mpString), RTL_TEXTENCODING_UTF8).getStr());
break;
case GroupValue:
printf("group value: group type = %d value = %d\n",
@@ -294,7 +301,7 @@ void ScDPItemData::Dump(const char* msg) const
break;
case String:
printf("string: %s\n",
- OUStringToOString(*mpString, RTL_TEXTENCODING_UTF8).getStr());
+ OUStringToOString(OUString(mpString), RTL_TEXTENCODING_UTF8).getStr());
break;
case Value:
printf("value: %g\n", mfValue);
@@ -325,7 +332,7 @@ OUString ScDPItemData::GetString() const
{
case String:
case Error:
- return *mpString;
+ return OUString(mpString);
case Value:
case RangeStart:
return OUString::number(mfValue);