include/tools/urlobj.hxx     |   16 ++++++++--------
 tools/source/fsys/urlobj.cxx |   38 +++++++++++++++++++-------------------
 2 files changed, 27 insertions(+), 27 deletions(-)

New commits:
commit 7805a224b96897807e49fd49dd5276d6089b0b5c
Author:     Noel Grandin <n...@peralex.com>
AuthorDate: Sat Nov 20 20:28:42 2021 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Nov 22 07:50:59 2021 +0100

    tdf#133835 speedup calc autofilter (6)
    
    INetURLObject::SetPort Avoid allocating temporary string on heap,
    saves 20%
    
    Change-Id: I61ba4bd80c561266341143e35650b54b9d70f1d3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125624
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/include/tools/urlobj.hxx b/include/tools/urlobj.hxx
index 8049e165d7a0..6413d2787f96 100644
--- a/include/tools/urlobj.hxx
+++ b/include/tools/urlobj.hxx
@@ -938,17 +938,17 @@ private:
 
         sal_Int32 getEnd() const { return m_nBegin + m_nLength; }
 
-        inline sal_Int32 clear();
+        sal_Int32 clear();
 
-        inline sal_Int32 set(OUStringBuffer & rString,
-                             OUString const & rSubString,
-                             sal_Int32 nTheBegin);
+        sal_Int32 set(OUStringBuffer & rString,
+                      std::u16string_view rSubString,
+                      sal_Int32 nTheBegin);
 
-        inline sal_Int32 set(OUString & rString,
-                             OUString const & rSubString);
+        sal_Int32 set(OUString & rString,
+                      std::u16string_view rSubString);
 
-        inline sal_Int32 set(OUStringBuffer & rString,
-                             OUString const & rSubString);
+        sal_Int32 set(OUStringBuffer & rString,
+                      std::u16string_view rSubString);
 
         inline void operator +=(sal_Int32 nDelta);
 
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index 9a5a82ceb632..d265111d2e2e 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -221,7 +221,7 @@ using namespace css;
    segment = *(pchar / ";")
  */
 
-inline sal_Int32 INetURLObject::SubString::clear()
+sal_Int32 INetURLObject::SubString::clear()
 {
     sal_Int32 nDelta = -m_nLength;
     m_nBegin = -1;
@@ -229,32 +229,33 @@ inline sal_Int32 INetURLObject::SubString::clear()
     return nDelta;
 }
 
-inline sal_Int32 INetURLObject::SubString::set(OUStringBuffer & rString,
-                                       OUString const & rSubString)
+sal_Int32 INetURLObject::SubString::set(OUStringBuffer & rString,
+                                       std::u16string_view rSubString)
 {
-    sal_Int32 nDelta = rSubString.getLength() - m_nLength;
+    sal_Int32 nDelta = rSubString.size() - m_nLength;
 
     rString.remove(m_nBegin, m_nLength);
     rString.insert(m_nBegin, rSubString);
 
-    m_nLength = rSubString.getLength();
+    m_nLength = rSubString.size();
     return nDelta;
 }
 
-inline sal_Int32 INetURLObject::SubString::set(OUString & rString,
-                                       OUString const & rSubString)
+sal_Int32 INetURLObject::SubString::set(OUString & rString,
+                                       std::u16string_view rSubString)
 {
-    sal_Int32 nDelta = rSubString.getLength() - m_nLength;
+    sal_Int32 nDelta = rSubString.size() - m_nLength;
 
-    rString = rString.replaceAt(m_nBegin, m_nLength, rSubString);
+    rString = OUString::Concat(rString.subView(0, m_nBegin)) + 
+             rSubString + rString.subView(m_nBegin + m_nLength);
 
-    m_nLength = rSubString.getLength();
+    m_nLength = rSubString.size();
     return nDelta;
 }
 
-inline sal_Int32 INetURLObject::SubString::set(OUStringBuffer & rString,
-                                       OUString const & rSubString,
-                                               sal_Int32 nTheBegin)
+sal_Int32 INetURLObject::SubString::set(OUStringBuffer & rString,
+                                        std::u16string_view rSubString,
+                                        sal_Int32 nTheBegin)
 {
     m_nBegin = nTheBegin;
     return set(rString, rSubString);
@@ -1411,7 +1412,7 @@ bool INetURLObject::setAbsURIRef(OUString const & 
rTheAbsURIRef,
             {
                 aSynAbsURIRef.append(':');
                 m_aPort.set(aSynAbsURIRef,
-                    OUString(pPort + 1, pHostPortEnd - (pPort + 1)),
+                    std::u16string_view{pPort + 1, 
static_cast<size_t>(pHostPortEnd - (pPort + 1))},
                     aSynAbsURIRef.getLength());
             }
         }
@@ -2334,7 +2335,7 @@ bool INetURLObject::setPassword(std::u16string_view 
rThePassword,
     else if (m_aHost.isPresent())
     {
         m_aAbsURIRef.insert(m_aHost.getBegin(), ":@" );
-        m_aUser.set(m_aAbsURIRef, OUString(), m_aHost.getBegin());
+        m_aUser.set(m_aAbsURIRef, std::u16string_view{}, m_aHost.getBegin());
         nDelta
             = m_aAuth.set(m_aAbsURIRef, aNewAuth, m_aHost.getBegin() + 1) + 2;
     }
@@ -2343,7 +2344,7 @@ bool INetURLObject::setPassword(std::u16string_view 
rThePassword,
     else
     {
         m_aAbsURIRef.insert(m_aPath.getBegin(), u':');
-        m_aUser.set(m_aAbsURIRef, OUString(), m_aPath.getBegin());
+        m_aUser.set(m_aAbsURIRef, std::u16string_view{}, m_aPath.getBegin());
         nDelta
             = m_aAuth.set(m_aAbsURIRef, aNewAuth, m_aPath.getBegin() + 1) + 1;
     }
@@ -3996,14 +3997,13 @@ bool INetURLObject::SetPort(sal_uInt32 nThePort)
 {
     if (getSchemeInfo().m_bPort && m_aHost.isPresent())
     {
-        OUString aNewPort(OUString::number(nThePort));
         sal_Int32 nDelta;
         if (m_aPort.isPresent())
-            nDelta = m_aPort.set(m_aAbsURIRef, aNewPort);
+            nDelta = m_aPort.set(m_aAbsURIRef, OUString::number(nThePort));
         else
         {
             m_aAbsURIRef.insert(m_aHost.getEnd(), u':');
-            nDelta = m_aPort.set(m_aAbsURIRef, aNewPort, m_aHost.getEnd() + 1)
+            nDelta = m_aPort.set(m_aAbsURIRef, OUString::number(nThePort), 
m_aHost.getEnd() + 1)
                          + 1;
         }
         m_aPath += nDelta;

Reply via email to