summaryrefslogtreecommitdiff
path: root/i18npool/source/transliteration
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2008-01-29 07:04:39 +0000
committerVladimir Glazounov <vg@openoffice.org>2008-01-29 07:04:39 +0000
commit37d14873f7835316526c3a09161040d908e43c51 (patch)
tree2467acc89374f83a67089d4271606cce4230d577 /i18npool/source/transliteration
parent1c888f0ef80f038d3d8cc7e2411436c89a34dc8a (diff)
INTEGRATION: CWS kohei01 (1.15.118); FILE MERGED
2007/12/16 21:34:26 kohei 1.15.118.1: Issue number: i80981 Submitted by: kohei Reviewed by: kohei
Diffstat (limited to 'i18npool/source/transliteration')
-rw-r--r--i18npool/source/transliteration/transliterationImpl.cxx25
1 files changed, 19 insertions, 6 deletions
diff --git a/i18npool/source/transliteration/transliterationImpl.cxx b/i18npool/source/transliteration/transliterationImpl.cxx
index f7de60f97bfa..b29d00ca92a8 100644
--- a/i18npool/source/transliteration/transliterationImpl.cxx
+++ b/i18npool/source/transliteration/transliterationImpl.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: transliterationImpl.cxx,v $
*
- * $Revision: 1.15 $
+ * $Revision: 1.16 $
*
- * last change: $Author: obo $ $Date: 2006-09-17 09:31:51 $
+ * last change: $Author: vg $ $Date: 2008-01-29 08:04:39 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -154,6 +154,8 @@ static struct TMlist {
{(TransliterationModules)0, (TransliterationModulesNew)0, NULL}
};
+TransliterationImpl::TransBody TransliterationImpl::lastTransBody;
+
// Constructor/Destructor
TransliterationImpl::TransliterationImpl(const Reference <XMultiServiceFactory>& xMSF) : xSMgr(xMSF)
{
@@ -596,9 +598,18 @@ TransliterationImpl::clear()
caseignoreOnly = sal_True;
}
-static void SAL_CALL loadBody( Reference<XMultiServiceFactory>& xSMgr, OUString &implName,
- Reference<XExtendedTransliteration>& body) throw(RuntimeException)
+void TransliterationImpl::loadBody( OUString &implName, Reference<XExtendedTransliteration>& body )
+ throw (RuntimeException)
{
+ ::osl::MutexGuard guard(lastTransBody.mutex);
+
+ if (implName.equals(lastTransBody.Name))
+ {
+ // Use the cached body instead of going through the expensive looping again.
+ body = lastTransBody.Body;
+ return;
+ }
+
Reference< XContentEnumerationAccess > xEnumAccess( xSMgr, UNO_QUERY );
Reference< XEnumeration > xEnum(xEnumAccess->createContentEnumeration(
OUString::createFromAscii(TRLT_SERVICELNAME_L10N)));
@@ -615,6 +626,8 @@ static void SAL_CALL loadBody( Reference<XMultiServiceFactory>& xSMgr, OUString
a = xI->queryInterface(::getCppuType((
const Reference<XExtendedTransliteration>*)0));
a >>= body;
+ lastTransBody.Name = implName;
+ lastTransBody.Body = body;
return;
}
}
@@ -630,7 +643,7 @@ TransliterationImpl::loadModuleByName( const OUString& implName,
Reference<XExtendedTransliteration>& body, const Locale& rLocale) throw(RuntimeException)
{
OUString cname = OUString::createFromAscii(TRLT_IMPLNAME_PREFIX) + implName;
- loadBody(xSMgr, cname, body);
+ loadBody(cname, body);
if (body.is()) {
body->loadModule((TransliterationModules)0, rLocale); // toUpper/toLoad need rLocale
@@ -642,7 +655,7 @@ TransliterationImpl::loadModuleByName( const OUString& implName,
if (! caseignore.is()) {
OUString bname = OUString::createFromAscii(TRLT_IMPLNAME_PREFIX) +
OUString::createFromAscii(TMlist[0].implName);
- loadBody(xSMgr, bname, caseignore);
+ loadBody(bname, caseignore);
}
if (caseignore.is())
caseignore->loadModule(TMlist[i].tm, rLocale);