tools/source/xml/XmlWriter.cxx |   17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

New commits:
commit 3e38fdacba022a9d8001a0f856ef33b4d14857cb
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon Apr 15 08:19:25 2024 +0100
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Apr 18 08:18:21 2024 +0200

    Optimize a bit, to avoid a copy of the vector
    
    Change-Id: I747662e346151e2e055cb803278c2a6c7709f273
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166166
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/tools/source/xml/XmlWriter.cxx b/tools/source/xml/XmlWriter.cxx
index 8bbd7951a3b8..afc6dd9b73be 100644
--- a/tools/source/xml/XmlWriter.cxx
+++ b/tools/source/xml/XmlWriter.cxx
@@ -29,6 +29,15 @@ int funcCloseCallback(void* pContext)
     return 0; // 0 or -1 in case of error
 }
 
+template <typename T>
+requires(sizeof(T) == sizeof(char)) void attributeBase64_impl(xmlTextWriterPtr 
writer,
+                                                              const char* 
name, const T* value,
+                                                              int size)
+{
+    (void)xmlTextWriterStartAttribute(writer, BAD_CAST(name));
+    (void)xmlTextWriterWriteBase64(writer, reinterpret_cast<const 
char*>(value), 0, size);
+    (void)xmlTextWriterEndAttribute(writer);
+}
 } // end anonymous namespace
 
 struct XmlWriterImpl
@@ -103,16 +112,12 @@ void XmlWriter::endElement() { 
(void)xmlTextWriterEndElement(mpImpl->mpWriter);
 
 void XmlWriter::attributeBase64(const char* pName, std::vector<sal_uInt8> 
const& rValueInBytes)
 {
-    std::vector<char> aSignedBytes(rValueInBytes.begin(), rValueInBytes.end());
-    attributeBase64(pName, aSignedBytes);
+    attributeBase64_impl(mpImpl->mpWriter, pName, rValueInBytes.data(), 
rValueInBytes.size());
 }
 
 void XmlWriter::attributeBase64(const char* pName, std::vector<char> const& 
rValueInBytes)
 {
-    xmlChar* xmlName = BAD_CAST(pName);
-    (void)xmlTextWriterStartAttribute(mpImpl->mpWriter, xmlName);
-    (void)xmlTextWriterWriteBase64(mpImpl->mpWriter, rValueInBytes.data(), 0, 
rValueInBytes.size());
-    (void)xmlTextWriterEndAttribute(mpImpl->mpWriter);
+    attributeBase64_impl(mpImpl->mpWriter, pName, rValueInBytes.data(), 
rValueInBytes.size());
 }
 
 void XmlWriter::attribute(const char* name, const OString& value)

Reply via email to