[Libreoffice-commits] core.git: Branch 'feature/perfwork' - 3 commits - include/sax oox/source sax/source

Matúš Kukan matus.kukan at collabora.com
Fri Oct 3 03:26:43 PDT 2014


 include/sax/fshelper.hxx                |    1 -
 oox/source/core/xmlfilterbase.cxx       |    7 +++----
 sax/source/tools/CachedOutputStream.hxx |   14 ++++++++++----
 sax/source/tools/fastserializer.cxx     |    4 ++--
 sax/source/tools/fshelper.cxx           |   22 ++++++++++------------
 5 files changed, 25 insertions(+), 23 deletions(-)

New commits:
commit 06af390c362f9801b610c87307d31f99cf9afd6c
Author: Matúš Kukan <matus.kukan at collabora.com>
Date:   Fri Oct 3 11:35:46 2014 +0200

    FastSerializer: Use fixed sized Sequence directly as cache
    
    Well, at least the allocated space is fixed size.
    When passing that to XOutputStream, change the size in a hacky way.
    
    Change-Id: I24fa134286e3086beda25c9a6915549e7c69119a

diff --git a/sax/source/tools/CachedOutputStream.hxx b/sax/source/tools/CachedOutputStream.hxx
index 82c2b66..8877bb7 100644
--- a/sax/source/tools/CachedOutputStream.hxx
+++ b/sax/source/tools/CachedOutputStream.hxx
@@ -28,10 +28,14 @@ class CachedOutputStream
     /// Output stream, usually writing data into files.
     css::uno::Reference< css::io::XOutputStream > mxOutputStream;
     sal_Int32 mnCacheWrittenSize;
-    sal_Int8 mpCache[ mnMaximumSize ];
+    const css::uno::Sequence<sal_Int8> mpCache;
+    uno_Sequence *pSeq;
 
 public:
-    CachedOutputStream() : mnCacheWrittenSize(0) {}
+    CachedOutputStream() : mnCacheWrittenSize(0)
+                         , mpCache(mnMaximumSize)
+                         , pSeq(mpCache.get())
+    {}
     ~CachedOutputStream() {}
 
     css::uno::Reference< css::io::XOutputStream > getOutputStream() const
@@ -62,14 +66,16 @@ public:
             }
         }
 
-        memcpy(mpCache + mnCacheWrittenSize, pStr, nLen);
+        memcpy(pSeq->elements + mnCacheWrittenSize, pStr, nLen);
         mnCacheWrittenSize += nLen;
     }
 
     /// immediately write buffer into mxOutputStream and clear
     void flush()
     {
-        mxOutputStream->writeBytes( css::uno::Sequence<sal_Int8>(mpCache, mnCacheWrittenSize) );
+        // resize the Sequence to written size
+        pSeq->nElements = mnCacheWrittenSize;
+        mxOutputStream->writeBytes( mpCache );
         // and next time write to the beginning
         mnCacheWrittenSize = 0;
     }
commit a83e71c71bdaf1c947545d1d88fcd0814715451d
Author: Matúš Kukan <matus.kukan at collabora.com>
Date:   Fri Oct 3 10:41:18 2014 +0200

    FastSerializer: Use -1 for unknown string length
    
    Change-Id: I3920caf9d95f20992b7961873f1668468d797e8e

diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx
index d885768..3876609 100644
--- a/sax/source/tools/fastserializer.cxx
+++ b/sax/source/tools/fastserializer.cxx
@@ -113,7 +113,7 @@ namespace sax_fastparser {
 
     void FastSaxSerializer::write( const char* pStr, sal_Int32 nLen, bool bEscape )
     {
-        if (nLen == 0)
+        if (nLen == -1)
             nLen = strlen(pStr);
 
         if (!bEscape)
@@ -251,7 +251,7 @@ namespace sax_fastparser {
 
             writeBytes(sEqualSignAndQuote, N_CHARS(sEqualSignAndQuote));
 
-            write(maTokenValues[j].pValue, 0, true);
+            write(maTokenValues[j].pValue, -1, true);
 
             writeBytes(sQuote, N_CHARS(sQuote));
         }
diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx
index e0ed751..801be10 100644
--- a/sax/source/tools/fshelper.cxx
+++ b/sax/source/tools/fshelper.cxx
@@ -102,7 +102,7 @@ void FastSerializerHelper::singleElement(sal_Int32 elementTokenId, XFastAttribut
 
 FastSerializerHelper* FastSerializerHelper::write(const char* value)
 {
-    mpSerializer->write(value, 0, false);
+    mpSerializer->write(value, -1, false);
     return this;
 }
 
@@ -132,13 +132,14 @@ FastSerializerHelper* FastSerializerHelper::write(double value)
 
 FastSerializerHelper* FastSerializerHelper::writeEscaped(const char* value)
 {
-    mpSerializer->write(value, 0, true);
+    mpSerializer->write(value, -1, true);
     return this;
 }
 
 FastSerializerHelper* FastSerializerHelper::writeEscaped(const OUString& value)
 {
-    mpSerializer->write(value, true);
+    if (!value.isEmpty())
+        mpSerializer->write(value, true);
     return this;
 }
 
commit 8e243bb23fbc55dafa048454b827142cedec6faa
Author: Matúš Kukan <matus.kukan at collabora.com>
Date:   Fri Oct 3 11:16:39 2014 +0200

    Remove few pointless OUString::number() and one method
    
    Change-Id: I3e9a302a7513eebfeff07402f71fc3dde22e4cc2

diff --git a/include/sax/fshelper.hxx b/include/sax/fshelper.hxx
index 1f3b1b8..50248ce 100644
--- a/include/sax/fshelper.hxx
+++ b/include/sax/fshelper.hxx
@@ -124,7 +124,6 @@ public:
 
     FastSerializerHelper* write(const char* value);
     FastSerializerHelper* write(const OUString& value);
-    FastSerializerHelper* write(const OString& value);
     FastSerializerHelper* write(sal_Int32 value);
     FastSerializerHelper* write(sal_Int64 value);
     FastSerializerHelper* write(double value);
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index bf82eef..fb5908f 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -524,7 +524,7 @@ static void
 writeElement( FSHelperPtr pDoc, sal_Int32 nXmlElement, const sal_Int32 nValue )
 {
     pDoc->startElement( nXmlElement, FSEND );
-    pDoc->write( OUString::number( nValue ) );
+    pDoc->write( nValue );
     pDoc->endElement( nXmlElement );
 }
 
@@ -677,7 +677,7 @@ writeAppProperties( XmlFilterBase& rSelf, Reference< XDocumentProperties > xProp
     {
             sal_Int32 nValue = 0;
             if (it->second >>= nValue)
-                writeElement(pAppProps, XML_Paragraphs, OUString::number(nValue));
+                writeElement(pAppProps, XML_Paragraphs, nValue);
     }
 
     uno::Reference<beans::XPropertyAccess> xUserDefinedProperties(xProperties->getUserDefinedProperties(), uno::UNO_QUERY);
@@ -715,10 +715,9 @@ writeCustomProperties( XmlFilterBase& rSelf, Reference< XDocumentProperties > xP
         {
             OString aName = OUStringToOString( aprop[n].Name, RTL_TEXTENCODING_ASCII_US );
             // pid starts from 2 not from 1 as MS supports pid from 2
-            OString pid =  OUStringToOString( OUString::number(n + 2), RTL_TEXTENCODING_ASCII_US );
             pAppProps->startElement( XML_property ,
                 XML_fmtid,  "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",
-                XML_pid,    pid,
+                XML_pid,    OString::number(n + 2),
                 XML_name,   aName,
                 FSEND);
 
diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx
index 55be646..e0ed751 100644
--- a/sax/source/tools/fshelper.cxx
+++ b/sax/source/tools/fshelper.cxx
@@ -112,25 +112,22 @@ FastSerializerHelper* FastSerializerHelper::write(const OUString& value)
     return this;
 }
 
-FastSerializerHelper* FastSerializerHelper::write(const OString& value)
-{
-    mpSerializer->write(value);
-    return this;
-}
-
 FastSerializerHelper* FastSerializerHelper::write(sal_Int32 value)
 {
-    return write(OString::number(value));
+    mpSerializer->write(OString::number(value));
+    return this;
 }
 
 FastSerializerHelper* FastSerializerHelper::write(sal_Int64 value)
 {
-    return write(OString::number(value));
+    mpSerializer->write(OString::number(value));
+    return this;
 }
 
 FastSerializerHelper* FastSerializerHelper::write(double value)
 {
-    return write(OString::number(value));
+    mpSerializer->write(OString::number(value));
+    return this;
 }
 
 FastSerializerHelper* FastSerializerHelper::writeEscaped(const char* value)


More information about the Libreoffice-commits mailing list