summaryrefslogtreecommitdiff
path: root/i18npool
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-06-26 15:31:06 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-06-28 14:04:30 +0200
commitb0b1dbfb1d6b28339c2cdd79b765ec3eb5ce5aaf (patch)
treed9fc732b9c62f5e8a03a67c65114c88345a5063e /i18npool
parent0970a47ae926bb47458b846e9dc8ff6f3607250c (diff)
tdf#125706 Fields slow down down load, part3
Cache the supported numbering types in DefaultNumberingProvider. Takes the load time from 4.5s to 3.9s Change-Id: I6495f37faec7dba60ff30bd13e90790e70f8e704 Reviewed-on: https://gerrit.libreoffice.org/74742 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'i18npool')
-rw-r--r--i18npool/inc/defaultnumberingprovider.hxx4
-rw-r--r--i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx12
2 files changed, 16 insertions, 0 deletions
diff --git a/i18npool/inc/defaultnumberingprovider.hxx b/i18npool/inc/defaultnumberingprovider.hxx
index f01378ab075e..eb309b83c358 100644
--- a/i18npool/inc/defaultnumberingprovider.hxx
+++ b/i18npool/inc/defaultnumberingprovider.hxx
@@ -25,12 +25,14 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <cppuhelper/implbase.hxx>
#include <rtl/ref.hxx>
+#include <map>
namespace com::sun::star::container { class XHierarchicalNameAccess; }
namespace com::sun::star::uno { class XComponentContext; }
namespace i18npool {
class TransliterationImpl;
class NativeNumberSupplierService;
+ struct Supported_NumberingType;
}
namespace i18npool {
@@ -78,6 +80,8 @@ private:
css::uno::Reference < css::container::XHierarchicalNameAccess > xHierarchicalNameAccess;
rtl::Reference<TransliterationImpl> translit;
rtl::Reference<NativeNumberSupplierService> mxNatNum;
+ std::map<OUString, const Supported_NumberingType*> maSupportedTypesCache;
+
/// @throws css::uno::RuntimeException
OUString makeNumberingIdentifier( sal_Int16 index );
/// @throws css::uno::RuntimeException
diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
index 5e21a5a4dc5d..6f45022486a0 100644
--- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
+++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
@@ -1072,17 +1072,29 @@ Sequence< sal_Int16 > DefaultNumberingProvider::getSupportedNumberingTypes( )
sal_Int16 DefaultNumberingProvider::getNumberingType( const OUString& rNumberingIdentifier )
{
+ auto it = maSupportedTypesCache.find(rNumberingIdentifier);
+ if (it != maSupportedTypesCache.end())
+ return it->second->nType;
for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++)
if(rNumberingIdentifier == makeNumberingIdentifier(i))
+ {
+ maSupportedTypesCache.emplace(rNumberingIdentifier, &aSupportedTypes[i]);
return aSupportedTypes[i].nType;
+ }
throw RuntimeException();
}
sal_Bool DefaultNumberingProvider::hasNumberingType( const OUString& rNumberingIdentifier )
{
+ auto it = maSupportedTypesCache.find(rNumberingIdentifier);
+ if (it != maSupportedTypesCache.end())
+ return true;
for(sal_Int16 i = 0; i < nSupported_NumberingTypes; i++)
if(rNumberingIdentifier == makeNumberingIdentifier(i))
+ {
+ maSupportedTypesCache.emplace(rNumberingIdentifier, &aSupportedTypes[i]);
return true;
+ }
return false;
}