diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-06-14 13:03:58 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2023-06-14 19:16:59 +0200 |
commit | 3b53aa7cb6284182c58056b376c1b57dd1414062 (patch) | |
tree | 1319a74aa2eeb8a282a8318f159fa1b7de9d8308 /i18npool | |
parent | f210fd9645258bac88a5fd1c0ffcf11ee428733b (diff) |
speed up startup time
by avoid conversion of static locale data from sal_Unicode to OUString
data - we can declare the data as OUStringConstExpr arrays and then
no conversion is necessary.
Change-Id: I95214d09938036935a45e8b8e9752596246dd2e1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153058
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'i18npool')
-rw-r--r-- | i18npool/source/localedata/LocaleNode.cxx | 38 | ||||
-rw-r--r-- | i18npool/source/localedata/localedata.cxx | 32 |
2 files changed, 33 insertions, 37 deletions
diff --git a/i18npool/source/localedata/LocaleNode.cxx b/i18npool/source/localedata/LocaleNode.cxx index e0cac2020d4c..b70cae2c713f 100644 --- a/i18npool/source/localedata/LocaleNode.cxx +++ b/i18npool/source/localedata/LocaleNode.cxx @@ -1316,8 +1316,8 @@ void LCCollationNode::generateCode (const OFileWriter &of) const OUString useLocale = getAttr().getValueByName("ref"); if (!useLocale.isEmpty()) { useLocale = useLocale.replace( '-', '_'); - of.writeRefFunction("getCollatorImplementation_", useLocale); - of.writeRefFunction("getCollationOptions_", useLocale); + of.writeOUStringRefFunction("getCollatorImplementation_", useLocale); + of.writeOUStringRefFunction("getCollationOptions_", useLocale); return; } sal_Int16 nbOfCollations = 0; @@ -1329,11 +1329,11 @@ void LCCollationNode::generateCode (const OFileWriter &of) const { OUString str; str = currNode->getAttr().getValueByName("unoid"); - of.writeParameter("CollatorID", str, j); + of.writeOUStringLiteralParameter("CollatorID", str, j); str = currNode->getValue(); - of.writeParameter("CollatorRule", str, j); + of.writeOUStringLiteralParameter("CollatorRule", str, j); str = currNode -> getAttr().getValueByName("default"); - of.writeDefaultParameter("Collator", str, j); + of.writeOUStringLiteralDefaultParameter("Collator", str, j); of.writeAsciiString("\n"); nbOfCollations++; @@ -1344,7 +1344,7 @@ void LCCollationNode::generateCode (const OFileWriter &of) const nbOfCollationOptions = sal::static_int_cast<sal_Int16>( pCollationOptions->getNumberOfChildren() ); for( sal_Int16 i=0; i<nbOfCollationOptions; i++ ) { - of.writeParameter("collationOption", pCollationOptions->getChildAt( i )->getValue(), i ); + of.writeOUStringLiteralParameter("collationOption", pCollationOptions->getChildAt( i )->getValue(), i ); } of.writeAsciiString("static const sal_Int16 nbOfCollationOptions = "); @@ -1356,7 +1356,7 @@ void LCCollationNode::generateCode (const OFileWriter &of) const of.writeInt(nbOfCollations); of.writeAsciiString(";\n\n"); - of.writeAsciiString("\nstatic const sal_Unicode* LCCollatorArray[] = {\n"); + of.writeAsciiString("\nstatic constexpr rtl::OUStringConstExpr LCCollatorArray[] = {\n"); for(sal_Int16 j = 0; j < nbOfCollations; j++) { of.writeAsciiString("\tCollatorID"); of.writeInt(j); @@ -1372,16 +1372,17 @@ void LCCollationNode::generateCode (const OFileWriter &of) const } of.writeAsciiString("};\n\n"); - of.writeAsciiString("static const sal_Unicode* collationOptions[] = {"); + of.writeAsciiString("static constexpr rtl::OUStringConstExpr collationOptions[] = {"); for( sal_Int16 j=0; j<nbOfCollationOptions; j++ ) { + if (j) + of.writeAsciiString( ", " ); of.writeAsciiString( "collationOption" ); of.writeInt( j ); - of.writeAsciiString( ", " ); } - of.writeAsciiString("NULL };\n"); - of.writeFunction("getCollatorImplementation_", "nbOfCollations", "LCCollatorArray"); - of.writeFunction("getCollationOptions_", "nbOfCollationOptions", "collationOptions"); + of.writeAsciiString("};\n"); + of.writeOUStringFunction("getCollatorImplementation_", "nbOfCollations", "LCCollatorArray"); + of.writeOUStringFunction("getCollationOptions_", "nbOfCollationOptions", "collationOptions"); } void LCSearchNode::generateCode (const OFileWriter &of) const @@ -1389,7 +1390,7 @@ void LCSearchNode::generateCode (const OFileWriter &of) const OUString useLocale = getAttr().getValueByName("ref"); if (!useLocale.isEmpty()) { useLocale = useLocale.replace( '-', '_'); - of.writeRefFunction("getSearchOptions_", useLocale); + of.writeOUStringRefFunction("getSearchOptions_", useLocale); return; } @@ -1405,22 +1406,23 @@ void LCSearchNode::generateCode (const OFileWriter &of) const sal_Int32 nSearchOptions = pSearchOptions->getNumberOfChildren(); for( i=0; i<nSearchOptions; i++ ) { - of.writeParameter("searchOption", pSearchOptions->getChildAt( i )->getValue(), sal::static_int_cast<sal_Int16>(i) ); + of.writeOUStringLiteralParameter("searchOption", pSearchOptions->getChildAt( i )->getValue(), sal::static_int_cast<sal_Int16>(i) ); } of.writeAsciiString("static const sal_Int16 nbOfSearchOptions = "); of.writeInt( sal::static_int_cast<sal_Int16>( nSearchOptions ) ); of.writeAsciiString(";\n\n"); - of.writeAsciiString("static const sal_Unicode* searchOptions[] = {"); + of.writeAsciiString("static constexpr rtl::OUStringConstExpr searchOptions[] = {"); for( i=0; i<nSearchOptions; i++ ) { + if (i) + of.writeAsciiString( ", " ); of.writeAsciiString( "searchOption" ); of.writeInt( sal::static_int_cast<sal_Int16>(i) ); - of.writeAsciiString( ", " ); } - of.writeAsciiString("NULL };\n"); - of.writeFunction("getSearchOptions_", "nbOfSearchOptions", "searchOptions"); + of.writeAsciiString(" };\n"); + of.writeOUStringFunction("getSearchOptions_", "nbOfSearchOptions", "searchOptions"); } void LCIndexNode::generateCode (const OFileWriter &of) const diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx index 12149ca14ff7..3f45df6cdd1a 100644 --- a/i18npool/source/localedata/localedata.cxx +++ b/i18npool/source/localedata/localedata.cxx @@ -904,13 +904,13 @@ LocaleDataImpl::getDateAcceptancePatterns( const Locale& rLocale ) OUString LocaleDataImpl::getCollatorRuleByAlgorithm( const Locale& rLocale, std::u16string_view algorithm ) { - MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( rLocale, "getCollatorImplementation" )); + MyFuncOUString_Type func = reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, "getCollatorImplementation" )); if ( func ) { sal_Int16 collatorCount = 0; - sal_Unicode **collatorArray = func(collatorCount); + OUString const *collatorArray = func(collatorCount); for(sal_Int16 i = 0; i < collatorCount; i++) if (algorithm == collatorArray[i * COLLATOR_ELEMENTS + COLLATOR_OFFSET_ALGO]) - return OUString(collatorArray[i * COLLATOR_ELEMENTS + COLLATOR_OFFSET_RULE]); + return collatorArray[i * COLLATOR_ELEMENTS + COLLATOR_OFFSET_RULE]; } return OUString(); } @@ -919,18 +919,17 @@ LocaleDataImpl::getCollatorRuleByAlgorithm( const Locale& rLocale, std::u16strin Sequence< Implementation > SAL_CALL LocaleDataImpl::getCollatorImplementations( const Locale& rLocale ) { - MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( rLocale, "getCollatorImplementation" )); + MyFuncOUString_Type func = reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, "getCollatorImplementation" )); if ( func ) { sal_Int16 collatorCount = 0; - sal_Unicode **collatorArray = func(collatorCount); + OUString const *collatorArray = func(collatorCount); Sequence< Implementation > seq(collatorCount); auto seqRange = asNonConstRange(seq); for(sal_Int16 i = 0; i < collatorCount; i++) { - Implementation impl( - OUString(collatorArray[i * COLLATOR_ELEMENTS + COLLATOR_OFFSET_ALGO]), + seqRange[i] = Implementation( + collatorArray[i * COLLATOR_ELEMENTS + COLLATOR_OFFSET_ALGO], collatorArray[i * COLLATOR_ELEMENTS + COLLATOR_OFFSET_DEFAULT][0] != 0); - seqRange[i] = impl; } return seq; } @@ -942,15 +941,15 @@ LocaleDataImpl::getCollatorImplementations( const Locale& rLocale ) Sequence< OUString > SAL_CALL LocaleDataImpl::getCollationOptions( const Locale& rLocale ) { - MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( rLocale, "getCollationOptions" )); + MyFuncOUString_Type func = reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, "getCollationOptions" )); if ( func ) { sal_Int16 optionsCount = 0; - sal_Unicode **optionsArray = func(optionsCount); + OUString const *optionsArray = func(optionsCount); Sequence< OUString > seq(optionsCount); auto seqRange = asNonConstRange(seq); for(sal_Int16 i = 0; i < optionsCount; i++) { - seqRange[i] = OUString( optionsArray[i] ); + seqRange[i] = optionsArray[i]; } return seq; } @@ -962,17 +961,12 @@ LocaleDataImpl::getCollationOptions( const Locale& rLocale ) Sequence< OUString > SAL_CALL LocaleDataImpl::getSearchOptions( const Locale& rLocale ) { - MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( rLocale, "getSearchOptions" )); + MyFuncOUString_Type func = reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, "getSearchOptions" )); if ( func ) { sal_Int16 optionsCount = 0; - sal_Unicode **optionsArray = func(optionsCount); - Sequence< OUString > seq(optionsCount); - auto seqRange = asNonConstRange(seq); - for(sal_Int16 i = 0; i < optionsCount; i++) { - seqRange[i] = OUString( optionsArray[i] ); - } - return seq; + OUString const *optionsArray = func(optionsCount); + return Sequence< OUString >(optionsArray, optionsCount); } else { return {}; |