GPERF(1)                      FSF                      GPERF(1)





NAME
       gperf - generate a perfect hash function from a key set

SYNOPSIS
       gperf [OPTION]... [INPUT-FILE]

DESCRIPTION
       GNU 'gperf' generates perfect hash functions.

       If a long option shows an argument as mandatory, then it
       is mandatory for the equivalent short option also.

   Output file location:
       --output-file=FILE Write output to specified file.

       The results are written to standard output if no  output
       file is specified or if it is -.

   Input file interpretation:
       -e, --delimiters=DELIMITER-LIST
              Allow  user to provide a string containing delim-
              iters  used  to  separate  keywords  from   their
              attributes.  Default is ",".

       -t, --struct-type
              Allows the user to include a structured type dec-
              laration for generated code. Any text  before  %%
              is  considered  part of the type declaration. Key
              words and additional fields may follow this,  one
              group of fields per line.

       --ignore-case
              Consider upper and lower case ASCII characters as
              equivalent. Note that locale dependent case  map-
              pings are ignored.

   Language for the output code:
       -L, --language=LANGUAGE-NAME
              Generates  code  in  the specified language. Lan-
              guages handled are currently C++, ANSI-C, C,  and
              KR-C. The default is C.

   Details in the output code:
       -K, --slot-name=NAME
              Select  name of the keyword component in the key-
              word structure.

       -F, --initializer-suffix=INITIALIZERS
              Initializers for  additional  components  in  the
              keyword structure.

       -H, --hash-function-name=NAME
              Specify  name of generated hash function. Default
              is 'hash'.

       -N, --lookup-function-name=NAME
              Specify  name  of  generated   lookup   function.
              Default name is 'in_word_set'.

       -Z, --class-name=NAME
              Specify name of generated C++ class. Default name
              is 'Perfect_Hash'.

       -7, --seven-bit
              Assume 7-bit characters.

       -l, --compare-lengths
              Compare key lengths before trying a  string  com-
              parison.  This  is necessary if the keywords con-
              tain NUL bytes. It also helps  cut  down  on  the
              number  of  string  comparisons  made  during the
              lookup.

       -c, --compare-strncmp
              Generate comparison  code  using  strncmp  rather
              than strcmp.

       -C, --readonly-tables
              Make the contents of generated lookup tables con-
              stant, i.e., readonly.

       -E, --enum
              Define constant values using an enum local to the
              lookup function rather than with defines.

       -I, --includes
              Include   the   necessary   system  include  file
              <string.h> at the beginning 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  behav-
              ior).

       -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.

       -Q, --string-pool-name=NAME
              Specify name of string pool generated  by  option
              --pic.  Default name is 'stringpool'.

       --null-strings
              Use  NULL  strings  instead  of empty strings for
              empty keyword table entries.

       -W, --word-array-name=NAME
              Specify name of word list array. Default name  is
              'wordlist'.

       -S, --switch=COUNT
              Causes  the  generated  C  code  to  use a switch
              statement scheme, rather than an array lookup ta-
              ble.   This  can lead to a reduction in both time
              and space requirements  for  some  keyfiles.  The
              COUNT  argument determines how many switch state-
              ments are generated.  A value of  1  generates  1
              switch  containing all the elements, a value of 2
              generates 2 tables with 1/2 the elements in  each
              table,  etc. If COUNT is very large, say 1000000,
              the generated C code does a binary search.

       -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.

   Algorithm employed by gperf:
       -k, --key-positions=KEYS
              Select the key positions used in the  hash  func-
              tion.  The allowable choices range between 1-255,
              inclusive.  The positions are separated  by  com-
              mas,  ranges  may  be used, and key positions may
              occur in any order.  Also, the meta-character '*'
              causes  the  generated  hash function to consider
              ALL key positions, and  $  indicates  the  "final
              character" of a key, e.g., $,1,2,4,6-10.

       -D, --duplicates
              Handle  keywords  that  hash to duplicate values.
              This is useful for certain highly redundant  key-
              word sets.

       -m, --multiple-iterations=ITERATIONS
              Perform multiple choices of the -i and -j values,
              and choose the best results. This  increases  the
              running time by a factor of ITERATIONS but does a
              good job minimizing the generated table size.

       -i, --initial-asso=N
              Provide an initial value for the associate values
              array.  Default  is  0. Setting this value larger
              helps inflate the size of the final table.

       -j, --jump=JUMP-VALUE
              Affects  the  "jump  value",  i.e.,  how  far  to
              advance  the associated character value upon col-
              lisions. Must be an odd number, default is 5.

       -n, --no-strlen
              Do not include the length  of  the  keyword  when
              computing the hash function.

       -r, --random
              Utilizes  randomness to initialize the associated
              values table.

       -s, --size-multiple=N
              Affects the size of the generated hash table. The
              numeric  argument  N  indicates  "how  many times
              larger or smaller"  the  associated  value  range
              should be, in relationship to the number of keys,
              e.g. a value of 3 means "allow the maximum  asso-
              ciated  value to be about 3 times larger than the
              number of input keys". Conversely, a value of 1/3
              means  "make the maximum associated value about 3
              times smaller than the number of input  keys".  A
              larger  table  should  decrease the time required
              for an unsuccessful search,  at  the  expense  of
              extra table space. Default value is 1.

   Informative output:
       -h, --help
              Print this message.

       -v, --version
              Print the gperf version number.

       -d, --debug
              Enables  the  debugging  option (produces verbose
              output to the standard error).

AUTHOR
       Written by Douglas C. Schmidt and Bruno Haible.

REPORTING BUGS
       Report bugs to <bug-gnu-gperf@gnu.org>.

COPYRIGHT
       Copyright (C) 1989-1998, 2000-2003 Free Software Founda-
       tion, Inc.
       This is free software; see the source for copying condi-
       tions.  There is NO warranty; not even for MERCHANTABIL-
       ITY or FITNESS FOR A PARTICULAR PURPOSE.

SEE ALSO
       The full documentation for gperf is maintained as a Tex-
       info manual.  If the info and gperf programs  are  prop-
       erly installed at your site, the command

              info gperf

       should give you access to the complete manual.



GNU gperf 3.0.1            June 2003                   GPERF(1)
