summaryrefslogtreecommitdiff
path: root/linguistic/source/misc.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2021-09-16 11:03:04 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-09-17 10:49:21 +0200
commitdac29c278531d5474289eb54aa03987c4958ac83 (patch)
tree25b32b704b15e1aa89fbd1f6a83d5f25db9169d6 /linguistic/source/misc.cxx
parentfbad565fcb5ee8d20a1a83838e66b43aeb23bfa4 (diff)
speedup toUpperCase when called in parallel
by removing locking from CharClass, which means we need to make it an immutable class Since SharedStringPool in sc/ stores a pointer to the CharClass in use, we have to tweak SvtSysLocale so that the object does not change location. Change-Id: I2c62d354fa542ebc04e755ce5b9b9e2ddff76a64 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122185 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'linguistic/source/misc.cxx')
-rw-r--r--linguistic/source/misc.cxx22
1 files changed, 4 insertions, 18 deletions
diff --git a/linguistic/source/misc.cxx b/linguistic/source/misc.cxx
index 363b5f445a47..f541b97551e6 100644
--- a/linguistic/source/misc.cxx
+++ b/linguistic/source/misc.cxx
@@ -566,21 +566,10 @@ uno::Reference< XHyphenatedWord > RebuildHyphensAndControlChars(
return xRes;
}
-static CharClass & lcl_GetCharClass()
-{
- static CharClass aCC( LanguageTag( LANGUAGE_ENGLISH_US ));
- return aCC;
-}
-
-static std::mutex s_GetCharClassMutex;
-
bool IsUpper( const OUString &rText, sal_Int32 nPos, sal_Int32 nLen, LanguageType nLanguage )
{
- std::scoped_lock aGuard( s_GetCharClassMutex );
-
- CharClass &rCC = lcl_GetCharClass();
- rCC.setLanguageTag( LanguageTag( nLanguage ));
- sal_Int32 nFlags = rCC.getStringType( rText, nPos, nLen );
+ CharClass aCC(( LanguageTag( nLanguage ) ));
+ sal_Int32 nFlags = aCC.getStringType( rText, nPos, nLen );
return (nFlags & KCharacterType::UPPER)
&& !(nFlags & KCharacterType::LOWER);
}
@@ -612,11 +601,8 @@ CapType capitalType(const OUString& aTerm, CharClass const * pCC)
OUString ToLower( const OUString &rText, LanguageType nLanguage )
{
- std::scoped_lock aGuard( s_GetCharClassMutex );
-
- CharClass &rCC = lcl_GetCharClass();
- rCC.setLanguageTag( LanguageTag( nLanguage ));
- return rCC.lowercase( rText );
+ CharClass aCC(( LanguageTag( nLanguage ) ));
+ return aCC.lowercase( rText );
}
// sorted(!) array of unicode ranges for code points that are exclusively(!) used as numbers