mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-12 13:58:58 -04:00
Stop using global arrays to implement the EVUTIL_ctype functions
These apparently made libtool sad on win32, and the function call overhead here should be negligable anyway.
This commit is contained in:
parent
acc4aca49e
commit
1fdec20f8f
42
evutil.c
42
evutil.c
@ -1859,21 +1859,21 @@ evutil_sockaddr_cmp(const struct sockaddr *sa1, const struct sockaddr *sa2,
|
||||
* fails on non-ASCII platforms, but so does every other place where we
|
||||
* take a char and write it onto the network.
|
||||
**/
|
||||
const ev_uint32_t EVUTIL_ISALPHA_TABLE[8] =
|
||||
static const ev_uint32_t EVUTIL_ISALPHA_TABLE[8] =
|
||||
{ 0, 0, 0x7fffffe, 0x7fffffe, 0, 0, 0, 0 };
|
||||
const ev_uint32_t EVUTIL_ISALNUM_TABLE[8] =
|
||||
static const ev_uint32_t EVUTIL_ISALNUM_TABLE[8] =
|
||||
{ 0, 0x3ff0000, 0x7fffffe, 0x7fffffe, 0, 0, 0, 0 };
|
||||
const ev_uint32_t EVUTIL_ISSPACE_TABLE[8] = { 0x3e00, 0x1, 0, 0, 0, 0, 0, 0 };
|
||||
const ev_uint32_t EVUTIL_ISXDIGIT_TABLE[8] =
|
||||
static const ev_uint32_t EVUTIL_ISSPACE_TABLE[8] = { 0x3e00, 0x1, 0, 0, 0, 0, 0, 0 };
|
||||
static const ev_uint32_t EVUTIL_ISXDIGIT_TABLE[8] =
|
||||
{ 0, 0x3ff0000, 0x7e, 0x7e, 0, 0, 0, 0 };
|
||||
const ev_uint32_t EVUTIL_ISDIGIT_TABLE[8] = { 0, 0x3ff0000, 0, 0, 0, 0, 0, 0 };
|
||||
const ev_uint32_t EVUTIL_ISPRINT_TABLE[8] =
|
||||
static const ev_uint32_t EVUTIL_ISDIGIT_TABLE[8] = { 0, 0x3ff0000, 0, 0, 0, 0, 0, 0 };
|
||||
static const ev_uint32_t EVUTIL_ISPRINT_TABLE[8] =
|
||||
{ 0, 0xffffffff, 0xffffffff, 0x7fffffff, 0, 0, 0, 0x0 };
|
||||
const ev_uint32_t EVUTIL_ISUPPER_TABLE[8] = { 0, 0, 0x7fffffe, 0, 0, 0, 0, 0 };
|
||||
const ev_uint32_t EVUTIL_ISLOWER_TABLE[8] = { 0, 0, 0, 0x7fffffe, 0, 0, 0, 0 };
|
||||
static const ev_uint32_t EVUTIL_ISUPPER_TABLE[8] = { 0, 0, 0x7fffffe, 0, 0, 0, 0, 0 };
|
||||
static const ev_uint32_t EVUTIL_ISLOWER_TABLE[8] = { 0, 0, 0, 0x7fffffe, 0, 0, 0, 0 };
|
||||
/* Upper-casing and lowercasing tables to map characters to upper/lowercase
|
||||
* equivalents. */
|
||||
const unsigned char EVUTIL_TOUPPER_TABLE[256] = {
|
||||
static const unsigned char EVUTIL_TOUPPER_TABLE[256] = {
|
||||
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
|
||||
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
|
||||
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
|
||||
@ -1891,7 +1891,7 @@ const unsigned char EVUTIL_TOUPPER_TABLE[256] = {
|
||||
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
|
||||
240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
|
||||
};
|
||||
const unsigned char EVUTIL_TOLOWER_TABLE[256] = {
|
||||
static const unsigned char EVUTIL_TOLOWER_TABLE[256] = {
|
||||
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
|
||||
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
|
||||
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
|
||||
@ -1910,6 +1910,28 @@ const unsigned char EVUTIL_TOLOWER_TABLE[256] = {
|
||||
240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
|
||||
};
|
||||
|
||||
#define IMPL_CTYPE_FN(name) \
|
||||
int EVUTIL_##name(char c) { \
|
||||
ev_uint8_t u = c; \
|
||||
return !!(EVUTIL_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31))); \
|
||||
}
|
||||
IMPL_CTYPE_FN(ISALPHA)
|
||||
IMPL_CTYPE_FN(ISALNUM)
|
||||
IMPL_CTYPE_FN(ISSPACE)
|
||||
IMPL_CTYPE_FN(ISDIGIT)
|
||||
IMPL_CTYPE_FN(ISXDIGIT)
|
||||
IMPL_CTYPE_FN(ISPRINT)
|
||||
IMPL_CTYPE_FN(ISLOWER)
|
||||
IMPL_CTYPE_FN(ISUPPER)
|
||||
|
||||
char EVUTIL_TOLOWER(char c)
|
||||
{
|
||||
return ((char)EVUTIL_TOLOWER_TABLE[(ev_uint8_t)c]);
|
||||
}
|
||||
char EVUTIL_TOUPPER(char c)
|
||||
{
|
||||
return ((char)EVUTIL_TOUPPER_TABLE[(ev_uint8_t)c]);
|
||||
}
|
||||
int
|
||||
evutil_ascii_strcasecmp(const char *s1, const char *s2)
|
||||
{
|
||||
|
@ -105,25 +105,16 @@ extern "C" {
|
||||
* when you care about ASCII's notion of character types, because you are about
|
||||
* to send those types onto the wire.
|
||||
*/
|
||||
#define DECLARE_CTYPE_FN(name) \
|
||||
static int EVUTIL_##name(char c); \
|
||||
extern const ev_uint32_t EVUTIL_##name##_TABLE[]; \
|
||||
static inline int EVUTIL_##name(char c) { \
|
||||
ev_uint8_t u = c; \
|
||||
return !!(EVUTIL_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31))); \
|
||||
}
|
||||
DECLARE_CTYPE_FN(ISALPHA)
|
||||
DECLARE_CTYPE_FN(ISALNUM)
|
||||
DECLARE_CTYPE_FN(ISSPACE)
|
||||
DECLARE_CTYPE_FN(ISDIGIT)
|
||||
DECLARE_CTYPE_FN(ISXDIGIT)
|
||||
DECLARE_CTYPE_FN(ISPRINT)
|
||||
DECLARE_CTYPE_FN(ISLOWER)
|
||||
DECLARE_CTYPE_FN(ISUPPER)
|
||||
extern const unsigned char EVUTIL_TOUPPER_TABLE[];
|
||||
extern const unsigned char EVUTIL_TOLOWER_TABLE[];
|
||||
#define EVUTIL_TOLOWER(c) ((char)EVUTIL_TOLOWER_TABLE[(ev_uint8_t)c])
|
||||
#define EVUTIL_TOUPPER(c) ((char)EVUTIL_TOUPPER_TABLE[(ev_uint8_t)c])
|
||||
int EVUTIL_ISALPHA(char c);
|
||||
int EVUTIL_ISALNUM(char c);
|
||||
int EVUTIL_ISSPACE(char c);
|
||||
int EVUTIL_ISDIGIT(char c);
|
||||
int EVUTIL_ISXDIGIT(char c);
|
||||
int EVUTIL_ISPRINT(char c);
|
||||
int EVUTIL_ISLOWER(char c);
|
||||
int EVUTIL_ISUPPER(char c);
|
||||
char EVUTIL_TOUPPER(char c);
|
||||
char EVUTIL_TOLOWER(char c);
|
||||
|
||||
/** Helper macro. If we know that a given pointer points to a field in a
|
||||
structure, return a pointer to the structure itself. Used to implement
|
||||
|
Loading…
x
Reference in New Issue
Block a user