diff options
author | Eike Rathke <erack@redhat.com> | 2019-09-27 22:35:13 +0200 |
---|---|---|
committer | Xisco FaulĂ <xiscofauli@libreoffice.org> | 2019-10-03 11:00:43 +0200 |
commit | e7b8101cf7643d612393079d7f1cea07d8b1c774 (patch) | |
tree | 6a5c61f7ac16e79cd77ede692bdf6f8458500f11 | |
parent | 059fff471b05c0e26589a1a621b467af5bc6a159 (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
(cherry picked from commit 24c7c12224f1c1d66f335f6fe085595352137646)
Reviewed-on: https://gerrit.libreoffice.org/79775
Reviewed-by: Xisco FaulĂ <xiscofauli@libreoffice.org>
(cherry picked from commit 99782b52c3cc25a32661c382ca98a32f6ec87003)
Reviewed-on: https://gerrit.libreoffice.org/79787
-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 c0e27492f912..ef34402d02de 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -252,11 +252,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; @@ -271,6 +272,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; @@ -384,7 +386,8 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTag & rLanguageTag ) mbCachedLanguage( false), mbCachedScript( false), mbCachedCountry( false), - mbCachedVariants( false) + mbCachedVariants( false), + mbCachedGlibcString( false) { } @@ -397,6 +400,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), @@ -412,7 +416,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(); @@ -430,6 +435,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; @@ -448,6 +454,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; @@ -1902,7 +1909,9 @@ OUString LanguageTag::getVariants() const OUString LanguageTagImpl::getGlibcLocaleString() const { - OUString sLocale; + if (mbCachedGlibcString) + return maCachedGlibcString; + if (!mpImplLangtag) { meIsLiblangtagNeeded = DECISION_YES; @@ -1913,11 +1922,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 |