Commit 24b75abb authored by unknown's avatar unknown
Browse files

ctype-uca.c:

  Code optimization to make it look better and work faster.


strings/ctype-uca.c:
  Code optimization to make it look better and work faster.
parent 5ae0cb48
Loading
Loading
Loading
Loading
+35 −28
Original line number Diff line number Diff line
@@ -7473,55 +7473,62 @@ static int ch2x(int ch)

static my_coll_lexem_num my_coll_lexem_next(MY_COLL_LEXEM *lexem)
{
  for ( ;lexem->beg < lexem->end ; lexem->beg++)
  const char *beg;
  my_coll_lexem_num rc;
  
  for (beg= lexem->beg ; beg < lexem->end ; beg++)
  {
    lexem->prev= lexem->beg;
    if (lexem->beg[0] == ' '  || lexem->beg[0] == '\t' || 
        lexem->beg[0] == '\r' || lexem->beg[0] == '\n')
    if (*beg == ' ' || *beg == '\t' || *beg == '\r' || *beg == '\n')
      continue;
    
    if (lexem->beg[0] == '&')
    if (*beg == '&')
    {
      lexem->beg++;
      return MY_COLL_LEXEM_SHIFT;
      beg++;
      rc= MY_COLL_LEXEM_SHIFT;
      goto ex;
    }
    
    if (lexem->beg[0] == '<')
    if (beg[0] == '<')
    {
      for (lexem->beg++, lexem->diff=1; 
           (lexem->beg < lexem->end) && 
           (lexem->beg[0] == '<') && (lexem->diff<3);
           lexem->beg++, lexem->diff++);
        return MY_COLL_LEXEM_DIFF;
      for (beg++, lexem->diff= 1;
           (beg < lexem->end) && 
           (*beg == '<') && (lexem->diff<3);
           beg++, lexem->diff++);
      rc= MY_COLL_LEXEM_DIFF;
      goto ex;
    }
    
    if ((lexem->beg[0] >= 'a' && lexem->beg[0] <= 'z') ||
        (lexem->beg[0] >= 'A' && lexem->beg[0] <= 'Z'))
    if ((*beg >= 'a' && *beg <= 'z') || (*beg >= 'A' && *beg <= 'Z'))
    {
      lexem->code= lexem->beg[0];
      lexem->beg++;
      return MY_COLL_LEXEM_CHAR;
      lexem->code= *beg++;
      rc= MY_COLL_LEXEM_CHAR;
      goto ex;
    }
    
    if ((lexem->beg[0] == '\\') && 
        (lexem->beg+2 < lexem->end) && 
        (lexem->beg[1] == 'u'))
    if ((*beg == '\\') && (beg+2 < lexem->end) && (beg[1] == 'u'))
    {
      int ch;
      
      beg+= 2;
      lexem->code= 0;
      for (lexem->beg+=2; 
           (lexem->beg < lexem->end) && ((ch= ch2x(lexem->beg[0])) >= 0) ; 
           lexem->beg++)
      while ((beg < lexem->end) && ((ch= ch2x(beg[0])) >= 0))
      { 
        lexem->code= (lexem->code << 4) + ch;
        beg++;
      }
      return MY_COLL_LEXEM_CHAR;
      rc= MY_COLL_LEXEM_CHAR;
      goto ex;
    }
    
    return MY_COLL_LEXEM_ERROR;
    rc= MY_COLL_LEXEM_ERROR;
    goto ex;
  }
  return MY_COLL_LEXEM_EOF;
  rc= MY_COLL_LEXEM_EOF;
  
ex:
  lexem->prev= lexem->beg;
  lexem->beg= beg;
  return rc;  
}