gperf: bring small update from Apple Developers tools 4.4
From [1] offset.patch Makes use the C offsetof() macro. size_type.patch Lets you specify the type for length parameters. [1] http://opensource.apple.com/source/gperf/gperf-9/patches/ MFC after: 3 weeks
This commit is contained in:
parent
bc49bb2062
commit
0c8565a099
@ -1,7 +1,7 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23.
|
||||
.TH GPERF "1" "May 2007" "GNU gperf 3.0.3" FSF
|
||||
.TH GPERF "1" "October 2011" "GNU gperf 3.0.3" FSF
|
||||
.SH NAME
|
||||
gperf \- generate a perfect hash function from a key set
|
||||
gperf \- manual page for gperf 3.0.3
|
||||
.SH SYNOPSIS
|
||||
.B gperf
|
||||
[\fIOPTION\fR]... [\fIINPUT-FILE\fR]
|
||||
@ -129,6 +129,10 @@ binary search.
|
||||
Prevents the transfer of the type declaration to the
|
||||
output file. Use this option if the type is already
|
||||
defined elsewhere.
|
||||
.TP
|
||||
\fB\-\-size\-type\fR=\fITYPE\fR
|
||||
Specify the type for length parameters. Default type is
|
||||
\&'unsigned int'.
|
||||
.SS "Algorithm employed by gperf:"
|
||||
.TP
|
||||
\fB\-k\fR, \fB\-\-key\-positions\fR=\fIKEYS\fR
|
||||
|
@ -67,6 +67,8 @@ static const char *const DEFAULT_STRINGPOOL_NAME = "stringpool";
|
||||
/* Default delimiters that separate keywords from their attributes. */
|
||||
static const char *const DEFAULT_DELIMITERS = ",";
|
||||
|
||||
static const char *const DEFAULT_SIZE_TYPE = "unsigned int";
|
||||
|
||||
/* Prints program usage to given stream. */
|
||||
|
||||
void
|
||||
@ -202,6 +204,9 @@ Options::long_usage (FILE * stream)
|
||||
" Prevents the transfer of the type declaration to the\n"
|
||||
" output file. Use this option if the type is already\n"
|
||||
" defined elsewhere.\n");
|
||||
fprintf (stream,
|
||||
" --size-type=TYPE Specify the type for length parameters. Default type is\n"
|
||||
" 'unsigned int'.\n");
|
||||
fprintf (stream, "\n");
|
||||
fprintf (stream,
|
||||
"Algorithm employed by gperf:\n");
|
||||
@ -470,6 +475,7 @@ Options::Options ()
|
||||
_lengthtable_name (DEFAULT_LENGTHTABLE_NAME),
|
||||
_stringpool_name (DEFAULT_STRINGPOOL_NAME),
|
||||
_delimiters (DEFAULT_DELIMITERS),
|
||||
_size_type (DEFAULT_SIZE_TYPE),
|
||||
_key_positions ()
|
||||
{
|
||||
}
|
||||
@ -514,6 +520,7 @@ Options::~Options ()
|
||||
"\nhash table size multiplier = %g"
|
||||
"\ninitial associated value = %d"
|
||||
"\ndelimiters = %s"
|
||||
"\nsize type = %s"
|
||||
"\nnumber of switch statements = %d\n",
|
||||
_option_word & TYPE ? "enabled" : "disabled",
|
||||
_option_word & UPPERLOWER ? "enabled" : "disabled",
|
||||
@ -539,7 +546,7 @@ Options::~Options ()
|
||||
_function_name, _hash_name, _wordlist_name, _lengthtable_name,
|
||||
_stringpool_name, _slot_name, _initializer_suffix,
|
||||
_asso_iterations, _jump, _size_multiple, _initial_asso_value,
|
||||
_delimiters, _total_switches);
|
||||
_delimiters, _size_type, _total_switches);
|
||||
if (_key_positions.is_useall())
|
||||
fprintf (stderr, "all characters are used in the hash function\n");
|
||||
else
|
||||
@ -668,6 +675,12 @@ Options::set_delimiters (const char *delimiters)
|
||||
_delimiters = delimiters;
|
||||
}
|
||||
|
||||
void
|
||||
Options::set_size_type (const char *size_type)
|
||||
{
|
||||
if (_size_type == DEFAULT_SIZE_TYPE)
|
||||
_size_type = size_type;
|
||||
}
|
||||
|
||||
/* Parses the command line Options and sets appropriate flags in option_word. */
|
||||
|
||||
@ -693,6 +706,7 @@ static const struct option long_options[] =
|
||||
{ "global-table", no_argument, NULL, 'G' },
|
||||
{ "word-array-name", required_argument, NULL, 'W' },
|
||||
{ "length-table-name", required_argument, NULL, CHAR_MAX + 4 },
|
||||
{ "size-type", required_argument, NULL, CHAR_MAX + 5 },
|
||||
{ "switch", required_argument, NULL, 'S' },
|
||||
{ "omit-struct-type", no_argument, NULL, 'T' },
|
||||
{ "key-positions", required_argument, NULL, 'k' },
|
||||
@ -1046,6 +1060,11 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
|
||||
_lengthtable_name = /*getopt*/optarg;
|
||||
break;
|
||||
}
|
||||
case CHAR_MAX + 5: /* Sets the name for the length table array. */
|
||||
{
|
||||
_size_type = /*getopt*/optarg;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
short_usage (stderr);
|
||||
exit (1);
|
||||
|
@ -209,6 +209,9 @@ class Options
|
||||
/* Sets the delimiters string, if not already set. */
|
||||
void set_delimiters (const char *delimiters);
|
||||
|
||||
const char * get_size_type() const;
|
||||
void set_size_type(const char*);
|
||||
|
||||
/* Returns key positions. */
|
||||
const Positions& get_key_positions () const;
|
||||
|
||||
@ -279,6 +282,8 @@ class Options
|
||||
/* Separates keywords from other attributes. */
|
||||
const char * _delimiters;
|
||||
|
||||
const char * _size_type;
|
||||
|
||||
/* Contains user-specified key choices. */
|
||||
Positions _key_positions;
|
||||
};
|
||||
|
@ -155,3 +155,9 @@ Options::get_key_positions () const
|
||||
{
|
||||
return _key_positions;
|
||||
}
|
||||
|
||||
INLINE const char *
|
||||
Options::get_size_type() const
|
||||
{
|
||||
return _size_type;
|
||||
}
|
||||
|
@ -772,14 +772,14 @@ Output::output_hash_function () const
|
||||
printf (option[KRC] ?
|
||||
"(str, len)\n"
|
||||
" register char *str;\n"
|
||||
" register unsigned int len;\n" :
|
||||
" register %s len;\n" :
|
||||
option[C] ?
|
||||
"(str, len)\n"
|
||||
" register const char *str;\n"
|
||||
" register unsigned int len;\n" :
|
||||
" register %s len;\n" :
|
||||
option[ANSIC] | option[CPLUSPLUS] ?
|
||||
"(register const char *str, register unsigned int len)\n" :
|
||||
"");
|
||||
"(register const char *str, register %s len)\n" :
|
||||
"", option.get_size_type());
|
||||
|
||||
/* Note that when the hash function is called, it has already been verified
|
||||
that min_key_len <= len <= max_key_len. */
|
||||
@ -875,7 +875,7 @@ Output::output_hash_function () const
|
||||
" switch (%s)\n"
|
||||
" {\n"
|
||||
" default:\n",
|
||||
option[NOLENGTH] ? "0" : "len",
|
||||
option[NOLENGTH] ? "0" : "(int)len",
|
||||
option[NOLENGTH] ? "len" : "hval");
|
||||
|
||||
while (key_pos != Positions::LASTCHAR && key_pos >= _max_key_len)
|
||||
@ -1106,9 +1106,7 @@ output_keyword_entry (KeywordExt *temp, int stringpool_index, const char *indent
|
||||
if (option[TYPE])
|
||||
printf ("{");
|
||||
if (option[SHAREDLIB])
|
||||
printf ("(int)(long)&((struct %s_t *)0)->%s_str%d",
|
||||
option.get_stringpool_name (), option.get_stringpool_name (),
|
||||
stringpool_index);
|
||||
printf("offsetof(struct %s_t, %s_str%d)", option.get_stringpool_name (), option.get_stringpool_name (), stringpool_index);
|
||||
else
|
||||
output_string (temp->_allchars, temp->_allchars_length);
|
||||
if (option[TYPE])
|
||||
@ -1902,14 +1900,14 @@ Output::output_lookup_function () const
|
||||
printf (option[KRC] ?
|
||||
"(str, len)\n"
|
||||
" register char *str;\n"
|
||||
" register unsigned int len;\n" :
|
||||
" register %s len;\n" :
|
||||
option[C] ?
|
||||
"(str, len)\n"
|
||||
" register const char *str;\n"
|
||||
" register unsigned int len;\n" :
|
||||
" register %s len;\n" :
|
||||
option[ANSIC] | option[CPLUSPLUS] ?
|
||||
"(register const char *str, register unsigned int len)\n" :
|
||||
"");
|
||||
"(register const char *str, register %s len)\n" :
|
||||
"", option.get_size_type());
|
||||
|
||||
/* Output the function's body. */
|
||||
printf ("{\n");
|
||||
@ -2035,8 +2033,11 @@ Output::output ()
|
||||
printf ("%s\n", _struct_decl);
|
||||
}
|
||||
|
||||
if (option[INCLUDE])
|
||||
if (option[INCLUDE]) {
|
||||
printf ("#include <string.h>\n"); /* Declare strlen(), strcmp(), strncmp(). */
|
||||
if (option[SHAREDLIB])
|
||||
printf("#include <stddef.h>\n"); /* Declare offsetof() */
|
||||
}
|
||||
|
||||
if (!option[ENUM])
|
||||
{
|
||||
@ -2073,13 +2074,14 @@ Output::output ()
|
||||
printf ("class %s\n"
|
||||
"{\n"
|
||||
"private:\n"
|
||||
" static inline unsigned int %s (const char *str, unsigned int len);\n"
|
||||
" static inline unsigned int %s (const char *str, %s len);\n"
|
||||
"public:\n"
|
||||
" static %s%s%s (const char *str, unsigned int len);\n"
|
||||
" static %s%s%s (const char *str, %s len);\n"
|
||||
"};\n"
|
||||
"\n",
|
||||
option.get_class_name (), option.get_hash_name (),
|
||||
const_for_struct, _return_type, option.get_function_name ());
|
||||
option.get_class_name (), option.get_hash_name (), option.get_size_type(),
|
||||
const_for_struct, _return_type, option.get_function_name (),
|
||||
option.get_size_type());
|
||||
|
||||
output_hash_function ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user