[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
4.4 Options for fine tuning Details in the Output Code
Most of these options are also available as declarations in the input file (see section Gperf Declarations).
- ‘-K slot-name’
- ‘--slot-name=slot-name’
-
This option is only useful when option ‘-t’ (or, equivalently, the ‘%struct-type’ declaration) has been given. By default, the program assumes the structure component identifier for the keyword is ‘name’. This option allows an arbitrary choice of identifier for this component, although it still must occur as the first field in your supplied
struct
. - ‘-F initializers’
- ‘--initializer-suffix=initializers’
-
This option is only useful when option ‘-t’ (or, equivalently, the ‘%struct-type’ declaration) has been given. It permits to specify initializers for the structure members following slot-name in empty hash table entries. The list of initializers should start with a comma. By default, the emitted code will zero-initialize structure members following slot-name.
- ‘-H hash-function-name’
- ‘--hash-function-name=hash-function-name’
Allows you to specify the name for the generated hash function. Default name is ‘hash’. This option permits the use of two hash tables in the same file.
- ‘-N lookup-function-name’
- ‘--lookup-function-name=lookup-function-name’
Allows you to specify the name for the generated lookup function. Default name is ‘in_word_set’. This option permits multiple generated hash functions to be used in the same application.
- ‘-Z class-name’
- ‘--class-name=class-name’
-
This option is only useful when option ‘-L C++’ (or, equivalently, the ‘%language=C++’ declaration) has been given. It allows you to specify the name of generated C++ class. Default name is
Perfect_Hash
. - ‘-7’
- ‘--seven-bit’
This option specifies that all strings that will be passed as arguments to the generated hash function and the generated lookup function will solely consist of 7-bit ASCII characters (bytes in the range 0..127). (Note that the ANSI C functions
isalnum
andisgraph
do not guarantee that a byte is in this range. Only an explicit test like ‘c >= 'A' && c <= 'Z'’ guarantees this.) This was the default in versions ofgperf
earlier than 2.7; now the default is to support 8-bit and multibyte characters.- ‘-l’
- ‘--compare-lengths’
Compare keyword lengths before trying a string comparison. This option is mandatory for binary comparisons (see section Use of NUL bytes). It also might cut down on the number of string comparisons made during the lookup, since keywords with different lengths are never compared via
strcmp
. However, using ‘-l’ might greatly increase the size of the generated C code if the lookup table range is large (which implies that the switch option ‘-S’ or ‘%switch’ is not enabled), since the length table contains as many elements as there are entries in the lookup table.- ‘-c’
- ‘--compare-strncmp’
Generates C code that uses the
strncmp
function to perform string comparisons. The default action is to usestrcmp
.- ‘-C’
- ‘--readonly-tables’
Makes the contents of all generated lookup tables constant, i.e., “readonly”. Many compilers can generate more efficient code for this by putting the tables in readonly memory.
- ‘-E’
- ‘--enum’
Define constant values using an enum local to the lookup function rather than with #defines. This also means that different lookup functions can reside in the same file. Thanks to James Clark
<jjc@ai.mit.edu>
.- ‘-I’
- ‘--includes’
Include the necessary system include file,
<string.h>
, at the beginning of the code. By default, this is not done; the user must include this header file himself to allow compilation of the code.- ‘-G’
- ‘--global-table’
Generate the static table of keywords as a static global variable, rather than hiding it inside of the lookup function (which is the default behavior).
- ‘-P’
- ‘--pic’
Optimize the generated table for inclusion in shared libraries. This reduces the startup time of programs using a shared library containing the generated code. If the option ‘-t’ (or, equivalently, the ‘%struct-type’ declaration) is also given, the first field of the user-defined struct must be of type ‘int’, not ‘char *’, because it will contain offsets into the string pool instead of actual strings. To convert such an offset to a string, you can use the expression ‘stringpool + o’, where o is the offset. The string pool name can be changed through the option ‘--string-pool-name’.
- ‘-Q string-pool-name’
- ‘--string-pool-name=string-pool-name’
Allows you to specify the name of the generated string pool created by option ‘-P’. The default name is ‘stringpool’. This option permits the use of two hash tables in the same file, with ‘-P’ and even when the option ‘-G’ (or, equivalently, the ‘%global-table’ declaration) is given.
- ‘--null-strings’
Use NULL strings instead of empty strings for empty keyword table entries. This reduces the startup time of programs using a shared library containing the generated code (but not as much as option ‘-P’), at the expense of one more test-and-branch instruction at run time.
- ‘-W hash-table-array-name’
- ‘--word-array-name=hash-table-array-name’
-
Allows you to specify the name for the generated array containing the hash table. Default name is ‘wordlist’. This option permits the use of two hash tables in the same file, even when the option ‘-G’ (or, equivalently, the ‘%global-table’ declaration) is given.
- ‘--length-table-name=length-table-array-name’
-
Allows you to specify the name for the generated array containing the length table. Default name is ‘lengthtable’. This option permits the use of two length tables in the same file, even when the option ‘-G’ (or, equivalently, the ‘%global-table’ declaration) is given.
- ‘-S total-switch-statements’
- ‘--switch=total-switch-statements’
-
Causes the generated C code to use a
switch
statement scheme, rather than an array lookup table. This can lead to a reduction in both time and space requirements for some input files. The argument to this option determines how manyswitch
statements are generated. A value of 1 generates 1switch
containing all the elements, a value of 2 generates 2 tables with 1/2 the elements in eachswitch
, etc. This is useful since many C compilers cannot correctly generate code for largeswitch
statements. This option was inspired in part by Keith Bostic's original C program. - ‘-T’
- ‘--omit-struct-type’
Prevents the transfer of the type declaration to the output file. Use this option if the type is already defined elsewhere.
- ‘-p’
This option is supported for compatibility with previous releases of
gperf
. It does not do anything.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |