diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-07-27 19:16:05 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-07-28 09:16:08 +0200 |
commit | 54f86db0c9267825e9283c523e990dfe71bf3fc9 (patch) | |
tree | 138d8e9f3f9116e7caa1ce4334db12182eabfd60 | |
parent | 28dc1e713cfc5b5ea38e15f032aba72d05e40b33 (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.cxx | 76 |
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; |