| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing#kwsys for details. */ | |
| #ifdef KWSYS_STRING_C | |
| /* | |
| All code in this source file is conditionally compiled to work-around | |
| template definition auto-search on VMS. Other source files in this | |
| directory that use the stl string cause the compiler to load this | |
| source to try to get the definition of the string template. This | |
| condition blocks the compiler from seeing the symbols defined here. | |
| */ | |
| # include "kwsysPrivate.h" | |
| # include KWSYS_HEADER(String.h) | |
| /* Work-around CMake dependency scanning limitation. This must | |
| duplicate the above list of headers. */ | |
| # if 0 | |
| # include "String.h.in" | |
| # endif | |
| # include <ctype.h> | |
| int kwsysString_isalnum(char c) | |
| { | |
| return (kwsysString_isalpha(c) | /* bitwise-or to avoid branching. */ | |
| kwsysString_isdigit(c)); | |
| } | |
| int kwsysString_isalpha(char c) | |
| { | |
| return (kwsysString_islower(c) | /* bitwise-or to avoid branching. */ | |
| kwsysString_isupper(c)); | |
| } | |
| int kwsysString_isascii(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return (uc & 0x80) ^ 0x80; | |
| } | |
| int kwsysString_isblank(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return uc < 0x80 && isblank(uc); | |
| } | |
| int kwsysString_iscntrl(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return uc < 0x80 && iscntrl(uc); | |
| } | |
| int kwsysString_isdigit(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| /* Push '0-9' to 246-255 so integer division by 246 is 1 only for them. */ | |
| return ((uc + 246 - '0') & 0xFF) / 246; | |
| } | |
| int kwsysString_isgraph(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return uc < 0x80 && isgraph(uc); | |
| } | |
| int kwsysString_islower(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| /* Push 'a-z' to 230-255 so integer division by 230 is 1 only for them. */ | |
| return ((uc + 230 - 'a') & 0xFF) / 230; | |
| } | |
| int kwsysString_isprint(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| /* Push 32-126 to 161-255 so integer division by 161 is 1 only for them. */ | |
| return ((uc + 161 - ' ') & 0xFF) / 161; | |
| } | |
| int kwsysString_ispunct(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return uc < 0x80 && ispunct(uc); | |
| } | |
| int kwsysString_isspace(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return uc < 0x80 && isspace(uc); | |
| } | |
| int kwsysString_isupper(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| /* Push 'A-Z' to 230-255 so integer division by 230 is 1 only for them. */ | |
| return ((uc + 230 - 'A') & 0xFF) / 230; | |
| } | |
| int kwsysString_isxdigit(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| return ( | |
| /* Push '0-9' to 246-255 so integer division by 246 is 1 only for them. */ | |
| (((uc + 246 - '0') & 0xFF) / 246) | /* bitwise-or to avoid branching. */ | |
| /* Push 'A-F' to 250-255 so integer division by 250 is 1 only for them. */ | |
| (((uc + 250 - 'A') & 0xFF) / 250) | /* bitwise-or to avoid branching. */ | |
| /* Push 'a-f' to 250-255 so integer division by 250 is 1 only for them. */ | |
| (((uc + 250 - 'a') & 0xFF) / 250)); | |
| } | |
| unsigned char kwsysString_tolower(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| /* Push 'A-Z' to 230-255 so integer division by 230 is 1 only for them. */ | |
| return (unsigned char)(uc ^ ((((uc + 230 - 'A') & 0xFF) / 230) << 5)); | |
| } | |
| unsigned char kwsysString_toupper(char c) | |
| { | |
| unsigned char const uc = (unsigned char)c; | |
| /* Push 'a-z' to 230-255 so integer division by 230 is 1 only for them. */ | |
| return (unsigned char)(uc ^ ((((uc + 230 - 'a') & 0xFF) / 230) << 5)); | |
| } | |
| int kwsysString_strcasecmp(char const* lhs, char const* rhs) | |
| { | |
| int result; | |
| while ((result = kwsysString_tolower(*lhs) - kwsysString_tolower(*rhs++)) == | |
| 0 && | |
| *lhs++) { | |
| } | |
| return result; | |
| } | |
| int kwsysString_strncasecmp(char const* lhs, char const* rhs, size_t n) | |
| { | |
| int result = 0; | |
| while (n && | |
| (result = kwsysString_tolower(*lhs) - kwsysString_tolower(*rhs++)) == | |
| 0 && | |
| *lhs++) { | |
| --n; | |
| } | |
| return result; | |
| } | |
| #endif /* KWSYS_STRING_C */ |