[Libreoffice-commits] core.git: include/xmloff xmloff/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Wed Nov 6 19:30:26 UTC 2019
include/xmloff/xmlictxt.hxx | 32 ++++++++++++++++++++++++--------
xmloff/source/core/xmlictxt.cxx | 30 ++++++++++++++++++++++++++++--
2 files changed, 52 insertions(+), 10 deletions(-)
New commits:
commit ef0e7e146f86999b04d7274688d72fadcaf53a36
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed Nov 6 20:08:56 2019 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Wed Nov 6 20:28:52 2019 +0100
tdf#125688 removing XWeak support from SvXMLImportContext
shaves 2% off the load time
Change-Id: Icac00389dfcc3339fe4faf1731e9eeb3ff8d0f0c
Reviewed-on: https://gerrit.libreoffice.org/82139
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/include/xmloff/xmlictxt.hxx b/include/xmloff/xmlictxt.hxx
index 9cf531b4eef5..8dc67dac0227 100644
--- a/include/xmloff/xmlictxt.hxx
+++ b/include/xmloff/xmlictxt.hxx
@@ -24,8 +24,8 @@
#include <xmloff/dllapi.h>
#include <sal/types.h>
#include <com/sun/star/xml/sax/XFastContextHandler.hpp>
+#include <com/sun/star/lang/XTypeProvider.hpp>
#include <rtl/ustring.hxx>
-#include <cppuhelper/implbase.hxx>
#include <xmloff/nmspmap.hxx>
#include <memory>
@@ -37,15 +37,20 @@ class SvXMLImportContext;
typedef rtl::Reference<SvXMLImportContext> SvXMLImportContextRef;
-class XMLOFF_DLLPUBLIC SvXMLImportContext : public cppu::WeakImplHelper< css::xml::sax::XFastContextHandler >
+/**
+This class deliberately does not support XWeak, to improve performance when loading
+large documents.
+*/
+class XMLOFF_DLLPUBLIC SvXMLImportContext : public css::xml::sax::XFastContextHandler,
+ public css::lang::XTypeProvider
+
{
friend class SvXMLImport;
- SvXMLImport& mrImport;
-
- sal_uInt16 const mnPrefix;
- OUString const maLocalName;
-
+ oslInterlockedCount m_nRefCount;
+ SvXMLImport& mrImport;
+ sal_uInt16 mnPrefix;
+ OUString maLocalName;
std::unique_ptr<SvXMLNamespaceMap> m_pRewindMap;
SAL_DLLPRIVATE std::unique_ptr<SvXMLNamespaceMap> TakeRewindMap() { return std::move(m_pRewindMap); }
@@ -74,7 +79,7 @@ public:
* ends. By default, nothing is done.
* Note that virtual methods cannot be used inside destructors. Use
* EndElement instead if this is required. */
- virtual ~SvXMLImportContext() override;
+ virtual ~SvXMLImportContext();
/** Create a children element context. By default, the import's
* CreateContext method is called to create a new default context. */
@@ -115,6 +120,17 @@ public:
const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
virtual void SAL_CALL characters(const OUString & aChars) override;
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) final override;
+ virtual void SAL_CALL acquire() throw () final override
+ { osl_atomic_increment(&m_nRefCount); }
+ virtual void SAL_CALL release() throw () final override
+ { if (osl_atomic_decrement(&m_nRefCount) == 0) delete this; }
+
+ // XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) final override;
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) final override;
};
#endif // INCLUDED_XMLOFF_XMLICTXT_HXX
diff --git a/xmloff/source/core/xmlictxt.cxx b/xmloff/source/core/xmlictxt.cxx
index fb4e64ef8719..8e31d497ab8e 100644
--- a/xmloff/source/core/xmlictxt.cxx
+++ b/xmloff/source/core/xmlictxt.cxx
@@ -22,19 +22,22 @@
#include <xmloff/xmlictxt.hxx>
#include <sax/fastattribs.hxx>
#include <comphelper/attributelist.hxx>
+#include <cppuhelper/queryinterface.hxx>
using namespace ::com::sun::star;
SvXMLImportContext::SvXMLImportContext( SvXMLImport& rImp, sal_uInt16 nPrfx,
const OUString& rLName )
- : mrImport(rImp)
+ : m_nRefCount(0)
+ , mrImport(rImp)
, mnPrefix(nPrfx)
, maLocalName(rLName)
{
}
SvXMLImportContext::SvXMLImportContext( SvXMLImport& rImp )
- : mrImport(rImp)
+ : m_nRefCount(0)
+ , mrImport(rImp)
, mnPrefix(0)
{
}
@@ -143,4 +146,27 @@ void SAL_CALL SvXMLImportContext::characters(const OUString &rChars)
mrImport.Characters( rChars );
}
+// XInterface
+css::uno::Any SAL_CALL SvXMLImportContext::queryInterface( const css::uno::Type& aType )
+{
+ css::uno::Any a = ::cppu::queryInterface(
+ aType,
+ static_cast< XFastContextHandler* >(this),
+ static_cast< XTypeProvider* >(this));
+
+ return a;
+}
+
+// XTypeProvider
+css::uno::Sequence< css::uno::Type > SAL_CALL SvXMLImportContext::getTypes()
+{
+ return { cppu::UnoType<XFastContextHandler>::get(),
+ cppu::UnoType<XTypeProvider>::get() };
+}
+
+css::uno::Sequence< sal_Int8 > SAL_CALL SvXMLImportContext::getImplementationId()
+{
+ return css::uno::Sequence<sal_Int8>();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list