YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense alongwiththisprogram;ifnot,writetotheFreeSoftware
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
int check_dup_symbols(SYMBOL *s1, SYMBOL *s2)
{ if (s1->length!=s2->length || strncmp(s1->name,s2->name,s1->length)) return0;
constchar *err_tmpl= "\ngen_lex_hash fatal error : \
Unfortunately gen_lex_hash can not generate a hash,\n since \
your lex.h has duplicate definition for a symbol \"%s\"\n\n";
printf (err_tmpl,s1->name);
fprintf (stderr,err_tmpl,s1->name);
return1;
}
int check_duplicates()
{
SYMBOL *cur1, *cur2, *s_end, *f_end;
/* Broken up to indicate that it's not advice to you, gentle reader. */
printf("/* Do " "not " "edit " "this " "file! This is generated by " "gen_lex_hash.cc\nthat seeks for a perfect hash function */\n\n");
printf("#include \"lex.h\"\n\n");
calc_length();
if (check_duplicates()) exit(1);
generate_find_structs();
print_find_structs();
printf("\nstatic unsigned int sql_functions_max_len=%d;\n", max_len);
printf("\nstatic unsigned int symbols_max_len=%d;\n\n", max_len2);
printf("\ static SYMBOL *get_hash_symbol(constchar *s,\n\ unsignedint len,bool function)\n\
{\n\
uchar *hash_map;\n\ constchar *cur_str= s;\n\
\n\ if (len == 0) {\n\
DBUG_PRINT(\"warning\", (\"get_hash_symbol() received a request for a zero-length symbol, which is probably a mistake.\"));\ return(NULL);\n\
}\n"
);
printf("\ if (function){\n\ if (len>sql_functions_max_len) return0;\n\
hash_map= sql_functions_map;\n\
uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\
\n\ for (;;){\n\
uchar first_char= (uchar)cur_struct;\n\
\n\ if (first_char == 0)\n\
{\n\
int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return0;\n\
SYMBOL *res;\n\ if (ires>=0) \n\
res= symbols+ires;\n\ else\n\
res= sql_functions-ires-1;\n\
uint count= (uint) (cur_str - s);\n\ return lex_casecmp(cur_str,res->name+count,len-count) ? 0 : res;\n\
}\n\
\n\
uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ if (cur_char<first_char) return0;\n\
cur_struct>>=8;\n\ if (cur_char>(uchar)cur_struct) return0;\n\
\n\
cur_struct>>=8;\n\
cur_struct= uint4korr(hash_map+\n\
(((uint16)cur_struct + cur_char - first_char)*4));\n\
cur_str++;\n\
}\n"
);
printf("\
}else{\n\ if (len>symbols_max_len) return0;\n\
hash_map= symbols_map;\n\
uint32 cur_struct= uint4korr(hash_map+((len-1)*4));\n\
\n\ for (;;){\n\
uchar first_char= (uchar)cur_struct;\n\
\n\ if (first_char==0) {\n\
int16 ires= (int16)(cur_struct>>16);\n\ if (ires==array_elements(symbols)) return0;\n\
SYMBOL *res= symbols+ires;\n\
uint count= (uint) (cur_str - s);\n\ return lex_casecmp(cur_str,res->name+count,len-count)!=0 ? 0 : res;\n\
}\n\
\n\
uchar cur_char= (uchar)to_upper_lex[(uchar)*cur_str];\n\ if (cur_char<first_char) return0;\n\
cur_struct>>=8;\n\ if (cur_char>(uchar)cur_struct) return0;\n\
\n\
cur_struct>>=8;\n\
cur_struct= uint4korr(hash_map+\n\
(((uint16)cur_struct + cur_char - first_char)*4));\n\
cur_str++;\n\
}\n\
}\n\
}\n"
); exit(0);
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.