sax/source/tools/CachedOutputStream.hxx | 9 ---- sax/source/tools/fastserializer.cxx | 58 +++++++++++++++++--------------- sax/source/tools/fastserializer.hxx | 1 3 files changed, 32 insertions(+), 36 deletions(-)
New commits: commit f387b15fea0406b792b4ae5dc9f1c7ff9df78f38 Author: Matúš Kukan <[email protected]> Date: Mon Oct 6 14:45:07 2014 +0200 Revert "FastSerializer: Add simpler writeByte method for single characters." Let's not do this. It's slower anyway, at least with clang. This reverts commit d0bff8fb54cb473037b6b1819e04f679881150f0. diff --git a/sax/source/tools/CachedOutputStream.hxx b/sax/source/tools/CachedOutputStream.hxx index a6a2cfc..fc74118 100644 --- a/sax/source/tools/CachedOutputStream.hxx +++ b/sax/source/tools/CachedOutputStream.hxx @@ -100,15 +100,6 @@ public: mnCacheWrittenSize += nLen; } - void writeByte( const sal_Int8 cChar ) - { - // Write when the buffer gets big enough - if (mnCacheWrittenSize + 1 > mnMaximumSize) - flush(); - - *(pSeq->elements + mnCacheWrittenSize++) = cChar; - } - /// immediately write buffer into mxOutputStream and clear void flush() { diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx index ff089fd..ac8376b 100644 --- a/sax/source/tools/fastserializer.cxx +++ b/sax/source/tools/fastserializer.cxx @@ -43,6 +43,14 @@ using ::com::sun::star::io::XOutputStream; // number of characters without terminating 0 #define N_CHARS(string) (SAL_N_ELEMENTS(string) - 1) +static const char sClosingBracket[] = ">"; +static const char sSlashAndClosingBracket[] = "/>"; +static const char sColon[] = ":"; +static const char sOpeningBracket[] = "<"; +static const char sOpeningBracketAndSlash[] = "</"; +static const char sQuote[] = "\""; +static const char sEqualSignAndQuote[] = "=\""; +static const char sSpace[] = " "; static const char sXmlHeader[] = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"; namespace sax_fastparser { @@ -103,10 +111,10 @@ namespace sax_fastparser { case '"': writeBytes( """, 6 ); break; case '\n': writeBytes( " ", 5 ); break; case '\r': writeBytes( " ", 5 ); break; - default: writeByte( cChar ); break; + default: writeBytes( &cChar, 1 ); break; } else - writeByte( cChar ); + writeBytes( &cChar, 1 ); } } @@ -138,7 +146,7 @@ namespace sax_fastparser { case '"': writeBytes( """, 6 ); break; case '\n': writeBytes( " ", 5 ); break; case '\r': writeBytes( " ", 5 ); break; - default: writeByte( c ); break; + default: writeBytes( &c, 1 ); break; } } } @@ -153,7 +161,7 @@ namespace sax_fastparser { { if( HAS_NAMESPACE( nElement ) ) { writeBytes(mxFastTokenHandler->getUTF8Identifier(NAMESPACE(nElement))); - writeByte(':'); + writeBytes(sColon, N_CHARS(sColon)); writeBytes(mxFastTokenHandler->getUTF8Identifier(TOKEN(nElement))); } else writeBytes(mxFastTokenHandler->getUTF8Identifier(nElement)); @@ -167,7 +175,8 @@ namespace sax_fastparser { mxFastTokenHandler->getUTF8Identifier(NAMESPACE(nElement))); Sequence<sal_Int8> const name( mxFastTokenHandler->getUTF8Identifier(TOKEN(nElement))); - return OString(reinterpret_cast<sal_Char const*>(ns.getConstArray()), ns.getLength()) + ":" + return OString(reinterpret_cast<sal_Char const*>(ns.getConstArray()), ns.getLength()) + + OString(sColon, N_CHARS(sColon)) + OString(reinterpret_cast<sal_Char const*>(name.getConstArray()), name.getLength()); } else { Sequence<sal_Int8> const name( @@ -189,7 +198,7 @@ namespace sax_fastparser { m_DebugStartedElements.push(Element); #endif - writeByte('<'); + writeBytes(sOpeningBracket, N_CHARS(sOpeningBracket)); writeId(Element); if (pAttrList) @@ -197,7 +206,7 @@ namespace sax_fastparser { else writeTokenValueList(); - writeByte('>'); + writeBytes(sClosingBracket, N_CHARS(sClosingBracket)); } void FastSaxSerializer::endFastElement( ::sal_Int32 Element ) @@ -209,10 +218,11 @@ namespace sax_fastparser { m_DebugStartedElements.pop(); #endif - writeByte('<'); - writeByte('/'); + writeBytes(sOpeningBracketAndSlash, N_CHARS(sOpeningBracketAndSlash)); + writeId(Element); - writeByte('>'); + + writeBytes(sClosingBracket, N_CHARS(sClosingBracket)); } void FastSaxSerializer::singleFastElement( ::sal_Int32 Element, FastAttributeList* pAttrList ) @@ -223,7 +233,7 @@ namespace sax_fastparser { maMarkStack.top()->setCurrentElement( Element ); } - writeByte('<'); + writeBytes(sOpeningBracket, N_CHARS(sOpeningBracket)); writeId(Element); if (pAttrList) @@ -231,8 +241,7 @@ namespace sax_fastparser { else writeTokenValueList(); - writeByte('/'); - writeByte('>'); + writeBytes(sSlashAndClosingBracket, N_CHARS(sSlashAndClosingBracket)); } ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > FastSaxSerializer::getOutputStream() @@ -247,7 +256,7 @@ namespace sax_fastparser { #endif for (size_t j = 0; j < maTokenValues.size(); j++) { - writeByte(' '); + writeBytes(sSpace, N_CHARS(sSpace)); sal_Int32 nToken = maTokenValues[j].nToken; writeId(nToken); @@ -259,10 +268,11 @@ namespace sax_fastparser { DebugAttributes.insert(nameId); #endif - writeByte('='); - writeByte('"'); + writeBytes(sEqualSignAndQuote, N_CHARS(sEqualSignAndQuote)); + write(maTokenValues[j].pValue, -1, true); - writeByte('"'); + + writeBytes(sQuote, N_CHARS(sQuote)); } maTokenValues.clear(); } @@ -275,7 +285,7 @@ namespace sax_fastparser { const std::vector< sal_Int32 >& Tokens = pAttrList->getFastAttributeTokens(); for (size_t j = 0; j < Tokens.size(); j++) { - writeByte(' '); + writeBytes(sSpace, N_CHARS(sSpace)); sal_Int32 nToken = Tokens[j]; writeId(nToken); @@ -287,10 +297,11 @@ namespace sax_fastparser { DebugAttributes.insert(nameId); #endif - writeByte('='); - writeByte('"'); + writeBytes(sEqualSignAndQuote, N_CHARS(sEqualSignAndQuote)); + write(pAttrList->getFastAttributeValue(j), pAttrList->AttributeValueLength(j), true); - writeByte('"'); + + writeBytes(sQuote, N_CHARS(sQuote)); } } @@ -362,11 +373,6 @@ namespace sax_fastparser { maCachedOutputStream.writeBytes( reinterpret_cast<const sal_Int8*>(pStr), nLen ); } - void FastSaxSerializer::writeByte( const sal_Int8 cChar ) - { - maCachedOutputStream.writeByte( cChar ); - } - FastSaxSerializer::Int8Sequence& FastSaxSerializer::ForMerge::getData() { merge( maData, maPostponed, true ); diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx index 0b924bc..8500b68 100644 --- a/sax/source/tools/fastserializer.hxx +++ b/sax/source/tools/fastserializer.hxx @@ -228,7 +228,6 @@ private: */ void writeBytes( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aData ); void writeBytes( const char* pStr, size_t nLen ); - void writeByte( const sal_Int8 cChar ); }; } // namespace sax_fastparser
_______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
