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;

Reply via email to