~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/charset.h

  • Committer: Olaf van der Spek
  • Date: 2011-10-19 09:25:53 UTC
  • mto: This revision was merged to the branch mainline in revision 2445.
  • Revision ID: olafvdspek@gmail.com-20111019092553-yu931zcx3p0z31sn
Refactor

Show diffs side-by-side

added added

removed removed

Lines of Context:
105
105
#define _MY_X   0200    /* heXadecimal digit */
106
106
 
107
107
/* Some typedef to make it easy for C++ to make function pointers */
108
 
typedef int (*my_charset_conv_mb_wc)(const struct charset_info_st * const, my_wc_t *,
109
 
                                     const unsigned char *, const unsigned char *);
110
 
typedef int (*my_charset_conv_wc_mb)(const struct charset_info_st * const, my_wc_t,
111
 
                                     unsigned char *, unsigned char *);
112
 
typedef size_t (*my_charset_conv_case)(const struct charset_info_st * const,
113
 
                                       char *, size_t, char *, size_t);
114
 
struct charset_info_st;
115
 
typedef struct unicase_info_st
 
108
typedef int (*my_charset_conv_mb_wc)(const charset_info_st*, my_wc_t *, const unsigned char *, const unsigned char *);
 
109
typedef int (*my_charset_conv_wc_mb)(const charset_info_st*, my_wc_t, unsigned char *, unsigned char *);
 
110
typedef size_t (*my_charset_conv_case)(const charset_info_st*, char *, size_t, char *, size_t);
 
111
 
 
112
struct MY_UNICASE_INFO
116
113
{
117
114
  uint16_t toupper;
118
115
  uint16_t tolower;
119
116
  uint16_t sort;
120
 
} MY_UNICASE_INFO;
 
117
};
121
118
 
122
 
typedef struct uni_ctype_st
 
119
struct MY_UNI_CTYPE
123
120
{
124
121
  unsigned char  pctype;
125
122
  unsigned char  *ctype;
126
 
} MY_UNI_CTYPE;
 
123
};
127
124
 
128
125
/* A helper function for "need at least n bytes" */
129
126
inline static int my_cs_toosmalln(int n)
130
127
{
131
 
  return -100-n;
 
128
  return -100 - n;
132
129
}
133
130
 
134
 
typedef struct my_uni_idx_st
 
131
struct MY_UNI_IDX
135
132
{
136
133
  uint16_t from;
137
134
  uint16_t to;
138
135
  unsigned char  *tab;
139
 
} MY_UNI_IDX;
 
136
};
140
137
 
141
 
typedef struct
 
138
struct my_match_t
142
139
{
143
140
  uint32_t beg;
144
141
  uint32_t end;
145
142
  uint32_t mb_len;
146
 
} my_match_t;
 
143
};
147
144
 
148
145
enum my_lex_states
149
146
{
161
158
  MY_LEX_STRING_OR_DELIMITER
162
159
};
163
160
 
164
 
struct charset_info_st;
165
 
 
166
161
/* See strings/charset_info_st.txt for information about this structure  */
167
 
typedef struct my_collation_handler_st
 
162
struct MY_COLLATION_HANDLER
168
163
{
169
164
  bool (*init)(charset_info_st&, unsigned char *(*alloc)(size_t));
170
165
  /* Collation routines */
171
 
  int     (*strnncoll)(const struct charset_info_st * const,
 
166
  int     (*strnncoll)(const charset_info_st*,
172
167
                       const unsigned char *, size_t, const unsigned char *, size_t, bool);
173
 
  int     (*strnncollsp)(const struct charset_info_st * const,
 
168
  int     (*strnncollsp)(const charset_info_st*,
174
169
                         const unsigned char *, size_t, const unsigned char *, size_t,
175
170
                         bool diff_if_only_endspace_difference);
176
 
  size_t  (*strnxfrm)(const struct charset_info_st * const,
 
171
  size_t  (*strnxfrm)(const charset_info_st*,
177
172
                      unsigned char *dst, size_t dstlen, uint32_t nweights,
178
173
                      const unsigned char *src, size_t srclen, uint32_t flags);
179
 
  size_t    (*strnxfrmlen)(const struct charset_info_st * const, size_t);
180
 
  bool (*like_range)(const struct charset_info_st * const,
 
174
  size_t    (*strnxfrmlen)(const charset_info_st*, size_t);
 
175
  bool (*like_range)(const charset_info_st*,
181
176
                        const char *s, size_t s_length,
182
177
                        char escape, char w_one, char w_many,
183
178
                        size_t res_length,
184
179
                        char *min_str, char *max_str,
185
180
                        size_t *min_len, size_t *max_len);
186
 
  int     (*wildcmp)(const struct charset_info_st * const,
 
181
  int     (*wildcmp)(const charset_info_st*,
187
182
                     const char *str,const char *str_end,
188
183
                     const char *wildstr,const char *wildend,
189
184
                     int escape,int w_one, int w_many);
190
185
 
191
 
  int  (*strcasecmp)(const struct charset_info_st * const, const char *, const char *);
 
186
  int  (*strcasecmp)(const charset_info_st*, const char *, const char *);
192
187
 
193
 
  uint32_t (*instr)(const struct charset_info_st * const,
 
188
  uint32_t (*instr)(const charset_info_st*,
194
189
                const char *b, size_t b_length,
195
190
                const char *s, size_t s_length,
196
191
                my_match_t *match, uint32_t nmatch);
197
192
 
198
193
  /* Hash calculation */
199
 
  void (*hash_sort)(const struct charset_info_st *cs, const unsigned char *key, size_t len,
 
194
  void (*hash_sort)(const charset_info_st *cs, const unsigned char *key, size_t len,
200
195
                    uint32_t *nr1, uint32_t *nr2);
201
 
  bool (*propagate)(const struct charset_info_st *cs, const unsigned char *str, size_t len);
202
 
} MY_COLLATION_HANDLER;
 
196
  bool (*propagate)(const charset_info_st *cs, const unsigned char *str, size_t len);
 
197
};
203
198
 
204
199
/* See strings/charset_info_st.txt about information on this structure  */
205
200
typedef struct my_charset_handler_st
206
201
{
207
202
  void (*init_unused)();
208
203
  /* Multibyte routines */
209
 
  uint32_t    (*ismbchar)(const struct charset_info_st * const, const char *, const char *);
210
 
  uint32_t    (*mbcharlen)(const struct charset_info_st * const, uint32_t c);
211
 
  size_t  (*numchars)(const struct charset_info_st * const, const char *b, const char *e);
212
 
  size_t  (*charpos)(const struct charset_info_st * const, const char *b, const char *e,
213
 
                     size_t pos);
214
 
  size_t  (*well_formed_len)(const struct charset_info_st * const,
215
 
                             const char *b,const char *e,
216
 
                             size_t nchars, int *error);
217
 
  size_t  (*lengthsp)(const struct charset_info_st * const, const char *ptr, size_t length);
218
 
  size_t  (*numcells)(const struct charset_info_st * const, const char *b, const char *e);
 
204
  uint32_t    (*ismbchar)(const charset_info_st*, const char *, const char *);
 
205
  uint32_t    (*mbcharlen)(const charset_info_st*, uint32_t c);
 
206
  size_t  (*numchars)(const charset_info_st*, const char *b, const char *e);
 
207
  size_t  (*charpos)(const charset_info_st*, const char *b, const char *e, size_t pos);
 
208
  size_t  (*well_formed_len)(const charset_info_st&, str_ref, size_t nchars, int *error);
 
209
  size_t  (*lengthsp)(const charset_info_st*, const char *ptr, size_t length);
 
210
  size_t  (*numcells)(const charset_info_st*, const char *b, const char *e);
219
211
 
220
212
  /* Unicode conversion */
221
213
  my_charset_conv_mb_wc mb_wc;
222
214
  my_charset_conv_wc_mb wc_mb;
223
215
 
224
216
  /* CTYPE scanner */
225
 
  int (*ctype)(const struct charset_info_st *cs, int *ctype,
 
217
  int (*ctype)(const charset_info_st *cs, int *ctype,
226
218
               const unsigned char *s, const unsigned char *e);
227
219
 
228
220
  /* Functions for case and sort conversion */
229
 
  size_t  (*caseup_str)(const struct charset_info_st * const, char *);
230
 
  size_t  (*casedn_str)(const struct charset_info_st * const, char *);
 
221
  size_t  (*caseup_str)(const charset_info_st*, char *);
 
222
  size_t  (*casedn_str)(const charset_info_st*, char *);
231
223
 
232
224
  my_charset_conv_case caseup;
233
225
  my_charset_conv_case casedn;
234
226
 
235
227
  /* Charset dependant snprintf() */
236
 
  size_t (*snprintf)(const struct charset_info_st * const, char *to, size_t n,
 
228
  size_t (*snprintf)(const charset_info_st*, char *to, size_t n,
237
229
                     const char *fmt,
238
230
                     ...)
239
231
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
240
232
                         __attribute__((format(printf, 4, 5)))
241
233
#endif
242
234
                         ;
243
 
  size_t (*long10_to_str)(const struct charset_info_st * const, char *to, size_t n,
 
235
  size_t (*long10_to_str)(const charset_info_st*, char *to, size_t n,
244
236
                          int radix, long int val);
245
 
  size_t (*int64_t10_to_str)(const struct charset_info_st * const, char *to, size_t n,
 
237
  size_t (*int64_t10_to_str)(const charset_info_st*, char *to, size_t n,
246
238
                              int radix, int64_t val);
247
239
 
248
 
  void (*fill)(const struct charset_info_st * const, char *to, size_t len, int fill);
 
240
  void (*fill)(const charset_info_st*, char *to, size_t len, int fill);
249
241
 
250
242
  /* String-to-number conversion routines */
251
 
  long        (*strntol)(const struct charset_info_st * const, const char *s, size_t l,
252
 
                         int base, char **e, int *err);
253
 
  unsigned long      (*strntoul)(const struct charset_info_st * const, const char *s, size_t l,
254
 
                         int base, char **e, int *err);
255
 
  int64_t   (*strntoll)(const struct charset_info_st * const, const char *s, size_t l,
256
 
                         int base, char **e, int *err);
257
 
  uint64_t (*strntoull)(const struct charset_info_st * const, const char *s, size_t l,
258
 
                         int base, char **e, int *err);
259
 
  double      (*strntod)(const struct charset_info_st * const, char *s, size_t l, char **e,
 
243
  long        (*strntol)(const charset_info_st*, const char *s, size_t l,
 
244
                         int base, char **e, int *err);
 
245
  unsigned long      (*strntoul)(const charset_info_st*, const char *s, size_t l,
 
246
                         int base, char **e, int *err);
 
247
  int64_t   (*strntoll)(const charset_info_st*, const char *s, size_t l,
 
248
                         int base, char **e, int *err);
 
249
  uint64_t (*strntoull)(const charset_info_st*, const char *s, size_t l,
 
250
                         int base, char **e, int *err);
 
251
  double      (*strntod)(const charset_info_st*, char *s, size_t l, char **e,
260
252
                         int *err);
261
 
  int64_t    (*strtoll10)(const struct charset_info_st *cs,
 
253
  int64_t    (*strtoll10)(const charset_info_st *cs,
262
254
                           const char *nptr, char **endptr, int *error);
263
 
  uint64_t   (*strntoull10rnd)(const struct charset_info_st *cs,
 
255
  uint64_t   (*strntoull10rnd)(const charset_info_st *cs,
264
256
                                const char *str, size_t length,
265
257
                                int unsigned_fl,
266
258
                                char **endptr, int *error);
267
 
  size_t        (*scan)(const struct charset_info_st * const, const char *b, const char *e,
 
259
  size_t        (*scan)(const charset_info_st*, const char *b, const char *e,
268
260
                        int sq);
269
261
} MY_CHARSET_HANDLER;
270
262
 
305
297
 
306
298
  MY_CHARSET_HANDLER *cset;
307
299
  MY_COLLATION_HANDLER *coll;
308
 
 
309
300
};
310
301
 
311
302
extern DRIZZLED_API charset_info_st *all_charsets[256];
339
330
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_bin;
340
331
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_general_ci;
341
332
extern DRIZZLED_API charset_info_st my_charset_utf8mb4_unicode_ci;
342
 
size_t my_strnxfrmlen_simple(const charset_info_st * const, size_t);
343
 
extern int  my_strnncollsp_simple(const charset_info_st * const, const unsigned char *, size_t,
 
333
size_t my_strnxfrmlen_simple(const charset_info_st*, size_t);
 
334
extern int  my_strnncollsp_simple(const charset_info_st*, const unsigned char *, size_t,
344
335
                                  const unsigned char *, size_t,
345
336
                                  bool diff_if_only_endspace_difference);
346
 
extern size_t my_lengthsp_8bit(const charset_info_st * const cs, const char *ptr, size_t length);
347
 
extern uint32_t my_instr_simple(const charset_info_st * const,
 
337
extern size_t my_lengthsp_8bit(const charset_info_st* cs, const char *ptr, size_t length);
 
338
extern uint32_t my_instr_simple(const charset_info_st*,
348
339
                            const char *b, size_t b_length,
349
340
                            const char *s, size_t s_length,
350
341
                            my_match_t *match, uint32_t nmatch);
351
342
extern MY_CHARSET_HANDLER my_charset_8bit_handler;
352
343
extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
353
 
extern int my_strcasecmp_mb(const charset_info_st * const  cs, const char *s, const char *t);
 
344
extern int my_strcasecmp_mb(const charset_info_st*  cs, const char *s, const char *t);
354
345
extern bool my_parse_charset_xml(const char *bug, size_t len,
355
346
                                    int (*add)(charset_info_st *cs));
356
347
 
359
350
DRIZZLED_API const charset_info_st *get_charset_by_csname(const char *cs_name, uint32_t cs_flags);
360
351
 
361
352
/* Functions for 8bit */
362
 
int my_mb_ctype_8bit(const charset_info_st * const,int *, const unsigned char *,const unsigned char *);
363
 
int my_mb_ctype_mb(const charset_info_st * const,int *, const unsigned char *,const unsigned char *);
364
 
 
365
 
size_t my_scan_8bit(const charset_info_st * const cs, const char *b, const char *e, int sq);
366
 
 
367
 
size_t my_snprintf_8bit(const charset_info_st * const, char *to, size_t n,
 
353
int my_mb_ctype_8bit(const charset_info_st*,int *, const unsigned char *,const unsigned char *);
 
354
int my_mb_ctype_mb(const charset_info_st*,int *, const unsigned char *,const unsigned char *);
 
355
 
 
356
size_t my_scan_8bit(const charset_info_st* cs, const char *b, const char *e, int sq);
 
357
 
 
358
size_t my_snprintf_8bit(const charset_info_st*, char *to, size_t n,
368
359
                        const char *fmt, ...)
369
360
  __attribute__((format(printf, 4, 5)));
370
361
 
371
 
long       my_strntol_8bit(const charset_info_st * const, const char *s, size_t l, int base,
 
362
long       my_strntol_8bit(const charset_info_st*, const char *s, size_t l, int base,
372
363
                           char **e, int *err);
373
 
unsigned long      my_strntoul_8bit(const charset_info_st * const, const char *s, size_t l, int base,
374
 
                            char **e, int *err);
375
 
int64_t   my_strntoll_8bit(const charset_info_st * const, const char *s, size_t l, int base,
376
 
                            char **e, int *err);
377
 
uint64_t my_strntoull_8bit(const charset_info_st * const, const char *s, size_t l, int base,
378
 
                            char **e, int *err);
379
 
double      my_strntod_8bit(const charset_info_st * const, char *s, size_t l,char **e,
 
364
unsigned long      my_strntoul_8bit(const charset_info_st*, const char *s, size_t l, int base,
 
365
                            char **e, int *err);
 
366
int64_t   my_strntoll_8bit(const charset_info_st*, const char *s, size_t l, int base,
 
367
                            char **e, int *err);
 
368
uint64_t my_strntoull_8bit(const charset_info_st*, const char *s, size_t l, int base,
 
369
                            char **e, int *err);
 
370
double      my_strntod_8bit(const charset_info_st*, char *s, size_t l,char **e,
380
371
                            int *err);
381
 
size_t my_long10_to_str_8bit(const charset_info_st * const, char *to, size_t l, int radix,
 
372
size_t my_long10_to_str_8bit(const charset_info_st*, char *to, size_t l, int radix,
382
373
                             long int val);
383
 
size_t my_int64_t10_to_str_8bit(const charset_info_st * const, char *to, size_t l, int radix,
 
374
size_t my_int64_t10_to_str_8bit(const charset_info_st*, char *to, size_t l, int radix,
384
375
                                 int64_t val);
385
 
int64_t my_strtoll10_8bit(const charset_info_st * const cs,
 
376
int64_t my_strtoll10_8bit(const charset_info_st* cs,
386
377
                           const char *nptr, char **endptr, int *error);
387
378
int64_t my_strtoll10_ucs2(charset_info_st *cs,
388
379
                           const char *nptr, char **endptr, int *error);
389
380
 
390
 
uint64_t my_strntoull10rnd_8bit(const charset_info_st * const cs,
 
381
uint64_t my_strntoull10rnd_8bit(const charset_info_st* cs,
391
382
                                 const char *str, size_t length, int
392
383
                                 unsigned_fl, char **endptr, int *error);
393
384
uint64_t my_strntoull10rnd_ucs2(charset_info_st *cs,
394
385
                                 const char *str, size_t length,
395
386
                                 int unsigned_fl, char **endptr, int *error);
396
387
 
397
 
void my_fill_8bit(const charset_info_st * const cs, char* to, size_t l, int fill);
 
388
void my_fill_8bit(const charset_info_st* cs, char* to, size_t l, int fill);
398
389
 
399
 
bool  my_like_range_simple(const charset_info_st * const cs,
 
390
bool  my_like_range_simple(const charset_info_st* cs,
400
391
                              const char *ptr, size_t ptr_length,
401
392
                              char escape, char w_one, char w_many,
402
393
                              size_t res_length,
403
394
                              char *min_str, char *max_str,
404
395
                              size_t *min_length, size_t *max_length);
405
396
 
406
 
bool  my_like_range_mb(const charset_info_st * const cs,
 
397
bool  my_like_range_mb(const charset_info_st* cs,
407
398
                          const char *ptr, size_t ptr_length,
408
399
                          char escape, char w_one, char w_many,
409
400
                          size_t res_length,
410
401
                          char *min_str, char *max_str,
411
402
                          size_t *min_length, size_t *max_length);
412
403
 
413
 
bool  my_like_range_ucs2(const charset_info_st * const cs,
 
404
bool  my_like_range_ucs2(const charset_info_st* cs,
414
405
                            const char *ptr, size_t ptr_length,
415
406
                            char escape, char w_one, char w_many,
416
407
                            size_t res_length,
417
408
                            char *min_str, char *max_str,
418
409
                            size_t *min_length, size_t *max_length);
419
410
 
420
 
bool  my_like_range_utf16(const charset_info_st * const cs,
421
 
                             const char *ptr, size_t ptr_length,
422
 
                             char escape, char w_one, char w_many,
423
 
                             size_t res_length,
424
 
                             char *min_str, char *max_str,
425
 
                             size_t *min_length, size_t *max_length);
426
 
 
427
 
bool  my_like_range_utf32(const charset_info_st * const cs,
428
 
                             const char *ptr, size_t ptr_length,
429
 
                             char escape, char w_one, char w_many,
430
 
                             size_t res_length,
431
 
                             char *min_str, char *max_str,
432
 
                             size_t *min_length, size_t *max_length);
433
 
 
434
 
 
435
 
int my_wildcmp_8bit(const charset_info_st * const,
 
411
bool  my_like_range_utf16(const charset_info_st* cs,
 
412
                             const char *ptr, size_t ptr_length,
 
413
                             char escape, char w_one, char w_many,
 
414
                             size_t res_length,
 
415
                             char *min_str, char *max_str,
 
416
                             size_t *min_length, size_t *max_length);
 
417
 
 
418
bool  my_like_range_utf32(const charset_info_st* cs,
 
419
                             const char *ptr, size_t ptr_length,
 
420
                             char escape, char w_one, char w_many,
 
421
                             size_t res_length,
 
422
                             char *min_str, char *max_str,
 
423
                             size_t *min_length, size_t *max_length);
 
424
 
 
425
 
 
426
int my_wildcmp_8bit(const charset_info_st*,
436
427
                    const char *str,const char *str_end,
437
428
                    const char *wildstr,const char *wildend,
438
429
                    int escape, int w_one, int w_many);
439
430
 
440
 
int my_wildcmp_bin(const charset_info_st * const,
 
431
int my_wildcmp_bin(const charset_info_st*,
441
432
                   const char *str,const char *str_end,
442
433
                   const char *wildstr,const char *wildend,
443
434
                   int escape, int w_one, int w_many);
444
435
 
445
 
size_t my_numchars_8bit(const charset_info_st * const, const char *b, const char *e);
446
 
size_t my_numcells_8bit(const charset_info_st * const, const char *b, const char *e);
447
 
size_t my_charpos_8bit(const charset_info_st * const, const char *b, const char *e, size_t pos);
448
 
size_t my_well_formed_len_8bit(const charset_info_st * const, const char *b, const char *e,
449
 
                             size_t pos, int *error);
 
436
size_t my_numchars_8bit(const charset_info_st*, const char *b, const char *e);
 
437
size_t my_numcells_8bit(const charset_info_st*, const char *b, const char *e);
 
438
size_t my_charpos_8bit(const charset_info_st*, const char *b, const char *e, size_t pos);
 
439
size_t my_well_formed_len_8bit(const charset_info_st&, str_ref, size_t pos, int *error);
450
440
typedef unsigned char *(*cs_alloc_func)(size_t);
451
441
bool my_coll_init_simple(charset_info_st *cs, cs_alloc_func alloc);
452
442
bool my_cset_init_8bit(charset_info_st *cs, cs_alloc_func alloc);
453
 
uint32_t my_mbcharlen_8bit(const charset_info_st * const, uint32_t c);
 
443
uint32_t my_mbcharlen_8bit(const charset_info_st*, uint32_t c);
454
444
 
455
445
/* Functions for multibyte charsets */
456
 
int my_wildcmp_mb(const charset_info_st * const,
 
446
int my_wildcmp_mb(const charset_info_st*,
457
447
                  const char *str,const char *str_end,
458
448
                  const char *wildstr,const char *wildend,
459
449
                  int escape, int w_one, int w_many);
460
 
size_t my_numchars_mb(const charset_info_st * const, const char *b, const char *e);
461
 
size_t my_numcells_mb(const charset_info_st * const, const char *b, const char *e);
462
 
size_t my_charpos_mb(const charset_info_st * const, const char *b, const char *e, size_t pos);
463
 
size_t my_well_formed_len_mb(const charset_info_st * const, const char *b, const char *e,
464
 
                             size_t pos, int *error);
465
 
uint32_t my_instr_mb(const charset_info_st * const,
 
450
size_t my_numchars_mb(const charset_info_st*, const char *b, const char *e);
 
451
size_t my_numcells_mb(const charset_info_st*, const char *b, const char *e);
 
452
size_t my_charpos_mb(const charset_info_st*, const char *b, const char *e, size_t pos);
 
453
size_t my_well_formed_len_mb(const charset_info_st&, str_ref, size_t pos, int *error);
 
454
uint32_t my_instr_mb(const charset_info_st*,
466
455
                 const char *b, size_t b_length,
467
456
                 const char *s, size_t s_length,
468
457
                 my_match_t *match, uint32_t nmatch);
469
458
 
470
 
int my_strnncoll_mb_bin(const charset_info_st * const  cs,
 
459
int my_strnncoll_mb_bin(const charset_info_st*  cs,
471
460
                        const unsigned char *s, size_t slen,
472
461
                        const unsigned char *t, size_t tlen,
473
462
                        bool t_is_prefix);
474
463
 
475
 
int my_strnncollsp_mb_bin(const charset_info_st * const cs,
 
464
int my_strnncollsp_mb_bin(const charset_info_st* cs,
476
465
                          const unsigned char *a, size_t a_length,
477
466
                          const unsigned char *b, size_t b_length,
478
467
                          bool diff_if_only_endspace_difference);
479
468
 
480
 
int my_wildcmp_mb_bin(const charset_info_st * const cs,
 
469
int my_wildcmp_mb_bin(const charset_info_st* cs,
481
470
                      const char *str,const char *str_end,
482
471
                      const char *wildstr,const char *wildend,
483
472
                      int escape, int w_one, int w_many);
484
473
 
485
 
int my_strcasecmp_mb_bin(const charset_info_st * const, const char *s, const char *t);
 
474
int my_strcasecmp_mb_bin(const charset_info_st*, const char *s, const char *t);
486
475
 
487
 
void my_hash_sort_mb_bin(const charset_info_st * const,
 
476
void my_hash_sort_mb_bin(const charset_info_st*,
488
477
                         const unsigned char *key, size_t len, uint32_t *nr1, uint32_t *nr2);
489
478
 
490
 
size_t my_strnxfrm_mb(const charset_info_st * const,
 
479
size_t my_strnxfrm_mb(const charset_info_st*,
491
480
                      unsigned char *dst, size_t dstlen, uint32_t nweights,
492
481
                      const unsigned char *src, size_t srclen, uint32_t flags);
493
482
 
494
 
int my_wildcmp_unicode(const charset_info_st * const cs,
 
483
int my_wildcmp_unicode(const charset_info_st* cs,
495
484
                       const char *str, const char *str_end,
496
485
                       const char *wildstr, const char *wildend,
497
486
                       int escape, int w_one, int w_many,
498
487
                       MY_UNICASE_INFO **weights);
499
488
 
500
 
bool my_propagate_simple(const charset_info_st * const cs, const unsigned char *str, size_t len);
501
 
bool my_propagate_complex(const charset_info_st * const cs, const unsigned char *str, size_t len);
 
489
bool my_propagate_simple(const charset_info_st* cs, const unsigned char *str, size_t len);
 
490
bool my_propagate_complex(const charset_info_st* cs, const unsigned char *str, size_t len);
502
491
 
503
492
 
504
493
uint32_t my_strxfrm_flag_normalize(uint32_t flags, uint32_t nlevels);
505
494
void my_strxfrm_desc_and_reverse(unsigned char *str, unsigned char *strend,
506
495
                                 uint32_t flags, uint32_t level);
507
 
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st * const cs,
 
496
size_t my_strxfrm_pad_desc_and_reverse(const charset_info_st* cs,
508
497
                                       unsigned char *str, unsigned char *frmend, unsigned char *strend,
509
498
                                       uint32_t nweights, uint32_t flags, uint32_t level);
510
499
 
511
 
bool my_charset_is_ascii_compatible(const charset_info_st * const cs);
 
500
bool my_charset_is_ascii_compatible(const charset_info_st* cs);
512
501
 
513
502
/*
514
503
  Compare 0-terminated UTF8 strings.
526
515
    - positive number if s > t
527
516
    - 0 is the strings are equal
528
517
*/
529
 
int my_wc_mb_filename(const charset_info_st * const,
 
518
int my_wc_mb_filename(const charset_info_st*,
530
519
                  my_wc_t wc, unsigned char *s, unsigned char *e);
531
520
 
532
 
int my_mb_wc_filename(const charset_info_st * const,
 
521
int my_mb_wc_filename(const charset_info_st*,
533
522
                  my_wc_t *pwc, const unsigned char *s, const unsigned char *e);
534
523
 
535
524
 
536
 
unsigned int my_ismbchar_utf8mb4(const charset_info_st * const cs, const char *b, const char *e);
537
 
unsigned int my_mbcharlen_utf8mb4(const charset_info_st * const, uint32_t c);
 
525
unsigned int my_ismbchar_utf8mb4(const charset_info_st* cs, const char *b, const char *e);
 
526
unsigned int my_mbcharlen_utf8mb4(const charset_info_st*, uint32_t c);
538
527
 
539
 
size_t my_strnxfrmlen_utf8mb4(const charset_info_st * const, size_t len);
 
528
size_t my_strnxfrmlen_utf8mb4(const charset_info_st*, size_t len);
540
529
size_t
541
 
my_strnxfrm_utf8mb4(const charset_info_st * const cs,
 
530
my_strnxfrm_utf8mb4(const charset_info_st* cs,
542
531
                    unsigned char *dst, size_t dstlen, uint32_t nweights,
543
532
                    const unsigned char *src, size_t srclen, uint32_t flags);
544
533
 
545
 
int my_wildcmp_utf8mb4(const charset_info_st * const cs,
 
534
int my_wildcmp_utf8mb4(const charset_info_st* cs,
546
535
                   const char *str, const char *strend,
547
536
                   const char *wildstr, const char *wildend,
548
537
                   int escape, int w_one, int w_many);
549
 
int my_strnncollsp_utf8mb4(const charset_info_st * const cs,
 
538
int my_strnncollsp_utf8mb4(const charset_info_st* cs,
550
539
                       const unsigned char *s, size_t slen,
551
540
                       const unsigned char *t, size_t tlen,
552
541
                       bool diff_if_only_endspace_difference);
553
 
int my_strcasecmp_utf8mb4(const charset_info_st * const cs,
 
542
int my_strcasecmp_utf8mb4(const charset_info_st* cs,
554
543
                          const char *s, const char *t);
555
544
 
556
 
int my_strnncoll_utf8mb4(const charset_info_st * const cs,
 
545
int my_strnncoll_utf8mb4(const charset_info_st* cs,
557
546
                     const unsigned char *s, size_t slen,
558
547
                     const unsigned char *t, size_t tlen,
559
548
                     bool t_is_prefix);
560
549
 
561
 
int my_mb_wc_utf8mb4(const charset_info_st * const cs,
 
550
int my_mb_wc_utf8mb4(const charset_info_st* cs,
562
551
                 my_wc_t * pwc, const unsigned char *s, const unsigned char *e);
563
552
 
564
 
int my_wc_mb_utf8mb4(const charset_info_st * const cs,
 
553
int my_wc_mb_utf8mb4(const charset_info_st* cs,
565
554
                 my_wc_t wc, unsigned char *r, unsigned char *e);
566
555
 
567
 
size_t my_caseup_str_utf8mb4(const charset_info_st * const cs, char *src);
568
 
size_t my_casedn_str_utf8mb4(const charset_info_st * const cs, char *src);
 
556
size_t my_caseup_str_utf8mb4(const charset_info_st* cs, char *src);
 
557
size_t my_casedn_str_utf8mb4(const charset_info_st* cs, char *src);
569
558
 
570
 
size_t my_caseup_utf8mb4(const charset_info_st * const cs, char *src, size_t srclen,
 
559
size_t my_caseup_utf8mb4(const charset_info_st* cs, char *src, size_t srclen,
571
560
                  char *dst, size_t dstlen);
572
 
size_t my_casedn_utf8mb4(const charset_info_st * const cs,
 
561
size_t my_casedn_utf8mb4(const charset_info_st* cs,
573
562
                  char *src, size_t srclen,
574
563
                  char *dst, size_t dstlen);
575
564
 
576
565
 
577
 
int my_strnncoll_any_uca(const charset_info_st * const cs,
 
566
int my_strnncoll_any_uca(const charset_info_st* cs,
578
567
                         const unsigned char *s, size_t slen,
579
568
                         const unsigned char *t, size_t tlen,
580
569
                         bool t_is_prefix);
581
570
 
582
 
int my_strnncollsp_any_uca(const charset_info_st * const cs,
 
571
int my_strnncollsp_any_uca(const charset_info_st* cs,
583
572
                           const unsigned char *s, size_t slen,
584
573
                           const unsigned char *t, size_t tlen,
585
574
                           bool diff_if_only_endspace_difference);
586
575
 
587
 
void my_hash_sort_any_uca(const charset_info_st * const cs,
 
576
void my_hash_sort_any_uca(const charset_info_st* cs,
588
577
                          const unsigned char *s, size_t slen,
589
578
                          uint32_t *n1, uint32_t *n2);
590
579
 
591
 
size_t my_strnxfrm_any_uca(const charset_info_st * const cs,
 
580
size_t my_strnxfrm_any_uca(const charset_info_st* cs,
592
581
                           unsigned char *dst, size_t dstlen, uint32_t nweights,
593
582
                           const unsigned char *src, size_t srclen,
594
583
                           uint32_t flags);
595
584
 
596
 
int my_wildcmp_uca(const charset_info_st * const cs,
 
585
int my_wildcmp_uca(const charset_info_st* cs,
597
586
                   const char *str,const char *str_end,
598
587
                   const char *wildstr,const char *wildend,
599
588
                   int escape, int w_one, int w_many);
600
589
 
601
 
int my_strnncoll_8bit_bin(const charset_info_st * const,
 
590
int my_strnncoll_8bit_bin(const charset_info_st*,
602
591
                          const unsigned char *s, size_t slen,
603
592
                          const unsigned char *t, size_t tlen,
604
593
                          bool t_is_prefix);
605
 
int my_strnncollsp_8bit_bin(const charset_info_st * const,
 
594
int my_strnncollsp_8bit_bin(const charset_info_st*,
606
595
                            const unsigned char *a, size_t a_length,
607
596
                            const unsigned char *b, size_t b_length,
608
597
                            bool diff_if_only_endspace_difference);
609
 
size_t my_case_str_bin(const charset_info_st * const, char *);
610
 
size_t my_case_bin(const charset_info_st * const, char *,
 
598
size_t my_case_str_bin(const charset_info_st*, char *);
 
599
size_t my_case_bin(const charset_info_st*, char *,
611
600
                   size_t srclen, char *, size_t);
612
 
int my_strcasecmp_bin(const charset_info_st * const,
 
601
int my_strcasecmp_bin(const charset_info_st*,
613
602
                      const char *s, const char *t);
614
 
size_t my_strnxfrm_8bit_bin(const charset_info_st * const cs,
 
603
size_t my_strnxfrm_8bit_bin(const charset_info_st* cs,
615
604
                     unsigned char * dst, size_t dstlen, uint32_t nweights,
616
605
                     const unsigned char *src, size_t srclen, uint32_t flags);
617
 
uint32_t my_instr_bin(const charset_info_st * const,
 
606
uint32_t my_instr_bin(const charset_info_st*,
618
607
                      const char *b, size_t b_length,
619
608
                      const char *s, size_t s_length,
620
609
                      my_match_t *match, uint32_t nmatch);
621
 
size_t my_lengthsp_binary(const charset_info_st * const,
 
610
size_t my_lengthsp_binary(const charset_info_st*,
622
611
                          const char *, size_t length);
623
 
int my_mb_wc_bin(const charset_info_st * const,
 
612
int my_mb_wc_bin(const charset_info_st*,
624
613
                 my_wc_t *wc, const unsigned char *str,
625
614
                 const unsigned char *end);
626
 
int my_wc_mb_bin(const charset_info_st * const, my_wc_t wc,
 
615
int my_wc_mb_bin(const charset_info_st*, my_wc_t wc,
627
616
                 unsigned char *str, unsigned char *end);
628
 
void my_hash_sort_8bit_bin(const charset_info_st * const,
 
617
void my_hash_sort_8bit_bin(const charset_info_st*,
629
618
                           const unsigned char *key, size_t len,
630
619
                           uint32_t *nr1, uint32_t *nr2);
631
620
bool my_coll_init_8bit_bin(charset_info_st *cs,
632
621
                           cs_alloc_func);
633
 
int my_strnncoll_binary(const charset_info_st * const,
 
622
int my_strnncoll_binary(const charset_info_st*,
634
623
                        const unsigned char *s, size_t slen,
635
624
                        const unsigned char *t, size_t tlen,
636
625
                        bool t_is_prefix);
637
 
int my_strnncollsp_binary(const charset_info_st * const cs,
 
626
int my_strnncollsp_binary(const charset_info_st* cs,
638
627
                          const unsigned char *s, size_t slen,
639
628
                          const unsigned char *t, size_t tlen,
640
629
                          bool);
856
845
  return (cs->cset->strntod(cs, s, l, e, err));
857
846
}
858
847
 
859
 
int make_escape_code(const charset_info_st * const cs, const char *escape);
 
848
int make_escape_code(const charset_info_st* cs, const char *escape);
860
849
 
861
850
} /* namespace drizzled */
862
851