summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heap/hp_hash.c23
-rw-r--r--mysys/hash.c4
-rw-r--r--mysys/mf_casecnv.c17
-rw-r--r--mysys/mf_soundex.c3
-rw-r--r--strings/ctype-mb.c24
-rw-r--r--strings/ctype-simple.c20
6 files changed, 61 insertions, 30 deletions
diff --git a/heap/hp_hash.c b/heap/hp_hash.c
index 424322fd5e7..4f7dc956cba 100644
--- a/heap/hp_hash.c
+++ b/heap/hp_hash.c
@@ -217,11 +217,14 @@ ulong hp_hashnr(register HP_KEYDEF *keydef, register const byte *key)
if (seg->charset->hash_sort)
seg->charset->hash_sort(seg->charset,pos,((uchar*)key)-pos,&nr,&nr2);
else
- for (; pos < (uchar*) key ; pos++)
{
- nr^=(ulong) ((((uint) nr & 63)+nr2) *
- ((uint) seg->charset->sort_order[(uint) *pos])) + (nr << 8);
- nr2+=3;
+ register uchar *sort_order=seg->charset->sort_order;
+ for (; pos < (uchar*) key ; pos++)
+ {
+ nr^=(ulong) ((((uint) nr & 63)+nr2) *
+ ((uint) sort_order[(uint) *pos])) + (nr << 8);
+ nr2+=3;
+ }
}
}
else
@@ -260,11 +263,15 @@ ulong hp_rec_hashnr(register HP_KEYDEF *keydef, register const byte *rec)
if (seg->charset->hash_sort)
seg->charset->hash_sort(seg->charset,pos,end-pos,&nr,&nr2);
else
- for (; pos < end ; pos++)
{
- nr^=(ulong) ((((uint) nr & 63)+nr2)*
- ((uint) seg->charset->sort_order[(uint) *pos]))+ (nr << 8);
- nr2+=3;
+ register uchar *sort_order=seg->charset->sort_order;
+
+ for (; pos < end ; pos++)
+ {
+ nr^=(ulong) ((((uint) nr & 63)+nr2)*
+ ((uint) sort_order[(uint) *pos]))+ (nr << 8);
+ nr2+=3;
+ }
}
}
else
diff --git a/mysys/hash.c b/mysys/hash.c
index 0cbd14607f6..7fb634a05b9 100644
--- a/mysys/hash.c
+++ b/mysys/hash.c
@@ -136,10 +136,12 @@ static uint calc_hashnr(CHARSET_INFO *cs __attribute__((unused)),
static uint calc_hashnr_caseup(CHARSET_INFO *cs, const byte *key,uint length)
{
register uint nr=1, nr2=4;
+ register uchar *map=cs->to_upper;
+
while (length--)
{
nr^= (((nr & 63)+nr2)*
- ((uint) (uchar) my_toupper(cs, *key++)))+ (nr << 8);
+ ((uint) (uchar) map[(uchar)*key++])) + (nr << 8);
nr2+=3;
}
return((uint) nr);
diff --git a/mysys/mf_casecnv.c b/mysys/mf_casecnv.c
index 510a9b08f76..631db18b1ed 100644
--- a/mysys/mf_casecnv.c
+++ b/mysys/mf_casecnv.c
@@ -33,8 +33,10 @@
void case_sort(CHARSET_INFO *cs, my_string str, uint length)
{
+ register uchar *map=cs->sort_order;
+
for ( ; length>0 ; length--, str++)
- *str= (char) cs->sort_order[(uchar) *str];
+ *str= (char) map[(uchar) *str];
} /* case_sort */
@@ -46,11 +48,11 @@ int my_sortcmp(CHARSET_INFO *cs, const char *s, const char *t, uint len)
else
#endif
{
+ register uchar *map=cs->sort_order;
while (len--)
{
- if (cs->sort_order[(uchar) *s++] != cs->sort_order[(uchar) *t++])
- return ((int) cs->sort_order[(uchar) s[-1]] -
- (int) cs->sort_order[(uchar) t[-1]]);
+ if (map[(uchar) *s++] != map[(uchar) *t++])
+ return ((int) map[(uchar) s[-1]] - (int) map[(uchar) t[-1]]);
}
return 0;
}
@@ -67,11 +69,12 @@ int my_sortncmp(CHARSET_INFO *cs,
#endif
{
uint len= min(s_len,t_len);
+ register uchar *map=cs->sort_order;
+
while (len--)
{
- if (cs->sort_order[(uchar) *s++] != cs->sort_order[(uchar) *t++])
- return ((int) cs->sort_order[(uchar) s[-1]] -
- (int) cs->sort_order[(uchar) t[-1]]);
+ if (map[(uchar) *s++] != map[(uchar) *t++])
+ return ((int) map[(uchar) s[-1]] - (int) map[(uchar) t[-1]]);
}
return (int) (s_len - t_len);
}
diff --git a/mysys/mf_soundex.c b/mysys/mf_soundex.c
index 8ecd95137b0..459e304dfd7 100644
--- a/mysys/mf_soundex.c
+++ b/mysys/mf_soundex.c
@@ -44,13 +44,14 @@ void soundex(CHARSET_INFO * cs,register my_string out_pntr, my_string in_pntr,
{
char ch,last_ch;
reg3 my_string end;
+ register uchar *map=cs->to_upper;
if (remove_garbage)
{
while (*in_pntr && my_isspace(cs,*in_pntr)) /* Skipp pre-space */
in_pntr++;
}
- *out_pntr++ = my_toupper(cs,*in_pntr);/* Copy first letter */
+ *out_pntr++ = map[(uchar)*in_pntr]; /* Copy first letter */
last_ch = get_scode(cs,&in_pntr,0); /* code of the first letter */
/* for the first 'double-letter */
/* check. */
diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c
index d328ebb7a36..aa475e281d0 100644
--- a/strings/ctype-mb.c
+++ b/strings/ctype-mb.c
@@ -24,13 +24,15 @@ void my_caseup_str_mb(CHARSET_INFO * cs, char *str)
{
register uint32 l;
register char *end=str+strlen(str); /* BAR TODO: remove strlen() call */
+ register uchar *map=cs->to_upper;
+
while (*str)
{
if ((l=my_ismbchar(cs, str,end)))
str+=l;
else
{
- *str=(char)my_toupper(cs,(uchar)*str);
+ *str=(char) map[(uchar)*str];
str++;
}
}
@@ -40,13 +42,15 @@ void my_casedn_str_mb(CHARSET_INFO * cs, char *str)
{
register uint32 l;
register char *end=str+strlen(str);
+ register uchar *map=cs->to_lower;
+
while (*str)
{
if ((l=my_ismbchar(cs, str,end)))
str+=l;
else
{
- *str=(char)my_tolower(cs,(uchar)*str);
+ *str=(char) map[(uchar)*str];
str++;
}
}
@@ -56,13 +60,15 @@ void my_caseup_mb(CHARSET_INFO * cs, char *str, uint length)
{
register uint32 l;
register char *end=str+length;
+ register uchar *map=cs->to_upper;
+
while (str<end)
{
if ((l=my_ismbchar(cs, str,end)))
str+=l;
else
{
- *str=(char)my_toupper(cs,(uchar)*str);
+ *str=(char) map[(uchar)*str];
str++;
}
}
@@ -72,13 +78,15 @@ void my_casedn_mb(CHARSET_INFO * cs, char *str, uint length)
{
register uint32 l;
register char *end=str+length;
+ register uchar *map=cs->to_lower;
+
while (str<end)
{
if ((l=my_ismbchar(cs, str,end)))
str+=l;
else
{
- *str=(char)my_tolower(cs,(uchar)*str);
+ *str=(char) map[(uchar)*str];
str++;
}
}
@@ -88,6 +96,8 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t)
{
register uint32 l;
register const char *end=s+strlen(s);
+ register uchar *map=cs->to_upper;
+
while (s<end)
{
if ((l=my_ismbchar(cs, s,end)))
@@ -98,7 +108,7 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t)
}
else if (my_ismbhead(cs, *t))
return 1;
- else if (my_toupper(cs,(uchar) *s++) != my_toupper(cs,(uchar) *t++))
+ else if (map[(uchar) *s++] != map[(uchar) *t++])
return 1;
}
return *t;
@@ -110,6 +120,8 @@ int my_strncasecmp_mb(CHARSET_INFO * cs,
{
register uint32 l;
register const char *end=s+len;
+ register uchar *map=cs->to_upper;
+
while (s<end)
{
if ((l=my_ismbchar(cs, s,end)))
@@ -120,7 +132,7 @@ int my_strncasecmp_mb(CHARSET_INFO * cs,
}
else if (my_ismbhead(cs, *t))
return 1;
- else if (my_toupper(cs,(uchar) *s++) != my_toupper(cs,(uchar) *t++))
+ else if (map[(uchar) *s++] != map[(uchar) *t++])
return 1;
}
return 0;
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index 52c66f0ad4e..19989afea60 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -46,43 +46,49 @@ int my_strnncoll_simple(CHARSET_INFO * cs,const char *s, uint slen,
void my_caseup_str_8bit(CHARSET_INFO * cs,char *str)
{
- while ((*str = (char) my_toupper(cs,(uchar) *str)) != 0)
+ register uchar *map=cs->to_upper;
+ while ((*str = (char) map[(uchar) *str]) != 0)
str++;
}
void my_casedn_str_8bit(CHARSET_INFO * cs,char *str)
{
- while ((*str = (char) my_tolower(cs,(uchar)*str)) != 0)
+ register uchar *map=cs->to_lower;
+ while ((*str = (char) map[(uchar)*str]) != 0)
str++;
}
void my_caseup_8bit(CHARSET_INFO * cs, char *str, uint length)
{
+ register uchar *map=cs->to_upper;
for ( ; length>0 ; length--, str++)
- *str= (char) my_toupper(cs,(uchar)*str);
+ *str= (char) map[(uchar)*str];
}
void my_casedn_8bit(CHARSET_INFO * cs, char *str, uint length)
{
+ register uchar *map=cs->to_lower;
for ( ; length>0 ; length--, str++)
- *str= (char)my_tolower(cs,(uchar) *str);
+ *str= (char) map[(uchar) *str];
}
int my_strcasecmp_8bit(CHARSET_INFO * cs,const char *s, const char *t)
{
- while (my_toupper(cs,(uchar) *s) == my_toupper(cs,(uchar) *t++))
+ register uchar *map=cs->to_upper;
+ while (map[(uchar) *s] == map[(uchar) *t++])
if (!*s++) return 0;
- return ((int) my_toupper(cs,(uchar) s[0]) - (int) my_toupper(cs,(uchar) t[-1]));
+ return ((int) map[(uchar) s[0]] - (int) map[(uchar) t[-1]]);
}
int my_strncasecmp_8bit(CHARSET_INFO * cs,
const char *s, const char *t, uint len)
{
- while (len-- != 0 && my_toupper(cs,(uchar)*s++) == my_toupper(cs,(uchar)*t++)) ;
+ register uchar *map=cs->to_upper;
+ while (len-- != 0 && map[(uchar)*s++] == map[(uchar)*t++]) ;
return (int) len+1;
}