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>
diff --git a/i18npool/inc/defaultnumberingprovider.hxx b/i18npool/inc/defaultnumberingprovider.hxx
index f01378a..eb309b8 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 @@
    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 5e21a5a..6f45022 100644
--- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
+++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
@@ -1072,17 +1072,29 @@

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;
}