summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2014-09-26 10:37:17 +0100
committerMatúš Kukan <matus.kukan@collabora.com>2014-10-23 11:53:17 +0200
commite1c503a2e3309d9f738d7f702a562509899fdb3f (patch)
tree5aeee5c8b7f316de5f82ad6c70ad3fffc9b3dba2
parentb98b477c084c876a3a65583dbfed5c1f5f8bfe12 (diff)
fastparser: avoid allocating un-used FastTokenLookup class.
This contained an rtl_Sequence complete with horror internal allocator, caught red-handed serializing threaded loading to no good purpose. Change-Id: I837b2c17e4f70fd6a49bed33ad74a7d79f98f35c
-rw-r--r--include/sax/fastattribs.hxx36
-rw-r--r--sax/source/fastparser/fastparser.cxx7
-rw-r--r--sax/source/tools/fastattribs.cxx25
3 files changed, 30 insertions, 38 deletions
diff --git a/include/sax/fastattribs.hxx b/include/sax/fastattribs.hxx
index 4724b7ed3de7..6d9c7a4faa5e 100644
--- a/include/sax/fastattribs.hxx
+++ b/include/sax/fastattribs.hxx
@@ -52,22 +52,24 @@ typedef std::vector< UnknownAttribute > UnknownAttributeList;
/// A native C++ interface to tokenisation
class SAX_DLLPUBLIC FastTokenHandlerBase
{
- public:
- virtual ~FastTokenHandlerBase();
- virtual sal_Int32 getTokenDirect( const char *pToken, sal_Int32 nLength ) const = 0;
-};
-
-/// avoid constantly allocating and freeing sequences.
-class SAX_DLLPUBLIC FastTokenLookup
-{
- static const int mnUtf8BufferSize = 128;
- css::uno::Sequence< sal_Int8 > maUtf8Buffer;
-public:
- FastTokenLookup();
- sal_Int32 getTokenFromChars(
- const css::uno::Reference< css::xml::sax::XFastTokenHandler > &mxTokenHandler,
- FastTokenHandlerBase *pTokenHandler,
- const char *pStr, size_t nLength = 0 );
+ public:
+ virtual ~FastTokenHandlerBase();
+ virtual sal_Int32 getTokenDirect( const char *pToken, sal_Int32 nLength ) const = 0;
+
+ /**
+ * Client method to attempt the use of this interface if possible.
+ * @xTokenHandler - the UNO handle for the token lookup interface
+ * @pTokenHandler - a dynamic_cast version of @xTokenHandler to this interface
+ * @pStr - string buffer to lookup
+ * @nLength - optional length of chars in that buffer
+ *
+ * @return Tokenized form of pStr
+ */
+ static sal_Int32 getTokenFromChars(
+ const css::uno::Reference<
+ css::xml::sax::XFastTokenHandler > &xTokenHandler,
+ FastTokenHandlerBase *pTokenHandler /* can be NULL */,
+ const char *pStr, size_t nLength = 0 );
};
class SAX_DLLPUBLIC FastAttributeList : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XFastAttributeList >
@@ -112,8 +114,6 @@ private:
UnknownAttributeList maUnknownAttributes;
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler;
FastTokenHandlerBase *mpTokenHandler;
-
- FastTokenLookup maTokenLookup;
};
}
diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx
index fcbb58d70cc8..12429beda9a4 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -253,7 +253,6 @@ private:
Entity *mpTop; /// std::stack::top() is amazingly slow => cache this.
::std::stack< Entity > maEntities; /// Entity stack for each call of parseStream().
- FastTokenLookup maTokenLookup;
};
} // namespace sax_fastparser
@@ -646,9 +645,9 @@ void FastSaxParserImpl::DefineNamespace( const OString& rPrefix, const sal_Char*
sal_Int32 FastSaxParserImpl::GetToken( const sal_Char* pToken, sal_Int32 nLen /* = 0 */ )
{
- return maTokenLookup.getTokenFromChars( getEntity().mxTokenHandler,
- getEntity().mpTokenHandler,
- pToken, nLen );
+ return FastTokenHandlerBase::getTokenFromChars( getEntity().mxTokenHandler,
+ getEntity().mpTokenHandler,
+ pToken, nLen );
}
sal_Int32 FastSaxParserImpl::GetTokenWithPrefix( const sal_Char*pPrefix, int nPrefixLen, const sal_Char* pName, int nNameLen ) throw (SAXException)
diff --git a/sax/source/tools/fastattribs.cxx b/sax/source/tools/fastattribs.cxx
index 9d03772c8cae..45887b5754aa 100644
--- a/sax/source/tools/fastattribs.cxx
+++ b/sax/source/tools/fastattribs.cxx
@@ -127,9 +127,10 @@ sal_Int32 FastAttributeList::getValueToken( ::sal_Int32 Token ) throw (SAXExcept
{
for (size_t i = 0; i < maAttributeTokens.size(); ++i)
if (maAttributeTokens[i] == Token)
- return maTokenLookup.getTokenFromChars( mxTokenHandler, mpTokenHandler,
- mpChunk + maAttributeValues[ i ],
- AttributeValueLength( i ) );
+ return FastTokenHandlerBase::getTokenFromChars(
+ mxTokenHandler, mpTokenHandler,
+ mpChunk + maAttributeValues[ i ],
+ AttributeValueLength( i ) );
throw SAXException();
}
@@ -138,9 +139,10 @@ sal_Int32 FastAttributeList::getOptionalValueToken( ::sal_Int32 Token, ::sal_Int
{
for (size_t i = 0; i < maAttributeTokens.size(); ++i)
if (maAttributeTokens[i] == Token)
- return maTokenLookup.getTokenFromChars( mxTokenHandler, mpTokenHandler,
- mpChunk + maAttributeValues[ i ],
- AttributeValueLength( i ) );
+ return FastTokenHandlerBase::getTokenFromChars(
+ mxTokenHandler, mpTokenHandler,
+ mpChunk + maAttributeValues[ i ],
+ AttributeValueLength( i ) );
return Default;
}
@@ -229,16 +231,7 @@ sal_Int32 FastAttributeList::AttributeValueLength(sal_Int32 i)
return maAttributeValues[i + 1] - maAttributeValues[i] - 1;
}
-FastTokenLookup::FastTokenLookup()
-{
- maUtf8Buffer.realloc( mnUtf8BufferSize );
-}
-
-/**
- * Avoid doing any memory allocation if we can, instead keep a
- * pet sequence around and do some heavy petting on it.
- */
-sal_Int32 FastTokenLookup::getTokenFromChars(
+sal_Int32 FastTokenHandlerBase::getTokenFromChars(
const css::uno::Reference< css::xml::sax::XFastTokenHandler > &xTokenHandler,
FastTokenHandlerBase *pTokenHandler,
const char *pToken, size_t nLen /* = 0 */ )