summaryrefslogtreecommitdiff
path: root/sax/source/fastparser/fastparser.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sax/source/fastparser/fastparser.hxx')
-rw-r--r--sax/source/fastparser/fastparser.hxx83
1 files changed, 47 insertions, 36 deletions
diff --git a/sax/source/fastparser/fastparser.hxx b/sax/source/fastparser/fastparser.hxx
index 3d494a6d3c81..a0331fe4035a 100644
--- a/sax/source/fastparser/fastparser.hxx
+++ b/sax/source/fastparser/fastparser.hxx
@@ -47,25 +47,51 @@
#define PARSER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastParser"
#define PARSER_SERVICE_NAME "com.sun.star.xml.sax.FastParser"
-namespace sax_fastparser
+namespace sax_fastparser {
+
+class FastLocatorImpl;
+struct NamespaceDefine;
+struct SaxContextImpl;
+
+typedef ::boost::shared_ptr< SaxContextImpl > SaxContextImplPtr;
+typedef ::boost::shared_ptr< NamespaceDefine > NamespaceDefineRef;
+
+typedef ::std::hash_map< ::rtl::OUString, sal_Int32,
+ ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > NamespaceMap;
+
+// --------------------------------------------------------------------
+
+struct ParserData
{
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastDocumentHandler > mxDocumentHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XErrorHandler > mxErrorHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XEntityResolver > mxEntityResolver;
+ ::com::sun::star::lang::Locale maLocale;
- class FastLocatorImpl;
- struct NamespaceDefine;
- struct SaxContextImpl;
- typedef boost::shared_ptr< SaxContextImpl > SaxContextImplPtr;
- typedef ::std::hash_map< ::rtl::OUString, sal_Int32,
- ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString >
- > NamespaceMap;
+ ParserData();
+ ~ParserData();
+};
// --------------------------------------------------------------------
-// Entity binds all information neede for a single file
-struct Entity
+// Entity binds all information needed for a single file
+struct Entity : public ParserData
{
- ::com::sun::star::xml::sax::InputSource maStructSource;
- XML_Parser mpParser;
- sax_expatwrap::XMLFile2UTFConverter maConverter;
+ ::com::sun::star::xml::sax::InputSource maStructSource;
+ XML_Parser mpParser;
+ ::sax_expatwrap::XMLFile2UTFConverter maConverter;
+ ::rtl::Reference< FastAttributeList > mxAttributes;
+
+ // Exceptions cannot be thrown through the C-XmlParser (possible resource leaks),
+ // therefore the exception must be saved somewhere.
+ ::com::sun::star::uno::Any maSavedException;
+
+ ::std::stack< SaxContextImplPtr > maContextStack;
+ ::std::vector< NamespaceDefineRef > maNamespaceDefines;
+
+ explicit Entity( const ParserData& rData );
+ ~Entity();
};
// --------------------------------------------------------------------
@@ -75,7 +101,7 @@ class FastSaxParser : public ::cppu::WeakImplHelper2< ::com::sun::star::xml::sax
{
public:
FastSaxParser();
- ~FastSaxParser();
+ virtual ~FastSaxParser();
// The implementation details
static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void);
@@ -100,9 +126,9 @@ public:
void callbackCharacters( const XML_Char* s, int nLen );
int callbackExternalEntityRef( XML_Parser parser, const XML_Char *openEntityNames, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId);
- void pushEntity( const struct Entity &entity ) { vecEntity.push_back( entity ); }
- void popEntity() { vecEntity.pop_back( ); }
- struct Entity &getEntity() { return vecEntity.back(); }
+ inline void pushEntity( const Entity& rEntity ) { maEntities.push( rEntity ); }
+ inline void popEntity() { maEntities.pop(); }
+ Entity& getEntity() { return maEntities.top(); }
private:
void parse();
@@ -126,26 +152,11 @@ private:
private:
::osl::Mutex maMutex;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastDocumentHandler > mxDocumentHandler;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XErrorHandler > mxErrorHandler;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XEntityResolver > mxEntityResolver;
-
- rtl::Reference < FastLocatorImpl > mxDocumentLocator;
- rtl::Reference < FastAttributeList > mxAttributes;
-
- // External entity stack
- std::vector< struct Entity > vecEntity;
-
- // Exceptions cannot be thrown through the C-XmlParser (possible resource leaks),
- // therefore the exception must be saved somewhere.
- ::com::sun::star::uno::Any maSavedException;
-
- ::com::sun::star::lang::Locale maLocale;
+ ::rtl::Reference< FastLocatorImpl > mxDocumentLocator;
+ NamespaceMap maNamespaceMap;
- std::stack< SaxContextImplPtr > maContextStack;
- std::vector< boost::shared_ptr< NamespaceDefine > > maNamespaceDefines;
- NamespaceMap maNamespaceMap;
+ ParserData maData; /// Cached parser configuration for next call of parseStream().
+ ::std::stack< Entity > maEntities; /// Entity stack for each call of parseStream().
};
}