📄 m_ctype.h
字号:
/* Copyright (C) 2000 MySQL AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *//* A better inplementation of the UNIX ctype(3) library. Notes: my_global.h should be included before ctype.h*/#ifndef _m_ctype_h#define _m_ctype_h#ifdef __cplusplusextern "C" {#endif#define MY_CS_NAME_SIZE 32#define MY_CS_CTYPE_TABLE_SIZE 257#define MY_CS_TO_LOWER_TABLE_SIZE 256#define MY_CS_TO_UPPER_TABLE_SIZE 256#define MY_CS_SORT_ORDER_TABLE_SIZE 256#define MY_CS_TO_UNI_TABLE_SIZE 256#define CHARSET_DIR "charsets/"#define my_wc_t ulongtypedef struct unicase_info_st{ uint16 toupper; uint16 tolower; uint16 sort;} MY_UNICASE_INFO;#define MY_CS_ILSEQ 0#define MY_CS_ILUNI 0#define MY_CS_TOOSMALL -1#define MY_CS_TOOFEW(n) (-1-(n))#define MY_SEQ_INTTAIL 1#define MY_SEQ_SPACES 2 /* My charsets_list flags */#define MY_CS_COMPILED 1 /* compiled-in sets */#define MY_CS_CONFIG 2 /* sets that have a *.conf file */#define MY_CS_INDEX 4 /* sets listed in the Index file */#define MY_CS_LOADED 8 /* sets that are currently loaded */#define MY_CS_BINSORT 16 /* if binary sort order */#define MY_CS_PRIMARY 32 /* if primary collation */#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */#define MY_CS_UNICODE 128 /* is a charset is full unicode */#define MY_CS_READY 256 /* if a charset is initialized */#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/#define MY_CS_CSSORT 1024 /* if case sensitive sort order */ #define MY_CHARSET_UNDEFINED 0typedef struct my_uni_idx_st{ uint16 from; uint16 to; uchar *tab;} MY_UNI_IDX;typedef struct{ uint beg; uint end; uint mblen;} my_match_t;enum my_lex_states{ MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON, MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, MY_LEX_IDENT_OR_KEYWORD, MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, MY_LEX_STRING_OR_DELIMITER};struct charset_info_st;typedef struct my_collation_handler_st{ my_bool (*init)(struct charset_info_st *, void *(*alloc)(uint)); /* Collation routines */ int (*strnncoll)(struct charset_info_st *, const uchar *, uint, const uchar *, uint, my_bool); int (*strnncollsp)(struct charset_info_st *, const uchar *, uint, const uchar *, uint); int (*strnxfrm)(struct charset_info_st *, uchar *, uint, const uchar *, uint); my_bool (*like_range)(struct charset_info_st *, const char *s, uint s_length, pchar w_prefix, pchar w_one, pchar w_many, uint res_length, char *min_str, char *max_str, uint *min_len, uint *max_len); int (*wildcmp)(struct charset_info_st *, const char *str,const char *str_end, const char *wildstr,const char *wildend, int escape,int w_one, int w_many); int (*strcasecmp)(struct charset_info_st *, const char *, const char *); uint (*instr)(struct charset_info_st *, const char *b, uint b_length, const char *s, uint s_length, my_match_t *match, uint nmatch); /* Hash calculation */ void (*hash_sort)(struct charset_info_st *cs, const uchar *key, uint len, ulong *nr1, ulong *nr2); } MY_COLLATION_HANDLER;extern MY_COLLATION_HANDLER my_collation_mb_bin_handler;extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler;extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler;typedef struct my_charset_handler_st{ my_bool (*init)(struct charset_info_st *, void *(*alloc)(uint)); /* Multibyte routines */ int (*ismbchar)(struct charset_info_st *, const char *, const char *); 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); uint (*well_formed_len)(struct charset_info_st *, const char *b,const char *e, uint nchars, int *error); uint (*lengthsp)(struct charset_info_st *, const char *ptr, uint length); uint (*numcells)(struct charset_info_st *, const char *b, const char *e); /* Unicode convertion */ int (*mb_wc)(struct charset_info_st *cs,my_wc_t *wc, const unsigned char *s,const unsigned char *e); int (*wc_mb)(struct charset_info_st *cs,my_wc_t wc, unsigned char *s,unsigned char *e); /* Functions for case and sort convertion */ void (*caseup_str)(struct charset_info_st *, char *); void (*casedn_str)(struct charset_info_st *, char *); void (*caseup)(struct charset_info_st *, char *, uint); void (*casedn)(struct charset_info_st *, char *, uint); /* Charset dependant snprintf() */ int (*snprintf)(struct charset_info_st *, char *to, uint n, const char *fmt, ...); int (*long10_to_str)(struct charset_info_st *, char *to, uint n, int radix, long int val); int (*longlong10_to_str)(struct charset_info_st *, char *to, uint n, int radix, longlong val); void (*fill)(struct charset_info_st *, char *to, uint len, int fill); /* String-to-number convertion routines */ long (*strntol)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); ulong (*strntoul)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); longlong (*strntoll)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); ulonglong (*strntoull)(struct charset_info_st *, const char *s, uint l, int base, char **e, int *err); double (*strntod)(struct charset_info_st *, char *s, uint l, char **e, int *err); longlong (*my_strtoll10)(struct charset_info_st *cs, const char *nptr, char **endptr, int *error); ulong (*scan)(struct charset_info_st *, const char *b, const char *e, int sq);} MY_CHARSET_HANDLER;extern MY_CHARSET_HANDLER my_charset_8bit_handler;extern MY_CHARSET_HANDLER my_charset_ucs2_handler;typedef struct charset_info_st{ uint number; uint primary_number; uint binary_number; uint state; const char *csname; const char *name; const char *comment; const char *tailoring; uchar *ctype; uchar *to_lower; uchar *to_upper; uchar *sort_order; uint16 *contractions; uint16 **sort_order_big; uint16 *tab_to_uni; MY_UNI_IDX *tab_from_uni; uchar *state_map; uchar *ident_map; uint strxfrm_multiply; uint mbminlen; uint mbmaxlen; uint16 min_sort_char; uint16 max_sort_char; /* For LIKE optimization */ MY_CHARSET_HANDLER *cset; MY_COLLATION_HANDLER *coll; } CHARSET_INFO;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -