|
Files ctype-utf8.c and ctype-ucs2.c have very similar pieces of the code:
static inline void
|
my_tolower_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
|
|
static inline void
|
my_toupper_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
|
static inline void
|
my_tolower_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
|
|
static inline void
|
my_toupper_utf32(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((*wc <= uni_plane->maxchar) && (page= uni_plane->page[*wc >> 8]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
static inline void
|
my_tolower_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
|
|
static inline void
|
my_toupper_ucs2(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
static inline void
|
my_tolower_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
|
|
static inline void
|
my_toupper_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8) & 0xFF]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
static inline void
|
my_tolower_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
if (*wc <= uni_plane->maxchar)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8)]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
}
|
|
|
static inline void
|
my_toupper_utf8mb4(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
if (*wc <= uni_plane->maxchar)
|
{
|
MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8)]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
}
|
In order to simplify the patch for MDEV-30577 lets move the repeatable code to a shared file ctype-unidata.h:
/* utf8mb3 and ucs2 share this code */
|
static inline void
|
my_tolower_unicode_bmp(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
const MY_UNICASE_CHARACTER *page;
|
DBUG_ASSERT(*wc <= uni_plane->maxchar);
|
if ((page= uni_plane->page[*wc >> 8]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
|
|
static inline void
|
my_toupper_unicode_bmp(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
const MY_UNICASE_CHARACTER *page;
|
DBUG_ASSERT(*wc <= uni_plane->maxchar);
|
if ((page= uni_plane->page[*wc >> 8]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
/* utf8mb4, utf16, utf32 share this code */
|
static inline void
|
my_tolower_unicode(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
if (*wc <= uni_plane->maxchar)
|
{
|
const MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8)]))
|
*wc= page[*wc & 0xFF].tolower;
|
}
|
}
|
|
|
static inline void
|
my_toupper_unicode(MY_UNICASE_INFO *uni_plane, my_wc_t *wc)
|
{
|
if (*wc <= uni_plane->maxchar)
|
{
|
const MY_UNICASE_CHARACTER *page;
|
if ((page= uni_plane->page[(*wc >> 8)]))
|
*wc= page[*wc & 0xFF].toupper;
|
}
|
}
|
|