diff options
author | Eike Rathke <erack@redhat.com> | 2019-09-27 22:35:13 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2019-09-28 01:19:33 +0200 |
commit | 24c7c12224f1c1d66f335f6fe085595352137646 (patch) | |
tree | 95ff27591f9d117470a8f3204fb841e69888d7a6 /i18nlangtag | |
parent | 9c9b1e95ae4c407cf0f462c4e1a64fcc303399d6 (diff) |
Resolves: tdf#127786 cache Glibc locale string in LanguageTagImpl
... for non-simple @modifier strings that are constructed using
liblangtag, as loading resource strings needs it over and over and
over again.
Change-Id: Ib6a74e5ddb44508aa41f101c200a508bfa4a13bd
Reviewed-on: https://gerrit.libreoffice.org/79770
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
Diffstat (limited to 'i18nlangtag')
-rw-r--r-- | i18nlangtag/source/languagetag/languagetag.cxx | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx index e972400f7c84..d0ffdb58cd81 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -253,11 +253,12 @@ private: mutable css::lang::Locale maLocale; mutable OUString maBcp47; - mutable OUString maCachedLanguage; ///< cache getLanguage() - mutable OUString maCachedScript; ///< cache getScript() - mutable OUString maCachedCountry; ///< cache getCountry() - mutable OUString maCachedVariants; ///< cache getVariants() - mutable lt_tag_t* mpImplLangtag; ///< liblangtag pointer + mutable OUString maCachedLanguage; ///< cache getLanguage() + mutable OUString maCachedScript; ///< cache getScript() + mutable OUString maCachedCountry; ///< cache getCountry() + mutable OUString maCachedVariants; ///< cache getVariants() + mutable OUString maCachedGlibcString; ///< cache getGlibcLocaleString() + mutable lt_tag_t* mpImplLangtag; ///< liblangtag pointer mutable LanguageType mnLangID; mutable LanguageTag::ScriptType meScriptType; mutable Decision meIsValid; @@ -272,6 +273,7 @@ private: mutable bool mbCachedScript : 1; mutable bool mbCachedCountry : 1; mutable bool mbCachedVariants : 1; + mutable bool mbCachedGlibcString : 1; OUString const & getBcp47() const; OUString const & getLanguage() const; @@ -385,7 +387,8 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTag & rLanguageTag ) mbCachedLanguage( false), mbCachedScript( false), mbCachedCountry( false), - mbCachedVariants( false) + mbCachedVariants( false), + mbCachedGlibcString( false) { } @@ -398,6 +401,7 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTagImpl & rLanguageTagImpl ) maCachedScript( rLanguageTagImpl.maCachedScript), maCachedCountry( rLanguageTagImpl.maCachedCountry), maCachedVariants( rLanguageTagImpl.maCachedVariants), + maCachedGlibcString( rLanguageTagImpl.maCachedGlibcString), mpImplLangtag( rLanguageTagImpl.mpImplLangtag ? lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : nullptr), mnLangID( rLanguageTagImpl.mnLangID), @@ -413,7 +417,8 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTagImpl & rLanguageTagImpl ) mbCachedLanguage( rLanguageTagImpl.mbCachedLanguage), mbCachedScript( rLanguageTagImpl.mbCachedScript), mbCachedCountry( rLanguageTagImpl.mbCachedCountry), - mbCachedVariants( rLanguageTagImpl.mbCachedVariants) + mbCachedVariants( rLanguageTagImpl.mbCachedVariants), + mbCachedGlibcString( rLanguageTagImpl.mbCachedGlibcString) { if (mpImplLangtag) theDataRef::get().init(); @@ -431,6 +436,7 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa maCachedScript = rLanguageTagImpl.maCachedScript; maCachedCountry = rLanguageTagImpl.maCachedCountry; maCachedVariants = rLanguageTagImpl.maCachedVariants; + maCachedGlibcString = rLanguageTagImpl.maCachedGlibcString; lt_tag_t * oldTag = mpImplLangtag; mpImplLangtag = rLanguageTagImpl.mpImplLangtag ? lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : nullptr; @@ -449,6 +455,7 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa mbCachedScript = rLanguageTagImpl.mbCachedScript; mbCachedCountry = rLanguageTagImpl.mbCachedCountry; mbCachedVariants = rLanguageTagImpl.mbCachedVariants; + mbCachedGlibcString = rLanguageTagImpl.mbCachedGlibcString; if (mpImplLangtag && !oldTag) theDataRef::get().init(); return *this; @@ -1905,7 +1912,9 @@ OUString LanguageTag::getVariants() const OUString LanguageTagImpl::getGlibcLocaleString() const { - OUString sLocale; + if (mbCachedGlibcString) + return maCachedGlibcString; + if (!mpImplLangtag) { meIsLiblangtagNeeded = DECISION_YES; @@ -1916,11 +1925,12 @@ OUString LanguageTagImpl::getGlibcLocaleString() const char* pLang = lt_tag_convert_to_locale(mpImplLangtag, nullptr); if (pLang) { - sLocale = OUString::createFromAscii( pLang); + maCachedGlibcString = OUString::createFromAscii( pLang); + mbCachedGlibcString = true; free(pLang); } } - return sLocale; + return maCachedGlibcString; } OUString LanguageTag::getGlibcLocaleString( const OUString & rEncoding ) const |