diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2017-05-30 20:14:15 -0400 |
---|---|---|
committer | Kohei Yoshida <libreoffice@kohei.us> | 2017-06-01 15:32:00 +0200 |
commit | 5ecb3f4625188d02e85a3daef76ccf7f26b33a61 (patch) | |
tree | 411a48e9fdcece29c83907e686e928d0bbb7521d /sc/source/core/data/dpitemdata.cxx | |
parent | f681a8623059345ad0103294f22de89e287820de (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.cxx | 31 |
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); |