summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2022-07-27 19:16:05 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-07-28 09:16:08 +0200
commit54f86db0c9267825e9283c523e990dfe71bf3fc9 (patch)
tree138d8e9f3f9116e7caa1ce4334db12182eabfd60
parent28dc1e713cfc5b5ea38e15f032aba72d05e40b33 (diff)
tdf#119840 reduce OUString allocation
this is hit fairly hard when iterating over the document Change-Id: I08050fc3262ab1951c1800e6daedb720b1f216df Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137537 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/source/core/unocore/unoport.cxx76
1 files changed, 42 insertions, 34 deletions
diff --git a/sw/source/core/unocore/unoport.cxx b/sw/source/core/unocore/unoport.cxx
index fa8b93eb84de..3fcc05e648bd 100644
--- a/sw/source/core/unocore/unoport.cxx
+++ b/sw/source/core/unocore/unoport.cxx
@@ -215,6 +215,26 @@ void SwXTextPortion::GetPropertyValue(
SwUnoCursor *pUnoCursor,
std::unique_ptr<SfxItemSet> &pSet )
{
+ static constexpr OUStringLiteral TEXT = u"Text";
+ static constexpr OUStringLiteral TEXTFIELD = u"TextField";
+ static constexpr OUStringLiteral FRAME = u"Frame";
+ static constexpr OUStringLiteral FOOTNOTE = u"Footnote";
+ static constexpr OUStringLiteral REFERENCE_MARK = u"" UNO_NAME_REFERENCE_MARK;
+ static constexpr OUStringLiteral DOCUMENT_INDEX_MARK = u"" UNO_NAME_DOCUMENT_INDEX_MARK;
+ static constexpr OUStringLiteral BOOKMARK = u"" UNO_NAME_BOOKMARK;
+ static constexpr OUStringLiteral REDLINE = u"Redline";
+ static constexpr OUStringLiteral RUBY = u"Ruby";
+ static constexpr OUStringLiteral SOFTPAGEBREAK = u"SoftPageBreak";
+ static constexpr OUStringLiteral META = u"" UNO_NAME_META;
+ static constexpr OUStringLiteral TEXTFIELDSTART = u"TextFieldStart";
+ static constexpr OUStringLiteral TEXTFIELDSEPARATOR = u"TextFieldSeparator";
+ static constexpr OUStringLiteral TEXTFIELDEND = u"TextFieldEnd";
+ static constexpr OUStringLiteral TEXTFIELDSTARTEND = u"TextFieldStartEnd";
+ static constexpr OUStringLiteral ANNOTATION = u"Annotation";
+ static constexpr OUStringLiteral ANNOTATIONEND = u"AnnotationEnd";
+ static constexpr OUStringLiteral LINEBREAK = u"LineBreak";
+ static constexpr OUStringLiteral CONTENT_CONTROL = u"" UNO_NAME_CONTENT_CONTROL;
+
OSL_ENSURE( pUnoCursor, "UNO cursor missing" );
if (!pUnoCursor)
return;
@@ -222,48 +242,36 @@ void SwXTextPortion::GetPropertyValue(
{
case FN_UNO_TEXT_PORTION_TYPE:
{
- const char* pRet;
+ OUString sRet;
switch (m_ePortionType)
{
- case PORTION_TEXT: pRet = "Text";break;
- case PORTION_FIELD: pRet = "TextField";break;
- case PORTION_FRAME: pRet = "Frame";break;
- case PORTION_FOOTNOTE: pRet = "Footnote";break;
+ case PORTION_TEXT: sRet = TEXT; break;
+ case PORTION_FIELD: sRet = TEXTFIELD; break;
+ case PORTION_FRAME: sRet = FRAME; break;
+ case PORTION_FOOTNOTE: sRet = FOOTNOTE; break;
case PORTION_REFMARK_START:
- case PORTION_REFMARK_END: pRet = UNO_NAME_REFERENCE_MARK;break;
+ case PORTION_REFMARK_END: sRet = REFERENCE_MARK; break;
case PORTION_TOXMARK_START:
- case PORTION_TOXMARK_END: pRet = UNO_NAME_DOCUMENT_INDEX_MARK;break;
- case PORTION_BOOKMARK_START :
- case PORTION_BOOKMARK_END : pRet = UNO_NAME_BOOKMARK;break;
+ case PORTION_TOXMARK_END: sRet = DOCUMENT_INDEX_MARK; break;
+ case PORTION_BOOKMARK_START:
+ case PORTION_BOOKMARK_END : sRet = BOOKMARK; break;
case PORTION_REDLINE_START:
- case PORTION_REDLINE_END: pRet = "Redline";break;
+ case PORTION_REDLINE_END: sRet = REDLINE; break;
case PORTION_RUBY_START:
- case PORTION_RUBY_END: pRet = "Ruby";break;
- case PORTION_SOFT_PAGEBREAK:pRet = "SoftPageBreak";break;
- case PORTION_META: pRet = UNO_NAME_META; break;
- case PORTION_FIELD_START:pRet = "TextFieldStart";break;
- case PORTION_FIELD_SEP: pRet = "TextFieldSeparator";break;
- case PORTION_FIELD_END:pRet = "TextFieldEnd";break;
- case PORTION_FIELD_START_END:pRet = "TextFieldStartEnd";break;
- case PORTION_ANNOTATION:
- pRet = "Annotation";
- break;
- case PORTION_ANNOTATION_END:
- pRet = "AnnotationEnd";
- break;
- case PORTION_LINEBREAK:
- pRet = "LineBreak";
- break;
- case PORTION_CONTENT_CONTROL:
- pRet = UNO_NAME_CONTENT_CONTROL;
- break;
- default:
- pRet = nullptr;
+ case PORTION_RUBY_END: sRet = RUBY; break;
+ case PORTION_SOFT_PAGEBREAK: sRet = SOFTPAGEBREAK; break;
+ case PORTION_META: sRet = META; break;
+ case PORTION_FIELD_START: sRet = TEXTFIELDSTART; break;
+ case PORTION_FIELD_SEP: sRet = TEXTFIELDSEPARATOR; break;
+ case PORTION_FIELD_END: sRet = TEXTFIELDEND; break;
+ case PORTION_FIELD_START_END:sRet = TEXTFIELDSTARTEND; break;
+ case PORTION_ANNOTATION: sRet = ANNOTATION; break;
+ case PORTION_ANNOTATION_END: sRet = ANNOTATIONEND; break;
+ case PORTION_LINEBREAK: sRet = LINEBREAK; break;
+ case PORTION_CONTENT_CONTROL:sRet = CONTENT_CONTROL; break;
+ default: break;
}
- OUString sRet;
- if( pRet )
- sRet = OUString::createFromAscii( pRet );
rVal <<= sRet;
}
break;