sw/source/core/unocore/unoport.cxx | 76 ++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 34 deletions(-)
New commits: commit 54f86db0c9267825e9283c523e990dfe71bf3fc9 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Jul 27 19:16:05 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Thu Jul 28 09:16:08 2022 +0200 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.gran...@collabora.co.uk> 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;