From a650d346f1646c1b71380430a96c440e222a087d Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 26 Nov 2017 15:28:45 +0000 Subject: [PATCH] * optimized for speed UpCase/LowerCase for UnicodeChar, based on a patch by AlexeyT, resolves #32638 git-svn-id: trunk@37625 - --- rtl/inc/ustrings.inc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/rtl/inc/ustrings.inc b/rtl/inc/ustrings.inc index 3795b41df4..e095505cb1 100644 --- a/rtl/inc/ustrings.inc +++ b/rtl/inc/ustrings.inc @@ -1325,11 +1325,14 @@ end; {$ifndef FPC_HAS_UPCASE_UNICODECHAR} {$define FPC_HAS_UPCASE_UNICODECHAR} Function UpCase(c:UnicodeChar):UnicodeChar; -var - s : UnicodeString; begin - s:=c; - result:=widestringmanager.UpperUnicodeStringProc(s)[1]; + if (word(c)>=Ord('a')) and (word(c)<=Ord('z')) then + Result:= UnicodeChar(word(c)-32) + else + if word(c)>=128 then + Result:= widestringmanager.UpperUnicodeStringProc(UnicodeString(c))[1] + else + Result:= c; end; {$endif FPC_HAS_UPCASE_UNICODECHAR} @@ -1346,11 +1349,14 @@ end; {$ifndef FPC_HAS_LOWERCASE_UNICODECHAR} {$define FPC_HAS_LOWERCASE_UNICODECHAR} Function LowerCase(c:UnicodeChar):UnicodeChar; -var - s : UnicodeString; begin - s:=c; - result:=widestringmanager.LowerUnicodeStringProc(s)[1]; + if (word(c)>=Ord('A')) and (word(c)<=Ord('Z')) then + Result:= UnicodeChar(word(c)+32) + else + if word(c)>=128 then + Result:= widestringmanager.LowerUnicodeStringProc(UnicodeString(c))[1] + else + Result:= c; end; {$endif FPC_HAS_LOWERCASE_UNICODECHAR}