New functions in CHARSET_INFO structure

This commit is contained in:
unknown 2003-01-31 16:22:22 +04:00
commit 953e27208b
18 changed files with 104 additions and 2 deletions

View file

@ -112,6 +112,8 @@ typedef struct charset_info_st
int (*ismbchar)(struct charset_info_st *, const char *, const char *); int (*ismbchar)(struct charset_info_st *, const char *, const char *);
my_bool (*ismbhead)(struct charset_info_st *, uint); my_bool (*ismbhead)(struct charset_info_st *, uint);
int (*mbcharlen)(struct charset_info_st *, uint); int (*mbcharlen)(struct charset_info_st *, uint);
uint (*numchars)(struct charset_info_st *, const char *b, const char *e);
uint (*charpos)(struct charset_info_st *, const char *b, const char *e, uint pos);
/* Unicode convertion */ /* Unicode convertion */
int (*mb_wc)(struct charset_info_st *cs,my_wc_t *wc, int (*mb_wc)(struct charset_info_st *cs,my_wc_t *wc,
@ -252,6 +254,9 @@ int my_wildcmp_8bit(CHARSET_INFO *,
const char *wildstr,const char *wildend, const char *wildstr,const char *wildend,
int escape, int w_one, int w_many); int escape, int w_one, int w_many);
uint my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e);
uint my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, uint pos);
#ifdef USE_MB #ifdef USE_MB
/* Functions for multibyte charsets */ /* Functions for multibyte charsets */
@ -266,6 +271,9 @@ int my_wildcmp_mb(CHARSET_INFO *,
const char *str,const char *str_end, const char *str,const char *str_end,
const char *wildstr,const char *wildend, const char *wildstr,const char *wildend,
int escape, int w_one, int w_many); int escape, int w_one, int w_many);
uint my_numchars_mb(CHARSET_INFO *, const char *b, const char *e);
uint my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, uint pos);
#endif #endif
#define _U 01 /* Upper case */ #define _U 01 /* Upper case */

View file

@ -84,6 +84,8 @@ static void simple_cs_init_functions(CHARSET_INFO *cs)
cs->strntod = my_strntod_8bit; cs->strntod = my_strntod_8bit;
cs->scan = my_scan_8bit; cs->scan = my_scan_8bit;
cs->mbmaxlen = 1; cs->mbmaxlen = 1;
cs->numchars = my_numchars_8bit;
cs->charpos = my_charpos_8bit;
} }

View file

@ -6254,6 +6254,8 @@ CHARSET_INFO my_charset_big5 =
ismbchar_big5, ismbchar_big5,
ismbhead_big5, ismbhead_big5,
mbcharlen_big5, mbcharlen_big5,
my_numchars_mb,
my_charpos_mb,
my_mb_wc_big5, /* mb_wc */ my_mb_wc_big5, /* mb_wc */
my_wc_mb_big5, /* wc_mb */ my_wc_mb_big5, /* wc_mb */
my_caseup_str_mb, my_caseup_str_mb,

View file

@ -292,6 +292,8 @@ CHARSET_INFO my_charset_bin =
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_bin, /* mb_wc */ my_mb_wc_bin, /* mb_wc */
my_wc_mb_bin, /* wc_mb */ my_wc_mb_bin, /* wc_mb */
my_caseup_str_bin, /* caseup_str */ my_caseup_str_bin, /* caseup_str */

View file

@ -628,6 +628,8 @@ CHARSET_INFO my_charset_czech =
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,

View file

@ -8662,6 +8662,8 @@ CHARSET_INFO my_charset_euc_kr =
ismbchar_euc_kr, ismbchar_euc_kr,
ismbhead_euc_kr, ismbhead_euc_kr,
mbcharlen_euc_kr, mbcharlen_euc_kr,
my_numchars_mb,
my_charpos_mb,
my_mb_wc_euc_kr, /* mb_wc */ my_mb_wc_euc_kr, /* mb_wc */
my_wc_mb_euc_kr, /* wc_mb */ my_wc_mb_euc_kr, /* wc_mb */
my_caseup_str_mb, my_caseup_str_mb,

View file

@ -2828,6 +2828,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -2877,6 +2879,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -2925,6 +2929,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,
@ -3937,7 +3943,8 @@ CHARSET_INFO compiled_charsets[] = {
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL,
NULL,
NULL, /* mb_wc */ NULL, /* mb_wc */
NULL, /* wc_mb */ NULL, /* wc_mb */

View file

@ -5712,6 +5712,8 @@ CHARSET_INFO my_charset_gb2312 =
ismbchar_gb2312, ismbchar_gb2312,
ismbhead_gb2312, ismbhead_gb2312,
mbcharlen_gb2312, mbcharlen_gb2312,
my_numchars_mb,
my_charpos_mb,
my_mb_wc_gb2312, /* mb_wc */ my_mb_wc_gb2312, /* mb_wc */
my_wc_mb_gb2312, /* wc_mb */ my_wc_mb_gb2312, /* wc_mb */
my_caseup_str_mb, my_caseup_str_mb,

View file

@ -9909,6 +9909,8 @@ CHARSET_INFO my_charset_gbk =
ismbchar_gbk, ismbchar_gbk,
ismbhead_gbk, ismbhead_gbk,
mbcharlen_gbk, mbcharlen_gbk,
my_numchars_mb,
my_charpos_mb,
my_mb_wc_gbk, /* mb_wc */ my_mb_wc_gbk, /* mb_wc */
my_wc_mb_gbk, /* wc_mb */ my_wc_mb_gbk, /* wc_mb */
my_caseup_str_mb, my_caseup_str_mb,

View file

@ -198,6 +198,8 @@ CHARSET_INFO my_charset_latin1 =
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_latin1, /* mb_wc */ my_mb_wc_latin1, /* mb_wc */
my_wc_mb_latin1, /* wc_mb */ my_wc_mb_latin1, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,

View file

@ -369,6 +369,8 @@ CHARSET_INFO my_charset_latin1_de =
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,

View file

@ -276,5 +276,33 @@ int my_wildcmp_mb(CHARSET_INFO *cs,
return (str != str_end ? 1 : 0); return (str != str_end ? 1 : 0);
} }
uint my_numchars_mb(CHARSET_INFO *cs __attribute__((unused)),
const char *b, const char *e)
{
register uint32 n=0,mblen;
while (b < e)
{
b+= (mblen= my_ismbchar(cs,b,e)) ? mblen : 1;
++n;
}
return n;
}
uint my_charpos_mb(CHARSET_INFO *cs __attribute__((unused)),
const char *b __attribute__((unused)),
const char *e __attribute__((unused)),
uint pos)
{
uint res=0, mblen;
const char *b0;
while (pos && b<e)
{
b+= (mblen= my_ismbchar(cs,b,e)) ? mblen : 1;
pos--;
}
return b-b0;
}
#endif #endif

View file

@ -1036,3 +1036,17 @@ void my_fill_8bit(CHARSET_INFO *cs __attribute__((unused)),
{ {
bfill(s,l,fill); bfill(s,l,fill);
} }
uint my_numchars_8bit(CHARSET_INFO *cs __attribute__((unused)),
const char *b, const char *e)
{
return e-b;
}
uint my_charpos_8bit(CHARSET_INFO *cs __attribute__((unused)),
const char *b __attribute__((unused)),
const char *e __attribute__((unused)),
uint pos)
{
return pos;
}

View file

@ -4496,6 +4496,8 @@ CHARSET_INFO my_charset_sjis =
ismbchar_sjis, ismbchar_sjis,
ismbhead_sjis, ismbhead_sjis,
mbcharlen_sjis, mbcharlen_sjis,
my_numchars_mb,
my_charpos_mb,
my_mb_wc_sjis, /* mb_wc */ my_mb_wc_sjis, /* mb_wc */
my_wc_mb_sjis, /* wc_mb */ my_wc_mb_sjis, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,

View file

@ -719,6 +719,8 @@ CHARSET_INFO my_charset_tis620 =
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,

View file

@ -8453,6 +8453,8 @@ CHARSET_INFO my_charset_ujis =
ismbchar_ujis, ismbchar_ujis,
ismbhead_ujis, ismbhead_ujis,
mbcharlen_ujis, mbcharlen_ujis,
my_numchars_mb,
my_charpos_mb,
my_mb_wc_euc_jp, /* mb_wc */ my_mb_wc_euc_jp, /* mb_wc */
my_wc_mb_euc_jp, /* wc_mb */ my_wc_mb_euc_jp, /* wc_mb */
my_caseup_str_mb, my_caseup_str_mb,

View file

@ -1998,6 +1998,8 @@ CHARSET_INFO my_charset_utf8 =
my_ismbchar_utf8, /* ismbchar */ my_ismbchar_utf8, /* ismbchar */
my_ismbhead_utf8, /* ismbhead */ my_ismbhead_utf8, /* ismbhead */
my_mbcharlen_utf8, /* mbcharlen */ my_mbcharlen_utf8, /* mbcharlen */
my_numchars_mb,
my_charpos_mb,
my_utf8_uni, /* mb_wc */ my_utf8_uni, /* mb_wc */
my_uni_utf8, /* wc_mb */ my_uni_utf8, /* wc_mb */
my_caseup_str_utf8, my_caseup_str_utf8,
@ -3064,6 +3066,21 @@ cnv:
return (int) (dst-db); return (int) (dst-db);
} }
static
uint my_numchars_ucs2(CHARSET_INFO *cs __attribute__((unused)),
const char *b, const char *e)
{
return (e-b)/2;
}
static
uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)),
const char *b __attribute__((unused)),
const char *e __attribute__((unused)),
uint pos)
{
return pos/2;
}
CHARSET_INFO my_charset_ucs2 = CHARSET_INFO my_charset_ucs2 =
{ {
@ -3088,6 +3105,8 @@ CHARSET_INFO my_charset_ucs2 =
my_ismbchar_ucs2, /* ismbchar */ my_ismbchar_ucs2, /* ismbchar */
my_ismbhead_ucs2, /* ismbhead */ my_ismbhead_ucs2, /* ismbhead */
my_mbcharlen_ucs2, /* mbcharlen */ my_mbcharlen_ucs2, /* mbcharlen */
my_numchars_ucs2,
my_charpos_ucs2,
my_ucs2_uni, /* mb_wc */ my_ucs2_uni, /* mb_wc */
my_uni_ucs2, /* wc_mb */ my_uni_ucs2, /* wc_mb */
my_caseup_str_ucs2, my_caseup_str_ucs2,

View file

@ -663,6 +663,8 @@ CHARSET_INFO my_charset_win1250ch =
NULL, /* ismbchar */ NULL, /* ismbchar */
NULL, /* ismbhead */ NULL, /* ismbhead */
NULL, /* mbcharlen */ NULL, /* mbcharlen */
my_numchars_8bit,
my_charpos_8bit,
my_mb_wc_8bit, /* mb_wc */ my_mb_wc_8bit, /* mb_wc */
my_wc_mb_8bit, /* wc_mb */ my_wc_mb_8bit, /* wc_mb */
my_caseup_str_8bit, my_caseup_str_8bit,