Alexandre Julliard : kernelbase: Directly use the wctype table for the IsChar* functions.

Alexandre Julliard julliard at winehq.org
Mon Dec 9 16:57:37 CST 2019


Module: wine
Branch: master
Commit: c7c8016b70f2af228f3b858fe816cb14cf7f6754
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=c7c8016b70f2af228f3b858fe816cb14cf7f6754

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Dec  9 10:08:23 2019 +0100

kernelbase: Directly use the wctype table for the IsChar* functions.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernelbase/locale.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++
 dlls/kernelbase/string.c |  91 ------------------------------
 2 files changed, 140 insertions(+), 91 deletions(-)

diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c
index 2dbcb0db17..950e9e230d 100644
--- a/dlls/kernelbase/locale.c
+++ b/dlls/kernelbase/locale.c
@@ -2901,6 +2901,146 @@ LANGID WINAPI DECLSPEC_HOTPATCH GetUserDefaultUILanguage(void)
 }
 
 
+/******************************************************************************
+ *	IsCharAlphaA   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaA( CHAR c )
+{
+    WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+    return !!(get_table_entry( wctype_table, wc ) & C1_ALPHA);
+}
+
+
+/******************************************************************************
+ *	IsCharAlphaW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_ALPHA);
+}
+
+
+/******************************************************************************
+ *	IsCharAlphaNumericA   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaNumericA( CHAR c )
+{
+    WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+    return !!(get_table_entry( wctype_table, wc ) & (C1_ALPHA | C1_DIGIT));
+}
+
+
+/******************************************************************************
+ *	IsCharAlphaNumericW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaNumericW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & (C1_ALPHA | C1_DIGIT));
+}
+
+
+/******************************************************************************
+ *	IsCharBlankW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharBlankW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_BLANK);
+}
+
+
+/******************************************************************************
+ *	IsCharCntrlW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharCntrlW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_CNTRL);
+}
+
+
+/******************************************************************************
+ *	IsCharDigitW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharDigitW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_DIGIT);
+}
+
+
+/******************************************************************************
+ *	IsCharLowerA   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharLowerA( CHAR c )
+{
+    WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+    return !!(get_table_entry( wctype_table, wc ) & C1_LOWER);
+}
+
+
+/******************************************************************************
+ *	IsCharLowerW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharLowerW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_LOWER);
+}
+
+
+/******************************************************************************
+ *	IsCharPunctW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharPunctW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_PUNCT);
+}
+
+
+/******************************************************************************
+ *	IsCharSpaceA   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceA( CHAR c )
+{
+    WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+    return !!(get_table_entry( wctype_table, wc ) & C1_SPACE);
+}
+
+
+/******************************************************************************
+ *	IsCharSpaceW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_SPACE);
+}
+
+
+/******************************************************************************
+ *	IsCharUpperA   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharUpperA( CHAR c )
+{
+    WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
+    return !!(get_table_entry( wctype_table, wc ) & C1_UPPER);
+}
+
+
+/******************************************************************************
+ *	IsCharUpperW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharUpperW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_UPPER);
+}
+
+
+/******************************************************************************
+ *	IsCharXDigitW   (kernelbase.@)
+ */
+BOOL WINAPI DECLSPEC_HOTPATCH IsCharXDigitW( WCHAR wc )
+{
+    return !!(get_table_entry( wctype_table, wc ) & C1_XDIGIT);
+}
+
+
 /******************************************************************************
  *	IsDBCSLeadByte   (kernelbase.@)
  */
diff --git a/dlls/kernelbase/string.c b/dlls/kernelbase/string.c
index 668fd4fa37..9a4d8c0827 100644
--- a/dlls/kernelbase/string.c
+++ b/dlls/kernelbase/string.c
@@ -33,13 +33,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(string);
                       ((ch) >= 'A' && (ch) <= 'F') || \
                       ((ch) >= 'a' && (ch) <= 'f'))
 
-static WORD get_char_type(WCHAR ch)
-{
-    WORD type = 0;
-    GetStringTypeW(CT_CTYPE1, &ch, 1, &type);
-    return type;
-}
-
 static BOOL char_compare(WORD ch1, WORD ch2, DWORD flags)
 {
     char str1[3], str2[3];
@@ -219,90 +212,6 @@ DWORD WINAPI StrCmpNICW(const WCHAR *str, const WCHAR *cmp, DWORD len)
     return StrCmpNIW(str, cmp, len);
 }
 
-BOOL WINAPI IsCharBlankW(WCHAR wc)
-{
-    return !!(get_char_type(wc) & C1_BLANK);
-}
-
-BOOL WINAPI IsCharCntrlW(WCHAR wc)
-{
-    return !!(get_char_type(wc) & C1_CNTRL);
-}
-
-BOOL WINAPI IsCharDigitW(WCHAR wc)
-{
-    return !!(get_char_type(wc) & C1_DIGIT);
-}
-
-BOOL WINAPI IsCharPunctW(WCHAR wc)
-{
-    return !!(get_char_type(wc) & C1_PUNCT);
-}
-
-BOOL WINAPI IsCharSpaceA(CHAR c)
-{
-    WORD type;
-    return GetStringTypeA(GetSystemDefaultLCID(), CT_CTYPE1, &c, 1, &type) && (type & C1_SPACE);
-}
-
-BOOL WINAPI IsCharSpaceW(WCHAR wc)
-{
-    return !!(get_char_type(wc) & C1_SPACE);
-}
-
-BOOL WINAPI IsCharXDigitW(WCHAR wc)
-{
-    return !!(get_char_type(wc) & C1_XDIGIT);
-}
-
-BOOL WINAPI IsCharAlphaA(CHAR x)
-{
-    WCHAR wch;
-    MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
-    return IsCharAlphaW(wch);
-}
-
-BOOL WINAPI IsCharAlphaW(WCHAR ch)
-{
-    return !!(get_char_type(ch) & C1_ALPHA);
-}
-
-BOOL WINAPI IsCharLowerA(CHAR x)
-{
-    WCHAR wch;
-    MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
-    return IsCharLowerW(wch);
-}
-
-BOOL WINAPI IsCharLowerW(WCHAR ch)
-{
-    return !!(get_char_type(ch) & C1_LOWER);
-}
-
-BOOL WINAPI IsCharAlphaNumericA(CHAR x)
-{
-    WCHAR wch;
-    MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
-    return IsCharAlphaNumericW(wch);
-}
-
-BOOL WINAPI IsCharAlphaNumericW(WCHAR ch)
-{
-    return !!(get_char_type(ch) & (C1_ALPHA | C1_DIGIT));
-}
-
-BOOL WINAPI IsCharUpperA(CHAR x)
-{
-    WCHAR wch;
-    MultiByteToWideChar(CP_ACP, 0, &x, 1, &wch, 1);
-    return IsCharUpperW(wch);
-}
-
-BOOL WINAPI IsCharUpperW(WCHAR ch)
-{
-    return !!(get_char_type(ch) & C1_UPPER);
-}
-
 char * WINAPI StrChrA(const char *str, WORD ch)
 {
     TRACE("%s, %#x\n", wine_dbgstr_a(str), ch);




More information about the wine-cvs mailing list