trigger less conversions
Change-Id: Ie7ab85522b3ab0adb5bddd24b9db6affc10c4665
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index 01cd6d2..5779397 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -611,7 +611,7 @@ LanguageTag::ImplPtr LanguageTagImpl::registerOnTheFly()
pImpl = (*it).second;
if (pImpl.get() != this)
{
SAL_WARN( "i18nlangtag", "LanguageTag::registerOnTheFly: impl should be this");
SAL_WARN( "i18nlangtag", "LanguageTag::registerOnTheFly: impl should be this for '" << maBcp47 << "'");
*pImpl = *this; // ensure consistency
}
}
@@ -810,7 +810,10 @@ LanguageTag::ImplPtr LanguageTag::registerImpl() const
LanguageTag::ImplPtr LanguageTag::getImpl() const
{
if (!mpImpl)
{
mpImpl = registerImpl();
syncVarsFromRawImpl();
}
return mpImpl;
}
@@ -1073,14 +1076,33 @@ void LanguageTag::syncFromImpl()
SAL_INFO_IF( bRegister, "i18nlangtag",
"LanguageTag::syncFromImpl: re-registering, '" << pImpl->maBcp47 << "' vs '" << maBcp47 <<
" and 0x" << ::std::hex << pImpl->mnLangID << " vs 0x" << ::std::hex << mnLangID);
syncVarsFromRawImpl();
if (bRegister)
mpImpl = registerImpl();
}
void LanguageTag::syncVarsFromImpl() const
{
getImpl();
syncVarsFromRawImpl();
}
void LanguageTag::syncVarsFromRawImpl() const
{
// Do not use getImpl() here.
LanguageTagImpl* pImpl = mpImpl.get();
if (!pImpl)
return;
// Obviously only mutable variables.
mbInitializedBcp47 = pImpl->mbInitializedBcp47;
maBcp47 = pImpl->maBcp47;
mbInitializedLocale = pImpl->mbInitializedLocale;
maLocale = pImpl->maLocale;
mbInitializedLangID = pImpl->mbInitializedLangID;
mnLangID = pImpl->mnLangID;
if (bRegister)
mpImpl = registerImpl();
}
@@ -1304,6 +1326,8 @@ const OUString & LanguageTag::getBcp47( bool bResolveSystem ) const
if (!bResolveSystem && mbSystemLocale)
return theEmptyBcp47::get();
if (!mbInitializedBcp47)
syncVarsFromImpl();
if (!mbInitializedBcp47)
{
getImpl()->getBcp47();
const_cast<LanguageTag*>(this)->syncFromImpl();
@@ -1436,6 +1460,8 @@ const com::sun::star::lang::Locale & LanguageTag::getLocale( bool bResolveSystem
if (!bResolveSystem && mbSystemLocale)
return theEmptyLocale::get();
if (!mbInitializedLocale)
syncVarsFromImpl();
if (!mbInitializedLocale)
{
if (mbInitializedBcp47)
const_cast<LanguageTag*>(this)->convertBcp47ToLocale();
@@ -1451,6 +1477,8 @@ LanguageType LanguageTag::getLanguageType( bool bResolveSystem ) const
if (!bResolveSystem && mbSystemLocale)
return LANGUAGE_SYSTEM;
if (!mbInitializedLangID)
syncVarsFromImpl();
if (!mbInitializedLangID)
{
if (mbInitializedBcp47)
const_cast<LanguageTag*>(this)->convertBcp47ToLang();
@@ -1565,7 +1593,10 @@ OUString LanguageTagImpl::getLanguage() const
OUString LanguageTag::getLanguage() const
{
OUString aRet( getImpl()->getLanguage());
ImplPtr pImpl = getImpl();
if (pImpl->mbCachedLanguage)
return pImpl->maCachedLanguage;
OUString aRet( pImpl->getLanguage());
const_cast<LanguageTag*>(this)->syncFromImpl();
return aRet;
}
@@ -1584,7 +1615,10 @@ OUString LanguageTagImpl::getScript() const
OUString LanguageTag::getScript() const
{
OUString aRet( getImpl()->getScript());
ImplPtr pImpl = getImpl();
if (pImpl->mbCachedScript)
return pImpl->maCachedScript;
OUString aRet( pImpl->getScript());
const_cast<LanguageTag*>(this)->syncFromImpl();
return aRet;
}
@@ -1617,7 +1651,10 @@ OUString LanguageTagImpl::getCountry() const
OUString LanguageTag::getCountry() const
{
OUString aRet( getImpl()->getCountry());
ImplPtr pImpl = getImpl();
if (pImpl->mbCachedCountry)
return pImpl->maCachedCountry;
OUString aRet( pImpl->getCountry());
const_cast<LanguageTag*>(this)->syncFromImpl();
return aRet;
}
@@ -1650,7 +1687,10 @@ OUString LanguageTagImpl::getVariants() const
OUString LanguageTag::getVariants() const
{
OUString aRet( getImpl()->getVariants());
ImplPtr pImpl = getImpl();
if (pImpl->mbCachedVariants)
return pImpl->maCachedVariants;
OUString aRet( pImpl->getVariants());
const_cast<LanguageTag*>(this)->syncFromImpl();
return aRet;
}
diff --git a/include/i18nlangtag/languagetag.hxx b/include/i18nlangtag/languagetag.hxx
index 27bcb34..c8ee717 100644
--- a/include/i18nlangtag/languagetag.hxx
+++ b/include/i18nlangtag/languagetag.hxx
@@ -504,6 +504,8 @@ private:
ImplPtr getImpl() const;
ImplPtr registerImpl() const;
void syncFromImpl();
void syncVarsFromRawImpl() const;
void syncVarsFromImpl() const;
void convertLocaleToBcp47();
void convertLocaleToLang();