2011-11-28 12:29:16 +00:00
|
|
|
2007-04-30 Brendan Kehoe <brendan@zen.org>
|
|
|
|
|
|
|
|
* gperf-3.0.3 released.
|
|
|
|
* src/version.cc: Bump to 3.0.3.
|
|
|
|
* tests/*.exp: Bump to 3.0.3 in header.
|
|
|
|
* doc/gperf.1: Regenerate with gperf 3.0.3.
|
|
|
|
|
|
|
|
2007-04-06 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Improve support for mingw.
|
|
|
|
* tests/Makefile.in (check-c, check-ada, check-modula3, check-pascal,
|
|
|
|
check-lang-utf8, check-lang-ucs2): Remove '\r' from output before diff.
|
|
|
|
(POSTPROCESS_FOR_MINGW): New variable.
|
|
|
|
(check-test): Use it to postprocess output before diff.
|
|
|
|
|
|
|
|
2007-04-04 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Support for newer GNU standards.
|
|
|
|
* doc/configure.ac (mandir): Remove assignment.
|
|
|
|
* doc/Makefile.in (datarootdir): New variable.
|
|
|
|
(docdir, dvidir, psdir, pdfdir, htmldir): Use value determined by
|
|
|
|
autoconf.
|
|
|
|
* configure.ac: Require autoconf >= 2.60.
|
|
|
|
* doc/configure.ac: Likewise.
|
|
|
|
* lib/configure.ac: Likewise.
|
|
|
|
* src/configure.ac: Likewise.
|
|
|
|
* tests/configure.ac: Likewise.
|
|
|
|
* configure: Regenerated with autoconf-2.61.
|
|
|
|
* doc/configure: Likewise.
|
|
|
|
* lib/configure: Likewise.
|
|
|
|
* src/configure: Likewise.
|
|
|
|
* tests/configure: Likewise.
|
|
|
|
* src/config.h.in: Likewise.
|
|
|
|
* src/config.h.msvc: Likewise.
|
|
|
|
* src/config.h_vms: Likewise.
|
|
|
|
|
|
|
|
2007-04-04 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/Makefile.in (MAKEINFO): Disable also the LC_MESSAGES and LC_ALL
|
|
|
|
environment variables.
|
|
|
|
|
|
|
|
2007-04-04 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* configure.ac: Renamed from configure.in.
|
|
|
|
* doc/configure.ac: Renamed from doc/configure.in.
|
|
|
|
* lib/configure.ac: Renamed from lib/configure.in.
|
|
|
|
* src/configure.ac: Renamed from src/configure.in.
|
|
|
|
* tests/configure.ac: Renamed from tests/configure.in.
|
|
|
|
* Makefile.devel: Update.
|
|
|
|
* INSTALL: Update.
|
|
|
|
|
|
|
|
2007-03-31 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* tests/test.c (in_word_set): New declaration.
|
|
|
|
* tests/test2.c (in_word_set): Likewise.
|
|
|
|
|
|
|
|
2007-03-31 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.cc (Options::parse_options): Bump copyright year.
|
|
|
|
|
|
|
|
2007-03-31 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/gperf.texi: Fix typo.
|
|
|
|
|
|
|
|
2007-03-31 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Change generated code after the meaning of __inline is changed in
|
|
|
|
GCC 4.3.
|
|
|
|
* src/output.cc (Output::output_lookup_function): Emit an inline
|
|
|
|
marker that also works with gcc-4.3 in c99 or gnu99 mode.
|
|
|
|
* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
|
|
|
|
tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
|
|
|
|
tests/java.exp, tests/languages.exp, tests/modula2.exp,
|
|
|
|
tests/objc.exp, tests/permut2.exp, tests/permut3.exp,
|
|
|
|
tests/permutc2.exp, tests/test-4.exp: Update.
|
|
|
|
Reported by Bruce Korb <Bruce.Korb@gmail.com>.
|
|
|
|
|
|
|
|
2006-06-29 Brendan Kehoe <brendan@zen.org>
|
|
|
|
|
|
|
|
* gperf-3.0.2 released.
|
|
|
|
|
|
|
|
* doc/Makefile.in (all): No longer depend on dvi.
|
|
|
|
|
|
|
|
2006-01-22 Brendan Kehoe <brendan@zen.org>
|
|
|
|
|
|
|
|
* doc/gperf.texi: Update copyright to be 1989-2006.
|
|
|
|
(UPDATED): Change to 22 January 2006.
|
|
|
|
* doc/gperf.1 (TH): Fix date.
|
|
|
|
* configure.in: Update copyright years.
|
|
|
|
* configure: Regenerate.
|
|
|
|
* src/Makefile.in: Update copyright years.
|
|
|
|
|
|
|
|
* doc/gperf.{dvi,ps,pdf}: Regenerated by manually invoking tex
|
|
|
|
instead of trying to use texi2dvi, whose run of etex ends up
|
|
|
|
actually always running pdfetex, thus always recreating gperf.pdf.
|
|
|
|
|
|
|
|
2006-01-13 Brendan Kehoe <brendan@zen.org>
|
|
|
|
|
|
|
|
* NEWS: Add note about #line directive fix.
|
|
|
|
* doc/gperf.1: Regenerate with Makefile.devel.
|
|
|
|
|
|
|
|
* doc/gperf.texi (UPDATED): Correct to be today.
|
|
|
|
* doc: Regenerated by doing make in a configured tree.
|
|
|
|
Requires makeinfo, texi2dvi, texi2pdf, and texi2html.
|
|
|
|
|
|
|
|
* configure.in: Add AC_OBJEXT and AC_EXEEXT.
|
|
|
|
* lib/Makefile.in (OBJEXT): Define for subst.
|
|
|
|
(OBJECTS): Use $(OBJEXT) instead of '.o'.
|
|
|
|
* src/Makefile.in: Make dependencies use $(OBJEXT).
|
|
|
|
(OBJEXT, EXEEXT): Define for subst.
|
|
|
|
(TARGETPROG): Add $(EXEEXT).
|
|
|
|
(OBJECTS): Use $(OBJEXT) instead of '.o'.
|
|
|
|
(clean): Remove *.$(OBJEXT) instead of *.o.
|
|
|
|
|
|
|
|
2006-01-13 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Fix #line directives for filenames containing backslashes.
|
|
|
|
* src/output.cc (output_line_directive): New function.
|
|
|
|
(output_keyword_entry, Output::output): Use it.
|
|
|
|
Reported by Alexander <alexander.me@gmail.com>.
|
|
|
|
|
|
|
|
* src/options.cc (Options::parse_options): Update years in --version
|
|
|
|
output.
|
|
|
|
|
|
|
|
2005-08-29 Brendan Kehoe <brendan@zen.org>
|
|
|
|
|
|
|
|
* src/keyword.cc: Tweak comment to avoid nesting.
|
|
|
|
|
|
|
|
2005-08-27 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Fix missing ranlib detection when cross-compiling.
|
|
|
|
* aclocal.m4 (CL_PROG_RANLIB): Remove macro.
|
|
|
|
* lib/configure.in: Use AC_PROG_RANLIB instead of CL_PROG_RANLIB.
|
|
|
|
|
|
|
|
2005-07-30 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/version.cc: Bump version number to 3.0.2.
|
|
|
|
* doc/gperf.texi: Likewise.
|
|
|
|
* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
|
|
|
|
tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
|
|
|
|
tests/java.exp, tests/languages.exp, tests/modula2.exp,
|
|
|
|
tests/objc.exp, tests/permut2.exp, tests/permut3.exp,
|
|
|
|
tests/permutc2.exp, tests/test-4.exp: Update.
|
|
|
|
|
|
|
|
2005-07-30 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/positions.h: Add forward declarations of friend classes.
|
|
|
|
Needed for compilation with g++ 4.0.
|
|
|
|
|
|
|
|
2004-08-22 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* tests/Makefile.in (check-lang-syntax): Add test for the
|
|
|
|
--length-table-name option.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
2004-08-21 Bruce Lilly <blilly@erols.com>
|
|
|
|
|
|
|
|
* src/input.cc (Input::read_input): Accept length-table-name
|
|
|
|
declaration.
|
|
|
|
* src/options.h (Options::get_lengthtable_name,
|
|
|
|
Options::set_lengthtable_name): New declarations.
|
|
|
|
(Options): Add field _lengthtable_name.
|
|
|
|
* src/options.icc (Options::get_lengthtable_name): New inline method.
|
|
|
|
* src/options.cc (DEFAULT_LENGTHTABLE_NAME): New constant.
|
|
|
|
(Options::long_usage): Document --length-table-name option.
|
|
|
|
(Options::Options): Initialize _lengthtable_name field.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
(Options::set_lengthtable_name): New method.
|
|
|
|
(long_options): Add option --length-table-name.
|
|
|
|
(Options::parse_options): Implement --length-table-name option.
|
|
|
|
* src/output.cc (Output::output_keylength_table, output_switch_case,
|
|
|
|
Output::output_lookup_function_body): Use option.get_lengthtable_name.
|
|
|
|
* doc/gperf.texi (Gperf Declarations): Document %define
|
|
|
|
length-table-name.
|
|
|
|
(Output Details): Document --length-table-name option.
|
|
|
|
|
|
|
|
2003-06-12 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* gperf-3.0.1 released.
|
|
|
|
|
|
|
|
* src/version.cc: Bump version number to 3.0.1.
|
|
|
|
* doc/gperf.texi: Likewise.
|
|
|
|
* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
|
|
|
|
tests/cplusplus.exp, tests/gpc.exp, tests/incomplete.exp,
|
|
|
|
tests/java.exp, tests/languages.exp, tests/modula2.exp,
|
|
|
|
tests/objc.exp, tests/permut2.exp, tests/permut3.exp,
|
|
|
|
tests/permutc2.exp, tests/test-4.exp: Update.
|
|
|
|
|
|
|
|
2003-05-31 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/gperf.texi (User-supplied Struct): Mention the possibility of an
|
|
|
|
abbreviated struct declaration.
|
|
|
|
* src/input.cc (Input::read_input): Support struct declarations of the
|
|
|
|
form "struct foo;".
|
|
|
|
* tests/incomplete.gperf: New file.
|
|
|
|
* tests/incomplete.exp: New file.
|
|
|
|
* tests/Makefile.in (check-test): Check incomplete.gperf too.
|
|
|
|
Reported by Rob Leslie <rob@mars.org>.
|
|
|
|
|
|
|
|
2003-05-20 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/Makefile.in (gperf.ps): Don't use $< in a target rule.
|
|
|
|
|
|
|
|
2003-05-27 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* Makefile.vms (CC): Correct value.
|
|
|
|
(getopt.obj, getopt1.obj, getline.obj, hash.obj): Don't set
|
|
|
|
HAVE_CONFIG_H.
|
|
|
|
|
|
|
|
2003-05-17 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* Makefile.msvc (DEBUGFLAGS): New variable.
|
|
|
|
(gperf.exe): Use it, and MFLAGS too.
|
|
|
|
|
|
|
|
2003-05-08 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* gperf-3.0 released.
|
|
|
|
|
|
|
|
2003-05-07 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/version.cc: Bump version number to 3.0.
|
|
|
|
* doc/gperf.texi: Likewise.
|
|
|
|
* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
|
|
|
|
tests/cplusplus.exp, tests/gpc.exp, tests/java.exp,
|
|
|
|
tests/languages.exp, tests/modula2.exp, tests/objc.exp,
|
|
|
|
tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp,
|
|
|
|
tests/test-4.exp: Update.
|
|
|
|
|
|
|
|
* src/configure.in: Fix AC_INIT argument.
|
|
|
|
|
|
|
|
* Makefile.devel (configure, lib/configure, src/configure,
|
|
|
|
tests/configure, doc/configure): Use the newest autoconf.
|
|
|
|
(src/config.h.in): Use the newest autoheader.
|
|
|
|
|
|
|
|
2003-05-03 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/gperf.texi: Use two spaces as sentence separator, as recommended
|
|
|
|
by the texinfo manual.
|
|
|
|
|
|
|
|
2003-04-12 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/configure.in (mandir): Change default value.
|
|
|
|
* doc/Makefile.in (docdir): Use datadir instead of prefix.
|
|
|
|
* Makefile.msvc (datadir): New variable.
|
|
|
|
(mandir, docdir): Use it instead of prefix.
|
|
|
|
(install, installdirs): Update.
|
|
|
|
* Makefile.vms (datadir): New variable.
|
|
|
|
(mandir, docdir): Use it instead of prefix.
|
|
|
|
(install, installdirs): Update.
|
|
|
|
|
|
|
|
2003-04-12 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* README.vms: New file.
|
|
|
|
* Makefile.vms: New file.
|
|
|
|
* Makefile.devel (src/config.h_vms): New rule.
|
|
|
|
(all): Depend on it.
|
|
|
|
|
|
|
|
2003-03-19 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/input.cc (Input::read_input): Ignore comments at the beginning
|
|
|
|
of the declarations section.
|
|
|
|
* doc/gperf.texi (Controls for GNU indent): New section.
|
|
|
|
Reported by Bruce Lilly <blilly@erols.com>.
|
|
|
|
|
|
|
|
2003-03-19 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/output.cc (Output::output_hash_function): Avoid lint warning if
|
|
|
|
not all arguments of the hash function are used. Avoid lint warning
|
|
|
|
for fallthrough in switch.
|
|
|
|
* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
|
|
|
|
tests/cplusplus.exp, tests/java.exp, tests/languages.exp,
|
|
|
|
tests/modula2.exp, tests/objc.exp: All /*FALLTHROUGH*/ to expected
|
|
|
|
output.
|
|
|
|
Reported by Bruce Lilly <blilly@erols.com>.
|
|
|
|
|
|
|
|
2003-03-01 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.h (Options::set_initializer_suffix): New declaration.
|
|
|
|
* src/options.cc (Options::set_initializer_suffix): New method.
|
|
|
|
* src/input.cc (Input::read_input): Recognize %define
|
|
|
|
initializer-suffix.
|
|
|
|
* doc/gperf.texi (Gperf Declarations): Document %define
|
|
|
|
initializer-suffix.
|
|
|
|
* NEWS: Update.
|
|
|
|
|
|
|
|
2003-02-26 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* Makefile.msvc: New file.
|
|
|
|
* README.woe32: New file.
|
|
|
|
* Makefile.devel (all): Depend on src/config.h.msvc.
|
|
|
|
(src/config.h.msvc): New rule.
|
|
|
|
|
|
|
|
2003-01-07 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/input.h (Input::_charset_dependent): New field.
|
|
|
|
* src/input.cc (Input::read_input): Also set _charset_dependent.
|
|
|
|
* src/main.cc (main): Pass _charset_dependent from Input to Output.
|
|
|
|
* src/output.h (Output::Output): Add charset_dependent argument.
|
|
|
|
(Output::_charset_dependent): New field.
|
|
|
|
* src/output.cc (Output::Output): Add charset_dependent argument.
|
|
|
|
(Output::output): Provoke a compilation error if the execution
|
|
|
|
character set doesn't match the expectations.
|
|
|
|
* tests/c-parse.exp, tests/charsets.exp, tests/chill.exp,
|
|
|
|
tests/cplusplus.exp, tests/gpc.exp, tests/java.exp,
|
|
|
|
tests/languages.exp, tests/modula2.exp, tests/objc.exp,
|
|
|
|
tests/permut2.exp, tests/permut3.exp, tests/permutc2.exp,
|
|
|
|
tests/test-4.exp: Update.
|
|
|
|
|
|
|
|
* src/options.cc (Options::long_usage): Change bug report address to
|
|
|
|
<bug-gnu-gperf@gnu.org>.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
* src/output.cc (USE_DOWNCASE_TABLE): New macro.
|
|
|
|
(output_upperlower_table): New function.
|
|
|
|
(output_upperlower_strcmp, output_upperlower_strncmp,
|
|
|
|
output_upperlower_memcmp): Emit gperf_downcase array accesses.
|
|
|
|
(Output::output): Call output_upperlower_table.
|
|
|
|
* tests/permutc2.exp: Update.
|
|
|
|
|
|
|
|
* src/keyword-list.icc (KeywordExt_List::rest): Use a portable cast.
|
|
|
|
(Only in GCC a cast of an lvalue is an lvalue.)
|
|
|
|
|
|
|
|
2003-01-01 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.cc (Options::parse_options): Update copyright year.
|
|
|
|
|
|
|
|
* doc/gperf.texi (@author): Add me.
|
|
|
|
|
|
|
|
* src/options.h (NULLSTRINGS): New enum value.
|
|
|
|
(Options::get_stringpool_name, Options::set_stringpool_name): New
|
|
|
|
method declarations.
|
|
|
|
(Options::_stringpool_name): New field.
|
|
|
|
* src/options.icc (Options::get_stringpool_name): New method.
|
|
|
|
* src/options.cc (DEFAULT_STRINGPOOL_NAME): New variable.
|
|
|
|
(Options::long_usage): Document -Q and --null-strings.
|
|
|
|
(Options::Options): Initialize _stringpool_name.
|
|
|
|
(Options::~Options): Output _stringpool_name, NULLSTRINGS values too.
|
|
|
|
(Options::set_stringpool_name): New method.
|
|
|
|
(long_options): Add options --string-pool-name, --null-strings.
|
|
|
|
(Options::parse_options): Implement options -P, -Q and --null-strings.
|
|
|
|
* src/input.cc (Input::read_input): Recognize declarations %pic,
|
|
|
|
%define string-pool-name, %null-strings.
|
|
|
|
* src/output.h (Output::output_string_pool,
|
|
|
|
Output::output_lookup_pools): New method declarations.
|
|
|
|
(Output::_wordlist_eltype): New field.
|
|
|
|
* src/output.cc (Output::output_keylength_table): Trivial
|
|
|
|
simplification.
|
|
|
|
(Output::output_string_pool): New method.
|
|
|
|
(output_keyword_entry): Add stringpool_index argument. For SHAREDLIB,
|
|
|
|
use struct offsets.
|
|
|
|
(output_keyword_blank_entries): For SHAREDLIB, use -1 instead of "".
|
|
|
|
(Output::output_keyword_table): Use _wordlist_eltype instead of
|
|
|
|
_struct_tag. Compute stringpool_index for output_keyword_entry.
|
|
|
|
(Output::output_lookup_pools): New method.
|
|
|
|
(Output::output_lookup_function_body): Use _wordlist_eltype instead of
|
|
|
|
_struct_tag. For SHAREDLIB, use "+ stringpool" to convert offsets to
|
|
|
|
strings. Use "o >= 0" to test for nonempty table entry.
|
|
|
|
(Output::output_lookup_function): Call output_lookup_pools.
|
|
|
|
(Output::output): Initialize _wordlist_eltype. Call
|
|
|
|
output_lookup_pools.
|
|
|
|
* tests/jstest4.gperf: New file.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
* tests/Makefile.in (check-lang-syntax): Drop test of -p. Add tests of
|
|
|
|
-P and -Q.
|
|
|
|
* doc/gperf.texi (User-supplied Struct): Mention that first field has
|
|
|
|
to be of type 'int' if -P is given.
|
|
|
|
(Gperf Declarations): Document %pic, %define string-pool-name,
|
|
|
|
%null-strings.
|
|
|
|
(Output Details): Update description of option -P. Document options -Q
|
|
|
|
and --null-strings.
|
|
|
|
|
|
|
|
* tests/Makefile.in (check-link-c, check-ada, check-pascal,
|
|
|
|
check-test): Omit option -p.
|
|
|
|
* tests/c-parse.exp: Regenerated.
|
|
|
|
* tests/chill.exp: Regenerated.
|
|
|
|
* tests/cplusplus.exp: Regenerated.
|
|
|
|
* tests/gpc.exp: Regenerated.
|
|
|
|
* tests/java.exp: Regenerated.
|
|
|
|
* tests/objc.exp: Regenerated.
|
|
|
|
* tests/test-4.exp: Regenerated.
|
|
|
|
|
|
|
|
* src/output.cc (Output::output_lookup_function_body): Omit the
|
|
|
|
multicompare code section and its variables when it is not used.
|
|
|
|
* tests/chill.exp: Regenerated.
|
|
|
|
|
|
|
|
* src/output.c (Output_Compare::output_firstchar_comparison): New
|
|
|
|
method.
|
|
|
|
(Output_Compare_Strcmp::output_comparison,
|
|
|
|
Output_Compare_Strncmp::output_comparison,
|
|
|
|
Output_Compare_Memcmp::output_comparison): Use it.
|
|
|
|
* tests/permutc2.exp: Update.
|
|
|
|
|
|
|
|
* tests/smtp.gperf: New file, based on a contribution by Bruce Lilly.
|
|
|
|
* tests/Makefile.in (check-smtp): New rule.
|
|
|
|
(check): Depend on it.
|
|
|
|
(clean): Update.
|
|
|
|
|
|
|
|
2002-12-12 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/search.h (Search::init_selchars_tuple,
|
|
|
|
Search::count_duplicates_tuple): Add alpha_unify argument.
|
|
|
|
(Search::count_duplicates_tuple): New method declaration.
|
|
|
|
* src/search.cc (Search::init_selchars_tuple,
|
|
|
|
Search::count_duplicates_tuple): Add alpha_unify argument.
|
|
|
|
(Search::find_positions): Update.
|
|
|
|
(Search::count_duplicates_tuple): New method.
|
|
|
|
(Search::count_duplicates_multiset): Free temp alpha_unify vector.
|
|
|
|
(Search::find_alpha_inc): Call count_duplicates_tuple.
|
|
|
|
|
|
|
|
* src/configure.in: Add test for stack-allocated variable-size arrays.
|
|
|
|
* src/config.h.in: Regenerated.
|
|
|
|
* src/search.cc: Include config.h.
|
|
|
|
(DYNAMIC_ARRAY, FREE_DYNAMIC_ARRAY): New macros.
|
|
|
|
(Search::find_alpha_inc, Search::count_possible_collisions,
|
|
|
|
Search::find_asso_values): Use them.
|
|
|
|
* src/Makefile.in (search.o): Depend on config.h.
|
|
|
|
|
|
|
|
* src/search.h (Search::keyword_list_length, Search::max_key_length,
|
|
|
|
Search::get_max_keysig_size, Search::prepare): Remove declarations.
|
|
|
|
(Search::prepare): Renamed from Search::preprepare.
|
|
|
|
(Search::_max_selchars_length): New field.
|
|
|
|
* src/search.cc (Search::prepare): Renamed from Search::preprepare.
|
|
|
|
(Search::prepare_asso_values): Merged with old Search::prepare.
|
|
|
|
Initialize _max_selchars_length.
|
|
|
|
(Search::keyword_list_length): Remove function. Use _list_len instead.
|
|
|
|
(Search::max_key_length): Remove function. Use _max_key_len instead.
|
|
|
|
(Search::get_max_keysig_size): Remove function. Use
|
|
|
|
_max_selchars_length instead.
|
|
|
|
(Search::count_possible_collisions, Search::find_asso_values): Update.
|
|
|
|
(Search::find_good_asso_values): Call just prepare_asso_values.
|
|
|
|
(Search::~Search): Update.
|
|
|
|
|
|
|
|
* src/output.h (Output::output_asso_values_ref): New declaration.
|
|
|
|
* src/output.cc (char_to_index): Remove variable.
|
|
|
|
(Output::output_asso_values_ref): New function.
|
|
|
|
(Output::output_hash_function): Use it.
|
|
|
|
(Output::output): Update.
|
|
|
|
|
|
|
|
* src/positions.h (Positions::is_useall, Positions::set_useall,
|
|
|
|
Positions::iterator, Positions::reviterator): New method declarations.
|
|
|
|
(Positions::_useall): New field.
|
|
|
|
(PositionIterator): Make constructor private. Add a constructor and a
|
|
|
|
copy constructor.
|
|
|
|
(PositionIterator::remaining): New declaration.
|
|
|
|
(PositionReverseIterator): Make constructor private. Add a constructor
|
|
|
|
and a copy constructor.
|
|
|
|
(PositionReverseIterator::remaining): New declaration.
|
|
|
|
(PositionReverseIterator::_minindex): New field.
|
|
|
|
* src/positions.icc (Positions::Positions): Initialize _useall.
|
|
|
|
(Positions::operator=): Likewise.
|
|
|
|
(Positions::is_useall, Positions::set_useall): New methods.
|
|
|
|
(Positions::sort): Do nothing if _useall is set.
|
|
|
|
(Positions::iterator, Positions::reviterator): New methods.
|
|
|
|
(PositionIterator::PositionIterator): New constructor.
|
|
|
|
(PositionIterator::remaining): New method.
|
|
|
|
(PositionReverseIterator::PositionReverseIterator): New constructor.
|
|
|
|
(PositionReverseIterator::next): Use _minindex as bound.
|
|
|
|
(PositionReverseIterator::remaining): New method.
|
|
|
|
* src/positions.cc (Positions::add, Positions::remove): Reset the
|
|
|
|
useall flag.
|
|
|
|
(Positions::print): Handle the useall case.
|
|
|
|
* src/options.h (ALLCHARS): Remove.
|
|
|
|
* src/options.cc (Options::~Options): Update.
|
|
|
|
(Options::parse_options): Use Positions::set_useall().
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars_tuple,
|
|
|
|
KeywordExt::init_selchars_multiset, KeywordExt::init_selchars_low):
|
|
|
|
Remove use_all_chars argument.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars_low): Remove use_all_chars
|
|
|
|
argument. Tell the position iterator to stop at _allchars_length.
|
|
|
|
Remove special case code for -k'*'.
|
|
|
|
(KeywordExt::init_selchars_tuple, KeywordExt::init_selchars_multiset):
|
|
|
|
Remove use_all_chars argument.
|
|
|
|
* src/search.h (Search::init_selchars_tuple): Remove use_all_chars
|
|
|
|
argument.
|
|
|
|
(Search::init_selchars_multiset): Likewise.
|
|
|
|
* src/search.cc (Search::init_selchars_tuple): Remove use_all_chars
|
|
|
|
argument.
|
|
|
|
(Search::count_duplicates_tuple, Search::find_positions): Update.
|
|
|
|
(Search::compute_alpha_unify): Remove special case code for -k'*'.
|
|
|
|
(Search::init_selchars_multiset): Remove use_all_chars argument.
|
|
|
|
(Search::count_duplicates_multiset): Update.
|
|
|
|
(Search::find_alpha_inc): Remove special case code for -k'*'.
|
|
|
|
(Search::prepare): Update.
|
|
|
|
(Search::get_max_keysig_size): Update.
|
|
|
|
* src/output.cc (Output::output_hash_function): Remove special case
|
|
|
|
code for -k'*'.
|
|
|
|
* tests/chill.exp: Regenerated.
|
|
|
|
|
|
|
|
2002-12-11 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Change the positions to be 0-based, instead of 1-based.
|
|
|
|
* src/positions.h (Positions::LASTCHAR): Set to -1.
|
|
|
|
(Positions::MAX_SIZE): New constant.
|
|
|
|
(Positions::pointer): Change return type.
|
|
|
|
(Positions::_positions): Change element type.
|
|
|
|
(PositionIterator::EOS, PositionReverseIterator::EOS): Set to -2.
|
|
|
|
* src/positions.icc (Positions::pointer): Change return type.
|
|
|
|
(Positions::sort): Update.
|
|
|
|
* src/positions.cc (Positions::contains, Positions::add,
|
|
|
|
Positions::remove): Update.
|
|
|
|
(Positions::print): Update. Fix off-by-one bug.
|
|
|
|
* src/options.cc (Options::~Options): Update.
|
|
|
|
(Options::parse_options): Set BAD_VALUE to -3. Update.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars_low): Update.
|
|
|
|
* src/search.cc (Search::find_positions, Search::compute_alpha_unify,
|
|
|
|
Search::find_alpha_inc): Update.
|
|
|
|
* src/output.cc (Output::output_hash_function): Update. Don't emit
|
|
|
|
a 'case' statement right after 'default:'.
|
|
|
|
* tests/c-parse.exp: Regenerated.
|
|
|
|
* tests/charsets.exp: Regenerated.
|
|
|
|
* tests/cplusplus.exp: Regenerated.
|
|
|
|
* tests/java.exp: Regenerated.
|
|
|
|
* tests/languages.exp: Regenerated.
|
|
|
|
* tests/modula2.exp: Regenerated.
|
|
|
|
* tests/objc.exp: Regenerated.
|
|
|
|
|
|
|
|
2002-12-10 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.h: Reorder enum values.
|
|
|
|
(Options::short_usage, Options::long_usage): Make static.
|
|
|
|
* src/options.cc (Options::short_usage); No longer print a monster
|
|
|
|
usage line.
|
|
|
|
(Options::print_options): Improve output of options like
|
|
|
|
--key-positions=1,2,$.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
|
|
|
|
* src/options.h (UPPERLOWER): New enum value.
|
|
|
|
* src/options.cc (Options::long_usage): Document option --ignore-case.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
(long_options): Add option --ignore-case.
|
|
|
|
(Options::parse_options): Handle option --ignore-case.
|
|
|
|
* src/input.cc (Input::read_input): Recognize option %ignore-case.
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars_tuple,
|
|
|
|
KeywordExt::init_selchars_multiset, KeywordExt::init_selchars_low):
|
|
|
|
Add alpha_unify argument.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars_low): Add alpha_unify
|
|
|
|
argument.
|
|
|
|
(KeywordExt::init_selchars_tuple): Add alpha_unify argument.
|
|
|
|
(KeywordExt::init_selchars_multiset): Add alpha_unify argument.
|
|
|
|
* src/search.h (Search::compute_alpha_size,
|
|
|
|
Search::compute_alpha_unify): New declarations.
|
|
|
|
(Search::init_selchars_multiset): Add alpha_unify argument.
|
|
|
|
(Search::_alpha_unify): New field.
|
|
|
|
* src/search.cc (Search::compute_alpha_size,
|
|
|
|
Search::compute_alpha_unify): New functions.
|
|
|
|
(Search::init_selchars_tuple): Update.
|
|
|
|
(Search::find_positions): Temporarily set _alpha_unify. Perform a
|
|
|
|
case insensitive comparison if needed.
|
|
|
|
(Search::init_selchars_multiset): Add alpha_unify argument.
|
|
|
|
(Search::count_duplicates_multiset): Call compute_alpha_unify.
|
|
|
|
(Search::find_alpha_inc): Temporarily set _alpha_unify. At the end,
|
|
|
|
set _alpha_size and _alpha_unify.
|
|
|
|
(Search::prepare): Update. Don't compute _alpga_size here.
|
|
|
|
(Search::optimize): Propagate unified asso_values.
|
|
|
|
(Search::~Search) Delete _alpha_unify.
|
|
|
|
* src/output.cc (output_upperlower_strcmp, output_upperlower_strncmp,
|
|
|
|
output_upperlower_memcmp): New functions.
|
|
|
|
(Output_Compare_Strcmp::output_comparison,
|
|
|
|
Output_Compare_Strncmp::output_comparison,
|
|
|
|
Output_Compare_Memcmp::output_comparison): Use the case-insensitive
|
|
|
|
comparison function if --ignore-case was given.
|
|
|
|
(Output::output): Emit the auxiliary case-insensitive comparison
|
|
|
|
function if needed.
|
|
|
|
* tests/permutc2.gperf, tests/permutc2.exp: New files.
|
|
|
|
* tests/Makefile.in (check-test): Also check permutc2.gperf.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
* doc/gperf.texi (Gperf Declarations): Document %ignore-case.
|
|
|
|
(Input Details): Document option --ignore-case.
|
|
|
|
* NEWS: Update.
|
|
|
|
|
|
|
|
* src/search.cc (Search::optimize): Fill unused asso_values[] entries
|
|
|
|
with a large value.
|
|
|
|
* src/output.h (Output::Output): Remove occurrences argument.
|
|
|
|
(Output::_occurrences): Remove field.
|
|
|
|
* src/output.cc (Output::Output): Remove occurrences argument.
|
|
|
|
(Output::output_hash_function): Ignore _occurrences.
|
|
|
|
* src/main.cc (main): Don't pass the _occurrences to Output.
|
|
|
|
|
|
|
|
* src/search.cc (Search::preprepare): Exit if keywords contain
|
|
|
|
out-of-range characters.
|
|
|
|
|
|
|
|
* src/search.cc (for): Define so as to avoid errors with old compilers.
|
|
|
|
|
|
|
|
* src/options.h (SHAREDLIB): New enum value.
|
|
|
|
* src/options.cc (Options::short_usage): Mention option -P.
|
|
|
|
(Options::long_usage): Document option -P.
|
|
|
|
(long_options): Add option --pic.
|
|
|
|
(Options::parse_options): Handle option -P/--pic.
|
|
|
|
* src/output.cc (output_keyword_blank_entries): When SHAREDLIB is
|
|
|
|
specified, emit NULL pointers instead of "".
|
|
|
|
(Output::output_lookup_function_body): When SHAREDLIB is specified
|
|
|
|
and SWITCH and DUP and not specified, test the table entry against
|
|
|
|
NULL before the string comparison.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
* doc/gperf.texi (Output Details): Document option -P.
|
|
|
|
* NEWS: Update.
|
|
|
|
Suggested by Ulrich Drepper.
|
|
|
|
|
|
|
|
2002-12-08 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* tests/permut2.gperf, tests/permut2.exp: New files.
|
|
|
|
* tests/permut3.gperf, tests/permut3.exp: New files.
|
|
|
|
* tests/charsets.gperf: New file, from Bruce Lilly.
|
|
|
|
* tests/charsets.exp: New file.
|
|
|
|
* tests/languages.gperf: New file, from Bruce Lilly.
|
|
|
|
* tests/languages.exp: New file.
|
|
|
|
* Makefile.in (check-test): Test them all.
|
|
|
|
|
|
|
|
Completely new asso_values search algorithm.
|
|
|
|
* src/search.h (Search::compute_occurrence, Search::clear_determined,
|
|
|
|
Search::set_determined, Search::already_determined, Search::reorder):
|
|
|
|
Remove functions.
|
|
|
|
(Search::init_asso_values, Search::sort_by_occurrence,
|
|
|
|
Search::compute_occurrence, Search::sort_by_occurrence,
|
|
|
|
Search::has_collisions, Search::collision_prior_to): Remove functions.
|
|
|
|
(Search::compute_partition, Search::count_possible_collisions,
|
|
|
|
Search::unchanged_partition): New method declarations.
|
|
|
|
(Search::_determined): Remove field.
|
|
|
|
* src/search.cc (Search::prepare): Don't initialize _determined.
|
|
|
|
(Search::compute_occurrence, greater_by_occurrence,
|
|
|
|
Search::clear_determined, Search::set_determined,
|
|
|
|
Search::already_determined, Search::reorder): Remove functions.
|
|
|
|
(Search::init_asso_values, compute_disjoint_union,
|
|
|
|
Search::sort_by_occurrence, Search::compute_occurrence,
|
|
|
|
Search::sort_by_occurrence, Search::has_collisions,
|
|
|
|
Search::collision_prior_to): Remove functions.
|
|
|
|
(StackEntry): Remove class.
|
|
|
|
(EquivalenceClass, Step): New classes.
|
|
|
|
(equals, Search::compute_partition, delete_partition,
|
|
|
|
Search::count_possible_collisions, Search::unchanged_partition): New
|
|
|
|
functions.
|
|
|
|
(Search::find_asso_values): Completely rewritten.
|
|
|
|
(Search::find_good_asso_values): Don't call reorder().
|
|
|
|
(Search::~Search): Don't free _determined.
|
|
|
|
* src/keyword.h (KeywordExt::_occurrence): Remove field.
|
|
|
|
* src/options.h (ORDER, FAST, OPT_CHOICE): Remove enum values.
|
|
|
|
(Options::_iterations): Remove field.
|
|
|
|
* src/options.icc (Options::get_iterations): Remove method.
|
|
|
|
* src/options.cc (Options::long_usage): Remove mention of -f and -o.
|
|
|
|
(Options::Options): Don't initialize _iterations.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
(Options::parse_options): Do nothing for options -f, -o, -O.
|
|
|
|
* doc/gperf.texi: (Contributors): Update.
|
|
|
|
(Algorithmic Details): Remove options -f and -o. Update description
|
|
|
|
of option -s.
|
|
|
|
* tests/c-parse.exp, tests/chill.exp, tests/cplusplus.exp,
|
|
|
|
tests/gpc.exp, tests/java.exp, tests/modula2.exp, tests/objc.exp,
|
|
|
|
tests/test-4.exp): Regenerated, smaller than before.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
* NEWS: Update.
|
|
|
|
|
|
|
|
2002-12-08 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/search.h (Search::_alpha_size): Change type to 'unsigned int'.
|
|
|
|
(Search::_asso_value_max): Likewise.
|
|
|
|
* src/search.cc (Search::prepare_asso_values): Update.
|
|
|
|
(Search::init_asso_values): Update.
|
|
|
|
(Search::~Search): Update.
|
|
|
|
* src/output.h (Output::Output): Change alpha_size type to
|
|
|
|
'unsigned int'.
|
|
|
|
(Output::_alpha_size): Change type to 'unsigned int'.
|
|
|
|
* src/output.cc (Output::Output): Change alpha_size type to
|
|
|
|
'unsigned int'.
|
|
|
|
(Output::output_hash_function): Update.
|
|
|
|
|
|
|
|
2002-12-07 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.h (OPT_CHOICE): New enum value.
|
|
|
|
* src/options.cc (Options::~Options): Update.
|
|
|
|
(long_options): New option --optimized-collision-resolution.
|
|
|
|
(Options::parse_options): Accept option -O.
|
|
|
|
* src/search.h (Search::sort_by_occurrence): Change argument to
|
|
|
|
'unsigned int'.
|
|
|
|
(Search::compute_occurrence, Search::sort_by_occurrence): New method
|
|
|
|
declarations.
|
|
|
|
* src/search.cc (Search::sort_by_occurrence): Change argument to
|
|
|
|
'unsigned int'.
|
|
|
|
(Search::compute_occurrence, Search::sort_by_occurrence): New methods.
|
|
|
|
(Search::find_asso_values): Implement OPT_CHOICE. More debugging
|
|
|
|
output.
|
|
|
|
|
|
|
|
* src/search.cc (Search::prepare_asso_values) [DEBUG]: Also print
|
|
|
|
the keyword list in order.
|
|
|
|
(Search::find_asso_values) [DEBUG]: Upon failure, print the union_set.
|
|
|
|
|
|
|
|
* src/options.h (Options::get_size_multiple): Change return type to
|
|
|
|
float.
|
|
|
|
(Options::_size_multiple): Change type to float.
|
|
|
|
* src/options.icc (Options::get_size_multiple): Change return type to
|
|
|
|
float.
|
|
|
|
* src/options.cc (Options::long_usage): Update description of option
|
|
|
|
-s.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
(Options::parse_options): For option -s, accept a fraction.
|
|
|
|
* src/search.cc (Search::prepare_asso_values): Use get_size_multiple
|
|
|
|
as it is.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
* doc/gperf.texi (Algorithmic Details): Update description of option
|
|
|
|
-s.
|
|
|
|
|
|
|
|
2002-12-04 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Improve debugging output.
|
|
|
|
* src/hash-table.h (Hash_Table::dump): New method.
|
|
|
|
* src/hash-table.cc (Hash_Table::dump): New method, extracted from
|
|
|
|
destructor.
|
|
|
|
(Hash_Table::~Hash_Table): No longer print the contents.
|
|
|
|
* src/positions.h (PositionReverseIterator): New class.
|
|
|
|
* src/positions.icc (PositionReverseIterator::PositionReverseIterator,
|
|
|
|
PositionReverseIterator::next): New methods.
|
|
|
|
* src/search.cc (Search::find_positions): If debugging, print the
|
|
|
|
result.
|
|
|
|
(Search::find_alpha_inc): If debugging, print the result.
|
|
|
|
(Search::prepare): Explicitly dump the hash table's contents here.
|
|
|
|
|
|
|
|
Portability fixes.
|
|
|
|
* src/positions.h (Positions::LASTCHAR, Positions::MAX_KEY_POS,
|
|
|
|
PositionIterator::EOS): Define as compile-time constants using enum.
|
|
|
|
* src/bool-array.cc (Bool_Array::~Bool_Array): Remove const qualifier
|
|
|
|
of pointer to be deleted.
|
|
|
|
* src/input.cc (Input::~Input): Likewise.
|
|
|
|
* src/keyword.cc (KeywordExt::delete_selchars): Likewise.
|
|
|
|
* src/main.cc (main): Likewise.
|
|
|
|
* src/hash-table.cc (Hash_Table::~Hash_Table): Limit scope of 'for'
|
|
|
|
variables.
|
|
|
|
* src/search.cc (Search::prepare_asso_values): Use a static_cast to
|
|
|
|
convert from time_t to long. This is possible because ISO C 99 says
|
|
|
|
time_t is a numeric type.
|
|
|
|
|
|
|
|
2002-11-20 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/search.cc (Search::find_asso_values): Avoid gcc warnings about
|
|
|
|
uninitialized variables.
|
|
|
|
|
|
|
|
Implement backtracking.
|
|
|
|
* src/search.h (Search::has_collisions): Renamed from
|
|
|
|
Search::less_collisions. Return a boolean.
|
|
|
|
* src/search.cc (Search::has_collisions): Renamed from
|
|
|
|
Search::less_collisions. Return a boolean.
|
|
|
|
(StackEntry): Remove field _collisions_so_far.
|
|
|
|
(Search::find_asso_values): Backtrack when encountering an unresolved
|
|
|
|
collision. Assume collisions_so_far is always zero.
|
|
|
|
(Search::optimize): Exit if there are accidental duplicates at the end.
|
|
|
|
* src/output.cc (Output::num_hash_values): Simply return the list
|
|
|
|
length.
|
|
|
|
(Output::output_keylength_table): Remove handling of accidental
|
|
|
|
duplicates.
|
|
|
|
(Output::output_keyword_table, Output::output_lookup_array): Likewise.
|
|
|
|
(output_switch_case, output_switches): Likewise.
|
|
|
|
* doc/gperf.texi (Algorithmic Details): Adjust description of options
|
|
|
|
-D, -f, -o, -r.
|
|
|
|
(Bugs): Remove note about missing backtracking.
|
|
|
|
(Projects): Likewise.
|
|
|
|
|
|
|
|
2002-11-19 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Prepare for backtracking.
|
|
|
|
* src/search.h (Search::try_asso_value, Search::change_some_asso_value):
|
|
|
|
Remove declarations.
|
|
|
|
(Search::less_collisions, Search::collision_prior_to): New declarations.
|
|
|
|
(Search::_fewest_collisions, Search::_union_set, Search::_num_done):
|
|
|
|
Remove fields.
|
|
|
|
* src/search.cc (Search::prepare_asso_values): Don't initialize
|
|
|
|
_union_set.
|
|
|
|
(Search::try_asso_value, Search::change_some_asso_value): Remove
|
|
|
|
methods.
|
|
|
|
(Search::less_collisions, Search::collision_prior_to): New methods.
|
|
|
|
(StackEntry): New class.
|
|
|
|
(Search::find_asso_values): Reorganized to use pseudo-recursion.
|
|
|
|
(Search::~Search): Don't free _union_set.
|
|
|
|
|
|
|
|
* src/search.h (Search::find_good_asso_values): New declaration.
|
|
|
|
* src/search.cc: Add comments about the basic structure of the
|
|
|
|
algorithm.
|
|
|
|
(Search::find_positions): Move the option[POSITIONS] test to here.
|
|
|
|
(Search::find_good_asso_values): New method, extracted from
|
|
|
|
Search::optimize.
|
|
|
|
(Search::optimize): Remove option[POSITIONS] test. Call
|
|
|
|
find_good_asso_values.
|
|
|
|
|
|
|
|
2002-11-17 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.cc (Options::parse_options): Include copyright notice
|
|
|
|
and authors in --version output.
|
|
|
|
|
|
|
|
Avoid artificial duplicates.
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars_tuple): New declaration.
|
|
|
|
(KeywordExt::init_selchars_multiset): Renamed from
|
|
|
|
KeywordExt::init_selchars.
|
|
|
|
(KeywordExt::init_selchars_low): New declaration.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars_low): Renamed from
|
|
|
|
KeywordExt::init_selchars. Add alpha_inc argument. Remove sorting.
|
|
|
|
(KeywordExt::init_selchars_tuple): New method.
|
|
|
|
(KeywordExt::init_selchars_multiset): New method, replaces
|
|
|
|
KeywordExt::init_selchars.
|
|
|
|
* src/search.h (Search::init_selchars_tuple): Renamed from
|
|
|
|
Search::init_selchars.
|
|
|
|
(Search::count_duplicates_tuple): Renamed from Search::count_duplicates.
|
|
|
|
(Search::init_selchars_multiset, Search::count_duplicates_multiset,
|
|
|
|
Search::find_alpha_inc): New declarations.
|
|
|
|
(Search::_alpha_inc): New field.
|
|
|
|
(Search::_alpha_size, Search::_occurrences, Search::_asso_values,
|
|
|
|
Search::_determined): Make non-const.
|
|
|
|
* src/search.cc (Search::Search): Don't initialize _key_positions,
|
|
|
|
_alpha_size, _occurrences, _asso_values, _determined here.
|
|
|
|
(Search::init_selchars_tuple): Renamed from Search::init_selchars.
|
|
|
|
(Search::count_duplicates_tuple): Renamed from Search::count_duplicates.
|
|
|
|
(Search::find_positions): Update.
|
|
|
|
(Search::init_selchars_multiset, Search::count_duplicates_multiset,
|
|
|
|
Search::find_alpha_inc): New methods.
|
|
|
|
(Search::prepare): Move preprepare, find_positions calls away.
|
|
|
|
Initialize _alpha_size, _occurrences, _asso_values, _determined here.
|
|
|
|
(Search::optimize): Call preprepare, find_positions here. Initialize
|
|
|
|
_key_positions here.
|
|
|
|
(Search::~Search): Deallocate _alpha_inc.
|
|
|
|
* src/output.cc (Output::Output): Add alpha_inc argument.
|
|
|
|
(Output::output_hash_function): Use _alpha_inc.
|
|
|
|
* src/output.h (Output::Output): Add alpha_inc argument.
|
|
|
|
(Output::_alpha_inc): New field.
|
|
|
|
* src/main.cc (main): Pass _alpha_inc from Search to Output.
|
|
|
|
* tests/chill.exp: Update.
|
|
|
|
* doc/gperf.texi (Algorithmic Details): Remove description of
|
|
|
|
artificial duplicates.
|
|
|
|
|
|
|
|
* src/keyword.h (KeywordExt::_selchars): Change type to
|
|
|
|
'const unsigned int *'.
|
|
|
|
* src/keyword.cc (sort_char_set): Change argument type to
|
|
|
|
'unsigned int *'.
|
|
|
|
(KeywordExt::init_selchars): Update.
|
|
|
|
* src/search.h (Search::sort_by_occurrence): Change argument type to
|
|
|
|
'unsigned int *'.
|
|
|
|
(Search::try_asso_value): Change argument type to 'unsigned int'.
|
|
|
|
(Search::_union_set): Change type to 'unsigned int *'.
|
|
|
|
* src/search.cc (Search::prepare, Search::compute_occurrence,
|
|
|
|
Search::set_determined, Search::already_determined,
|
|
|
|
Search::prepare_asso_values, Search::compute_hash): Update.
|
|
|
|
(compute_disjoint_union): Change argument types to 'unsigned int *'.
|
|
|
|
(Search::sort_by_occurrence): Likewise.
|
|
|
|
(Search::try_asso_value): Change argument type to 'unsigned int'.
|
|
|
|
(Search::change_some_asso_value, Search::~Search): Update.
|
|
|
|
* src/hash-table.cc (Hash_Table::~Hash_Table, Hash_Table::equal,
|
|
|
|
Hash_Table::insert): Update.
|
|
|
|
|
|
|
|
* src/positions.h: New file, extracted from options.h.
|
|
|
|
* src/positions.icc: New file, extracted from options.icc.
|
|
|
|
* src/positions.cc: New file, extracted from options.cc.
|
|
|
|
* src/options.h: Include positions.h. Move classes Positions and
|
|
|
|
PositionsIterator away.
|
|
|
|
* src/options.icc: Move classes Positions and PositionsIterator away.
|
|
|
|
* src/options.cc: Move class Positions away.
|
|
|
|
* src/keyword.cc: Include positions.h instead of options.h.
|
|
|
|
* src/output.h: Include positions.h instead of options.h.
|
|
|
|
* src/search.h: Include positions.h instead of options.h.
|
|
|
|
* src/Makefile.in (OBJECTS): Add positions.o.
|
|
|
|
(POSITIONS_H): New variable.
|
|
|
|
(OPTIONS_H, SEARCH_H, OUTPUT_H, keyword.o): Use it.
|
|
|
|
(positions.o): New rule.
|
|
|
|
|
|
|
|
* src/options.h (POSITIONS): New enum value.
|
|
|
|
(Positions::Positions): New copy constructor.
|
|
|
|
(Positions::operator=, Positions::contains, Position::add,
|
|
|
|
Positions::remove, Positions::print): New method declaration.
|
|
|
|
(Options::get_max_keysig_size): Remove method.
|
|
|
|
* src/options.icc (Positions::Positions): New copy constructor.
|
|
|
|
(Positions::operator=): New method.
|
|
|
|
(Options::get_max_keysig_size): Remove method.
|
|
|
|
* src/options.cc (Options::Options): Initialize _key_positions
|
|
|
|
trivially.
|
|
|
|
(Options::parse_options): Option -k sets POSITIONS.
|
|
|
|
(Positions::contains, Positions::add, Positions::remove,
|
|
|
|
Positions::print): New methods.
|
|
|
|
* src/hash-table.cc (Hash_Table::~Hash_Table): Compute the field
|
|
|
|
width explicitly, instead of using Options::get_max_keysig_size.
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars): Add arguments
|
|
|
|
use_all_chars, positions.
|
|
|
|
(KeywordExt::delete_selchars): New declaration.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars): Add arguments
|
|
|
|
use_all_chars, positions. Remove error message if there are no key
|
|
|
|
positions.
|
|
|
|
(KeywordExt::delete_selchars): New method.
|
|
|
|
* src/search.h: Include options.h.
|
|
|
|
(Search::preprepare, Search::init_selchars, Search::delete_selchars,
|
|
|
|
Search::count_duplicates, Search::find_positions): New declarations.
|
|
|
|
(Search::_key_positions): New field.
|
|
|
|
* src/search.cc (Search::Search): Initialize _key_positions.
|
|
|
|
(Search::preprepare, Search::init_selchars, Search::delete_selchars,
|
|
|
|
Search::count_duplicates, Search::find_positions): New functions.
|
|
|
|
(Search::prepare): Call preprepare and find_positions. Tweak error
|
|
|
|
message.
|
|
|
|
(Search::get_max_keysig_size): Use _key_positions instead of
|
|
|
|
option.get_key_positions().
|
|
|
|
(Search::optimize): Tweak error message.
|
|
|
|
* src/output.h: Include options.h.
|
|
|
|
(Output::Output): Add Positions argument.
|
|
|
|
(Output::_key_positions): New field.
|
|
|
|
* src/output.cc (Output::Output): Add Positions argument.
|
|
|
|
(Output::output_hash_function): Omit the table if there are no
|
|
|
|
positions at all. Use _key_positions instead of
|
|
|
|
option.get_key_positions().
|
|
|
|
(Output::output): Output the computed positions as a comment.
|
|
|
|
* src/main.cc (main): Pass the Positions from Searcher to Output.
|
|
|
|
* src/Makefile.in (SEARCH_H, OUTPUT_H): Include OPTIONS_H.
|
|
|
|
* tests/Makefile.in (check-test): Pass key positions explicitly.
|
|
|
|
* tests/gpc.exp: Update.
|
|
|
|
* tests/test-4.exp: Update.
|
|
|
|
* doc/gperf.texi (Algorithmic Details): Mention that -k is not needed
|
|
|
|
usually.
|
|
|
|
|
|
|
|
2002-11-16 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.h (Options::get_slot_name): Renamed from
|
|
|
|
Options::get_key_name.
|
|
|
|
(Options::set, Options::set_language, Options::set_total_switches,
|
|
|
|
Options::set_function_name, Options::set_slot_name,
|
|
|
|
Options::set_class_name, Options::set_hash_name,
|
|
|
|
Options::set_wordlist_name, Options::set_delimiters): New method
|
|
|
|
declarations.
|
|
|
|
(Options::_language): New field.
|
|
|
|
(Options::_slot_name): Renamed from Options::_key_name.
|
|
|
|
* src/options.icc (Options::set): New method.
|
|
|
|
(Options::get_slot_name): Renamed from Options::get_key_name.
|
|
|
|
* src/options.cc (DEFAULT_FUNCTION_NAME): Renamed from DEFAULT_NAME.
|
|
|
|
(DEFAULT_SLOT_NAME): Renamed from DEFAULT_NAME.
|
|
|
|
(Options::Options): Initialize _language. Update.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
(Options::set_language, Options::set_total_switches,
|
|
|
|
Options::set_function_name, Options::set_slot_name,
|
|
|
|
Options::set_class_name, Options::set_hash_name,
|
|
|
|
Options::set_wordlist_name, Options::set_delimiters): New methods.
|
|
|
|
(Options::parse_options): Call set_language. Update.
|
|
|
|
* src/input.cc (is_declaration, is_declaration_with_arg,
|
|
|
|
is_define_declaration): New functions.
|
|
|
|
(Input::read_input): Accept %DECL declarations.
|
|
|
|
* src/output.cc (Output::output_lookup_function_body): Update.
|
|
|
|
* doc/gperf.texi (Declarations): Add new subnodes.
|
|
|
|
(User-supplied Struct, Gperf Declarations, C Code Inclusion): New
|
|
|
|
nodes.
|
|
|
|
(Keywords, Output Format, Binary Strings, Options): Mention %
|
|
|
|
declarations as being equivalent to the command line options.
|
|
|
|
|
|
|
|
* src/options.cc (Options::long_usage): Rename options -H, -N, -l, -G.
|
|
|
|
(long_options): Add --hash-function-name, --lookup-function-name,
|
|
|
|
--compare-lengths.
|
|
|
|
* doc/gperf.texi (Output Details): Rename options -H, -N, -l, -G.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
* src/options.cc (DEFAULT_DELIMITERS): Remove newline.
|
|
|
|
* src/options.cc (Options::long_usage): Change default --delimiters.
|
|
|
|
* doc/gperf.texi (Input Details): Likewise.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
* doc/gperf.texi: Move description of option -l from section
|
|
|
|
Algorithmic Details to section Output Details.
|
|
|
|
* src/options.cc (Options::long_usage): Likewise.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
2002-11-12 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.h (Output::get_output_file_name): New method.
|
|
|
|
(Output::_output_file_name): New field.
|
|
|
|
* src/options.icc (Options::get_output_file_name): New method.
|
|
|
|
* src/options.cc (Options::long_usage): Document option --output-file.
|
|
|
|
(Options::Options): Initialize _output_file_name.
|
|
|
|
(long_options): Add --output-file.
|
|
|
|
(Options::parse_options): Handle it.
|
|
|
|
* src/main.cc (main): Open the output file if given by name.
|
|
|
|
* doc/gperf.texi (Output File): New section.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
2002-11-10 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/input.cc (pretty_input_file_name): New function.
|
|
|
|
(read_input): Use it in all error and warning messages.
|
|
|
|
|
|
|
|
* src/keyword.h (Keyword::_lineno): New field.
|
|
|
|
* src/input.h (Input::_struct_decl_lineno): New field.
|
|
|
|
* src/input.cc (Input::read_input): Set _struct_decl_lineno. Fill
|
|
|
|
each keyword's _lineno field.
|
|
|
|
* src/main.cc (main): Pass _struct_decl_lineno from Input to Output.
|
|
|
|
* src/output.h (Output::Output) Add struct_decl_lineno argument.
|
|
|
|
(Output::_struct_decl_lineno): New field.
|
|
|
|
* src/output.cc (Output::Output) Add struct_decl_lineno argument.
|
|
|
|
(output_keyword_entry): Emit #line directive before table entry.
|
|
|
|
(Output::output): Emit #line directive before _struct_decl.
|
|
|
|
|
|
|
|
Fix memory leaks.
|
|
|
|
* src/keyword.h (empty_string): New declaration.
|
|
|
|
* src/keyword.cc (empty_string): New variable.
|
|
|
|
* src/input.h (Input::_input): Make public.
|
|
|
|
(Input::_input_end): New field.
|
|
|
|
* src/input.cc (read_input): When removing leading whitespace from
|
|
|
|
struct_decl, reallocate it. For rest, use empty_string instead of "".
|
|
|
|
Set _input_end.
|
|
|
|
(Input::~Input): Delete _struct_decl, _struct_tag, _return_type.
|
|
|
|
* src/search.cc (Search::prepare): When removing an element from
|
|
|
|
the keyword list, delete the list node.
|
|
|
|
(Search::~Search): Delete _occurrences, _asso_values.
|
|
|
|
* src/main.cc (main): Between Search::~Search and Input::~Input,
|
|
|
|
destroy the keyword list.
|
|
|
|
|
|
|
|
Rewrite the input routines.
|
|
|
|
* src/input.h: Don't include read-line.h.
|
|
|
|
(Input): Don't inherit from class Read_Line.
|
|
|
|
(Input::read_keys, Input::strcspn, Input::set_output_types,
|
|
|
|
Input::get_array_type, Input::save_include_src,
|
|
|
|
Input::get_special_input): Remove declarations.
|
|
|
|
(Input::read_input): New declaration.
|
|
|
|
(Input::_struct_decl): Renamed from Input::_array_type.
|
|
|
|
(Input::_verbatim_declarations): Renamed from Input::_include_src.
|
|
|
|
(Input::_verbatim_code): Replaces Input::_additional_code.
|
|
|
|
* src/input.cc: Completely rewritten.
|
|
|
|
* src/output.h (Output::Output): Update the verbatim_* arguments.
|
|
|
|
(Output::_struct_decl): Renamed from Output::_array_type.
|
|
|
|
(Output::_verbatim_declarations): Renamed from Output::_include_src.
|
|
|
|
(Output::_verbatim_code): Replaces Output::_additional_code.
|
|
|
|
* src/output.cc (Output::Output): Update the verbatim_* arguments.
|
|
|
|
(Output::output): Output the verbatim_* code pieces with #line.
|
|
|
|
* src/main.cc (main): Call Input::read_input instead of
|
|
|
|
Input::read_keys. Update Output::Output arguments.
|
|
|
|
* src/read-line.h: Remove file.
|
|
|
|
* src/read-line.cc, src/read-line.icc: Remove files.
|
|
|
|
* src/Makefile.in (OBJECTS): Remove read-line.o.
|
|
|
|
(READ_LINE_H): Remove variable.
|
|
|
|
(INPUT_H): Update.
|
|
|
|
(read-line.o): Remove rule.
|
|
|
|
* doc/gperf.texi (Declarations): Correct the example.
|
|
|
|
(Keywords): Mention that lines starting with % are forbidden here.
|
|
|
|
* tests/c-parse.exp: Update.
|
|
|
|
* tests/cplusplus.exp: Update.
|
|
|
|
* tests/gpc.exp: Update.
|
|
|
|
* tests/java.exp: Update.
|
|
|
|
* tests/objc.exp: Update.
|
|
|
|
* tests/test-4.exp: Update.
|
|
|
|
|
|
|
|
* src/options.h (Options::get_input_file_name): New declaration.
|
|
|
|
(Options::_input_file_name): New field.
|
|
|
|
* src/options.icc (Options::get_input_file_name): New method.
|
|
|
|
* src/options.cc (Options::Options): Initialize _input_file_name.
|
|
|
|
(Options::parse_options): Don't open input file, only store it in
|
|
|
|
_input_file_name.
|
|
|
|
* src/main.cc (main): Open input file here.
|
|
|
|
Print an error message upon write error on the output file.
|
|
|
|
|
|
|
|
Upgrade to autoconf-2.52.
|
|
|
|
* configure.in: Use AC_CONFIG_SUBDIRS instead of AC_OUTPUT_SUBDIRS.
|
|
|
|
* Makefile.devel (configure, lib/configure, src/configure,
|
|
|
|
tests/configure, doc/configure): Use autoconf-2.52.
|
|
|
|
|
|
|
|
2002-11-09 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* doc/gperf.texi: Talk about "bytes" instead of "characters". Talk
|
|
|
|
about "keywords", not "keys". Talk about "input file", not "keyfile".
|
|
|
|
(@menu): Fix a menu entry.
|
|
|
|
(Contributors): Don't mention cperf.
|
|
|
|
(Motivation): Fix an off-by-one error in the definition of "minimal".
|
|
|
|
Mention GNU Java. Recommend http URL instead of anonymous ftp.
|
|
|
|
(Search Structures): Mention GNU Java.
|
|
|
|
(Output Format): Drop reference to node 'Implementation'.
|
|
|
|
(Output Details): Talk about "slot-name" instead of "key name".
|
|
|
|
(Algorithmic Details): Talk about "selected byte positons", not
|
|
|
|
"key positions". Upper limit is now 255. Explain a third reason
|
|
|
|
why duplicates can occur. Describe negative effects of
|
|
|
|
--occurrence-sort.
|
|
|
|
(Implementation): Remove chapter.
|
|
|
|
|
|
|
|
2002-11-07 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/bool-array.cc (Bool_Array::~Bool_Array): Free _storage_array.
|
|
|
|
* src/search.cc (Search::~Search): Free _union_set, _determined.
|
|
|
|
|
|
|
|
* tests/Makefile.in (check-test): Don't redirect stderr.
|
|
|
|
|
|
|
|
2002-11-05 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/keyword-list.h (mergesort_list): New declarations.
|
|
|
|
* src/keyword-list.cc (Keyword_Comparison): New type.
|
|
|
|
(merge, mergesort_list): New functions, moved here from search.cc.
|
|
|
|
* src/search.h (Search::merge, Search::merge_sort): Remove methods.
|
|
|
|
(Search::_occurrence_sort, Search::_hash_sort): Remove fields.
|
|
|
|
* src/search.cc (Search::merge, Search::merge_sort): Remove methods.
|
|
|
|
(greater_by_occurrence, less_by_hash_value): New functions.
|
|
|
|
(Search::reorder, Search::sort): Use mergesort_list.
|
|
|
|
|
|
|
|
2002-11-04 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.h (Options::_asso_iterations): New field.
|
|
|
|
(Options::get_asso_iterations): New method declaration.
|
|
|
|
* src/options.icc (Options::get_asso_iterations): New method.
|
|
|
|
* src/options.cc (Options::short_usage): Mention j<jump> and m<num>.
|
|
|
|
(Options::long_usage): Document option -m.
|
|
|
|
(Options::Options): Initialize _asso_iterations.
|
|
|
|
(Options::~Options): Print _asso_iterations too.
|
|
|
|
(long_options): Add --multiple-iterations.
|
|
|
|
(Options::parse_options): Handle option -m.
|
|
|
|
* src/keyword-list.h (copy_list, delete_list): New declarations.
|
|
|
|
* src/keyword-list.cc (copy_list, delete_list): New functions.
|
|
|
|
* src/search.h (Search::_initial_asso_value, Search::_jump): New fields.
|
|
|
|
* src/search.cc (Search::prepare_asso_values): Initialize
|
|
|
|
_initial_asso_value and _jump here.
|
|
|
|
(Search::init_asso_values): Use _initial_asso_value.
|
|
|
|
(Search::try_asso_value): Use _jump.
|
|
|
|
(Search::optimize): If option -m was given, iterate over different
|
|
|
|
values for _initial_asso_value and _jump.
|
|
|
|
* doc/gperf.texi (Algorithmic Details): Document option -m.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
2002-11-03 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Bug fix: When option -j 0 was used without option -r, the output was
|
|
|
|
not random.
|
|
|
|
* src/search.h (Search::prepare_asso_values): New method declaration.
|
|
|
|
* src/search.cc (Search::prepare_asso_values): New method, extracted
|
|
|
|
from Search::init_asso_values. Call srand also when "-j 0" was given.
|
|
|
|
(Search::optimize): Call prepare_asso_values().
|
|
|
|
|
|
|
|
* src/hash-table.h (Hash_Table::_ignore_length, Hash_Table::equal):
|
|
|
|
Declare as const.
|
|
|
|
* src/hash-table.cc (Hash_Table::equal): Declare as const.
|
|
|
|
* src/input.h (Input::_factory): Declare as const.
|
|
|
|
* src/keyword-list.h (Keyword_List::first, KeywordExt_List::first):
|
|
|
|
Declare as const.
|
|
|
|
* src/keyword-list.icc (Keyword_List::first, KeywordExt_List::first):
|
|
|
|
Declare as const.
|
|
|
|
* src/output.h (Output::num_hash_values, Output::output_constants,
|
|
|
|
Output::output_hash_function, Output::output_keylength_table,
|
|
|
|
Output::output_keyword_table, Output::output_lookup_array,
|
|
|
|
Output::output_lookup_tables, Output::output_lookup_function_body,
|
|
|
|
Output::output_lookup_function, Output::_array_type,
|
|
|
|
Output::_additional_code, Output::_include_src, Output::_total_keys,
|
|
|
|
Output::_total_duplicates, Output::_max_key_len, Output::_min_key_len):
|
|
|
|
Declare as const.
|
|
|
|
* src/output.cc (Output::num_hash_values, Output::output_constants,
|
|
|
|
Output::output_hash_function, Output::output_keylength_table,
|
|
|
|
Output::output_keyword_table, Output::output_lookup_array,
|
|
|
|
Output::output_lookup_tables, Output::output_lookup_function_body,
|
|
|
|
Output::output_lookup_function): Declare as const.
|
|
|
|
* src/search.h (Search::merge, Search::merge_sort,
|
|
|
|
Search::compute_occurrence, Search::already_determined,
|
|
|
|
Search::keyword_list_length, Search::max_key_length,
|
|
|
|
Search::get_max_keysig_size, Search::compute_hash,
|
|
|
|
Search::sort_by_occurrence): Declare as const.
|
|
|
|
* src/search.cc (Search::merge, Search::merge_sort,
|
|
|
|
Search::compute_occurrence, Search::already_determined,
|
|
|
|
Search::keyword_list_length, Search::max_key_length,
|
|
|
|
Search::get_max_keysig_size, Search::compute_hash,
|
|
|
|
Search::sort_by_occurrence): Declare as const.
|
|
|
|
|
|
|
|
* src/output.cc (Output::output): Set char_to_index to a cast in all
|
|
|
|
cases. Avoids gcc warnings on the generated code.
|
|
|
|
|
|
|
|
* src/output.cc (Output_Enum): Prepend an underscore to field names.
|
|
|
|
(Output_Expr1): Likewise.
|
|
|
|
(Output::output_hash_function): Simplify the special case for "-k 1,$".
|
|
|
|
|
|
|
|
* src/search.h (Search::init_asso_values, Search::find_asso_values):
|
|
|
|
New declarations.
|
|
|
|
(Search::try_asso_value): Renamed from Search::affects_prev.
|
|
|
|
(Search::change_some_asso_value): Renamed from Search::change.
|
|
|
|
(Search::set_asso_max, Search::get_asso_max): Remove methods.
|
|
|
|
(Search::_union_set): New field.
|
|
|
|
* src/search.cc (Search::init_asso_values): New method, extracted
|
|
|
|
from Search::optimize.
|
|
|
|
(Search::try_asso_value): Renamed from Search::affects_prev. Take the
|
|
|
|
iteration count as argument.
|
|
|
|
(Search::change_some_asso_value): Renamed from Search::change. Don't
|
|
|
|
make union_set static. Don't increment _fewest_collisions here.
|
|
|
|
(Search::find_asso_values): New method, extracted from
|
|
|
|
Search::optimize.
|
|
|
|
(Search::optimize); Update.
|
|
|
|
|
|
|
|
* src/search.h (Search::compute_hash): Renamed from Search::hash.
|
|
|
|
(Search::compute_disjoint_union): Remove declaration.
|
|
|
|
(Search::sort_by_occurrence): Renamed from Search::sort_set.
|
|
|
|
* src/search.cc (Search::compute_hash): Renamed from Search::hash.
|
|
|
|
(compute_disjoint_union): Renamed from Search::compute_disjoint_union.
|
|
|
|
(Search::sort_by_occurrence): Renamed from Search::sort_set.
|
|
|
|
(Search::change): Simplify loop.
|
|
|
|
|
|
|
|
* src/search.h (Search::clear_determined): New declaration.
|
|
|
|
* src/search.cc (Search::clear_determined): New method.
|
|
|
|
(Search::already_determined): Optimize.
|
|
|
|
(Search::reorder): Even when the next keyword after the current one
|
|
|
|
is completely determined, move all determined keywords after the
|
|
|
|
current one.
|
|
|
|
|
|
|
|
Compute the occurrences after removal of duplicates, not before.
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars): Remove occurrences
|
|
|
|
argument.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars): Likewise.
|
|
|
|
* src/search.cc (Search::prepare): Reorder the code. Compute the
|
|
|
|
occurrences after removal of duplicates.
|
|
|
|
(Search::merge_sort): Optimize the loop.
|
|
|
|
(Search::compute_occurrence): Renamed from Search::get_occurrence.
|
|
|
|
* src/search.h (Search::compute_occurrence): Renamed from
|
|
|
|
Search::get_occurrence.
|
|
|
|
* tests/chill.exp: Regenerated.
|
|
|
|
|
|
|
|
Bug fix: The hash table could fail to detect duplicates, between
|
|
|
|
keywords of different length, when option -n (option[NOLENGTH]) was
|
|
|
|
given.
|
|
|
|
* src/hash-table.h (Hash_Table::Hash_Table): Pass table size, not
|
|
|
|
vector and vector size as arguments.
|
|
|
|
(Hash_Table::_log_size): New field.
|
|
|
|
(Hash_Table::equal): New declaration.
|
|
|
|
* src/hash-table.cc (size_factor): New variable.
|
|
|
|
(Hash_Table::Hash_Table): Pass table size, not vector and vector size
|
|
|
|
as arguments. Allocate the vector here.
|
|
|
|
(Hash_Table::~Hash_Table): Deallocate the vector here.
|
|
|
|
(Hash_Table::equal): New function.
|
|
|
|
(Hash_Table::insert): Use it. Don't use item->_allchars_length for the
|
|
|
|
increment if _ignore_length is true.
|
|
|
|
* src/search.cc (TABLE_MULTIPLE): Remove variable.
|
|
|
|
(Search::prepare): Update.
|
|
|
|
|
|
|
|
2002-11-02 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
Provide documentation also in PDF format.
|
|
|
|
* doc/Makefile.in (pdfdir, TEXI2PDF): New variables.
|
|
|
|
(all): Depend on pdf.
|
|
|
|
(pdf, gperf.pdf): New rules.
|
|
|
|
(maintainer-clean): Remove the PDF file.
|
|
|
|
|
|
|
|
* src/keyword-list.icc: New file, extracted from keyword-list.h.
|
|
|
|
* src/keyword-list.h: Include keyword-list.icc. Move inline methods
|
|
|
|
to there.
|
|
|
|
* src/keyword-list.cc: Include keyword-list.icc.
|
|
|
|
* src/Makefile.in (KEYWORD_LIST_H): Add keyword-list.icc.
|
|
|
|
|
|
|
|
* lib/hashpjw.h (hashpjw): Change argument type to 'unsigned char *'.
|
|
|
|
* lib/hash.cc (hashpjw): Likewise.
|
|
|
|
* src/keyword.icc: New file.
|
|
|
|
* src/keyword.h: Include keyword.icc.
|
|
|
|
(KeywordExt::_selchars): Change type to 'unsigned char *'.
|
|
|
|
* src/keyword.cc: Include keyword.icc.
|
|
|
|
(Keyword::Keyword, KeywordExt::KeywordExt): Move to keyword.icc.
|
|
|
|
(sort_char_set): Change argument type to 'unsigned char *'.
|
|
|
|
(KeywordExt::init_selchars): Update.
|
|
|
|
* src/search.h (Search::compute_disjoint_union): Change argument types
|
|
|
|
to 'unsigned char *'.
|
|
|
|
(Search::sort_set): Likewise.
|
|
|
|
(Search::affects_prev): Change argument type to 'unsigned char'.
|
|
|
|
* src/search.cc (Search::prepare): Initialize _duplicate_link here.
|
|
|
|
(Search::get_occurrence, Search::set_determined,
|
|
|
|
Search::already_determined, Search::hash): Update.
|
|
|
|
(Search::compute_disjoint_union): Change argument types to
|
|
|
|
'unsigned char *'.
|
|
|
|
(Search::sort_set): Likewise.
|
|
|
|
(Search::affects_prev): Change argument type to 'unsigned char'.
|
|
|
|
(Search::change): Update.
|
|
|
|
* src/Makefile.in (KEYWORD_H): Add keyword.icc.
|
|
|
|
|
|
|
|
* src/options.cc (Options::parse_options): Fix error message.
|
|
|
|
|
|
|
|
* src/read-line.h (Read_Line::Read_Line): Make FILE* argument
|
|
|
|
mandatory. Move body to read-line.icc.
|
|
|
|
* src/read-line.icc (Read_Line::Read_Line): New constructor.
|
|
|
|
* src/input.h (Input::Input): Add FILE* argument.
|
|
|
|
* src/input.cc (Input::Input): Likewise.
|
|
|
|
* src/main.cc (main): Pass stdin to Input constructor.
|
|
|
|
|
|
|
|
* src/options.h (DEFAULTCHARS): Remove.
|
|
|
|
(Positions::MAX_KEY_POS): Set to 255.
|
|
|
|
(Positions::_positions): Increase array size.
|
|
|
|
(PositionIterator::EOS): Set to -1.
|
|
|
|
(PositionIterator::_index): Change type to 'unsigned int'.
|
|
|
|
* src/options.icc (Positions::Positions): Don't store
|
|
|
|
PositionIterator::EOS.
|
|
|
|
(PositionIterator::next): Produce PositionIterator::EOS here.
|
|
|
|
* src/options.cc (Options::long_usage): Use MAX_KEY_POS, not
|
|
|
|
MAX_KEY_POS-1.
|
|
|
|
(PositionStringParser): Rename field _size to _in_range. Rename
|
|
|
|
field _curr_value to _range_curr_value. Rename field _upper_bound
|
|
|
|
to _range_upper_bound.
|
|
|
|
(PositionStringParser::nextPosition): Comments.
|
|
|
|
(Options::Options): Update.
|
|
|
|
(Options::~Options): Update.
|
|
|
|
(long_options): Use NULL, not 0.
|
|
|
|
(Options::parse_options): Set BAD_VALUE to -2; -1 is now EOS. Bug fix:
|
|
|
|
Check against array overflow when more than MAX_KEY_POS positions are
|
|
|
|
given. Don't store PositionIterator::EOS.
|
|
|
|
Check against extra arguments before opening the input file.
|
|
|
|
* src/output.cc (Output::output_hash_function): Change test which
|
|
|
|
was for option[DEFAULTCHARS].
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
* src/options.h (Options::get_delimiters): Renamed from
|
|
|
|
Options::get_delimiter.
|
|
|
|
* src/options.icc (Options::get_delimiters): Renamed from
|
|
|
|
Options::get_delimiter.
|
|
|
|
* src/input.cc (Input::read_keys): Update.
|
|
|
|
|
|
|
|
Bug fix.
|
|
|
|
* src/options.cc (Options::print_options): Escape backquote inside
|
|
|
|
double-quoted strings.
|
|
|
|
|
|
|
|
Bug fix.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars): Avoid comparison with
|
|
|
|
uninitialized member variable. Found with 'valgrind'.
|
|
|
|
|
|
|
|
* src/version.cc: Include version.h.
|
|
|
|
* src/Makefile.in (OBJECTS): Reorder.
|
|
|
|
(KEYWORD_H, KEYWORD_LIST_H, INPUT_H, SEARCH_H, OUTPUT_H): New
|
|
|
|
variables.
|
|
|
|
(HASH_TABLE_H): Update.
|
|
|
|
(options.o, read-line.o, keyword.o, keyword-list.o, input.o, search.o,
|
|
|
|
output.o, main.o): Update dependencies.
|
|
|
|
|
|
|
|
* src/vectors.h: Remove file.
|
|
|
|
* src/vectors.cc: Remove file.
|
|
|
|
* src/search.h: Don't include vectors.h.
|
|
|
|
(Search): Don't inherit from Vectors. New fields _alpha_size,
|
|
|
|
_occurrences, _asso_values.
|
|
|
|
(Search::_determined, Search::get_occurrence, Search::set_determined,
|
|
|
|
Search::already_determined, Search::hash, Search::sort_set): Make
|
|
|
|
nonstatic.
|
|
|
|
* src/search.cc (Search::Search): Initialize _alpha_size, _occurrences,
|
|
|
|
_asso_values, _determined.
|
|
|
|
(Search::optimize, Search::~Search): Update.
|
|
|
|
* src/output.h: Don't include vectors.h.
|
|
|
|
(Output): Remove field _v. New fields _alpha_size, _occurrences,
|
|
|
|
_asso_values.
|
|
|
|
(Output::Output): Replace Vectors* argument with alpha_size,
|
|
|
|
occurrences, asso_values.
|
|
|
|
* src/output.cc (Output::Output): Replace Vectors* argument with
|
|
|
|
alpha_size, occurrences, asso_values.
|
|
|
|
(Output::output_hash_function): Update.
|
|
|
|
* src/main.cc (main): Don't set Vectors::ALPHA_SIZE.
|
|
|
|
Pass _alpha_size, _occurrences, _asso_values from Search to Output.
|
|
|
|
* src/keyword.h: Don't include vectors.h.
|
|
|
|
* src/Makefile.in (OBJECTS): Remove vectors.o.
|
|
|
|
(VECTORS_H): Remove variable.
|
|
|
|
(vectors.o): Remove rule.
|
|
|
|
|
|
|
|
* src/search.h: New file, combines src/key-list.h, src/gen-perf.h.
|
|
|
|
* src/search,cc: New file, combines src/key-list.cc, src/gen-perf.cc.
|
|
|
|
* src/key-list.h: Remove file.
|
|
|
|
* src/key-list.cc: Remove file.
|
|
|
|
* src/gen-perf.h: Remove file.
|
|
|
|
* src/gen-perf.cc: Remove file.
|
|
|
|
* src/main.cc (KeywordExt_Factory): Moved here from gen-perf.cc.
|
|
|
|
(main): Inline some code from gen-perf.cc.
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars): Take the occurrences
|
|
|
|
vector as argument.
|
|
|
|
* src/keyword.cc (KeywordExt::init_selchars): Take the occurrences
|
|
|
|
vector as argument.
|
|
|
|
* src/input.cc (Input::set_output_types): Initialize _array_type,
|
|
|
|
_return_type, _struct_tag.
|
|
|
|
(Input::read_keys): Initialize _additional_code.
|
|
|
|
* src/Makefile.in (OBJECTS): Add search.o.
|
|
|
|
Remove key-list.o, gen-perf.o.
|
|
|
|
(KEY_LIST_H, GEN_PERF_H): Remove variables.
|
|
|
|
(gen-perf.o, key-list.o): Remove rules.
|
|
|
|
(search.o): New rule.
|
|
|
|
|
|
|
|
* *, */*: Update copyright notice to GPL version 2.
|
|
|
|
|
|
|
|
* src/keyword-list.h (Keyword_List): New class.
|
|
|
|
(KeywordExt_List): Inherit from it.
|
|
|
|
* src/keyword-list.cc (Keyword_List::Keyword_List): New constructor.
|
|
|
|
(KeywordExt_List::KeywordExt_List): Update.
|
|
|
|
* src/input.h (Input::Input): Add Keyword_Factory argument.
|
|
|
|
(Input::_factory): New field.
|
|
|
|
(Input::_head): Change type to Keyword_List*.
|
|
|
|
(Input::parse_line): New declaration.
|
|
|
|
* src/input.cc (Input::Input): New constructor.
|
|
|
|
(Input::parse_line): Renamed from parse_line. Use the _factory.
|
|
|
|
(Input::read_keys): Update.
|
|
|
|
* src/key-list.cc (KeywordExt_Factory): New class.
|
|
|
|
(Key_List::read_keys): Pass a KeywordExt_Factory as Input constructor
|
|
|
|
argument.
|
|
|
|
|
|
|
|
Avoid g++ -Wold-style-cast warnings.
|
|
|
|
* src/bool-array.icc: Use new-style casts.
|
|
|
|
* src/gen-perf.cc: Likewise.
|
|
|
|
* src/input.cc: Likewise.
|
|
|
|
* src/key-list.cc: Likewise.
|
|
|
|
* src/keyword.cc: Likewise.
|
|
|
|
* src/options.cc: Likewise.
|
|
|
|
* src/output.cc: Likewise.
|
|
|
|
* src/hash-table.cc: Likewise. Remove (char *) cast in memset argument.
|
|
|
|
|
|
|
|
* src/keyword-list.h (KeywordExt_List): Don't inherit from KeywordExt.
|
|
|
|
(KeywordExt_List::KeywordExt_List): Take a KeywordExt* as argument.
|
|
|
|
(KeywordExt_List::_car): New field.
|
|
|
|
(KeywordExt_List::first): Use it.
|
|
|
|
* src/keyword-list.cc (KeywordExt_List::KeywordExt_List): Take a
|
|
|
|
KeywordExt* as argument.
|
|
|
|
* src/input.cc (parse_line): Create the KeywordExt separately.
|
|
|
|
|
|
|
|
Start using bool.
|
|
|
|
* src/bool-array.h (Bool_Array::set_bit): Change return type to bool.
|
|
|
|
* src/bool-array.icc (Bool_Array::set_bit): Likewise.
|
|
|
|
* src/gen-perf.h (Gen_Perf::affects_prev): Likewise.
|
|
|
|
* src/gen-perf.cc (Gen_Perf::affects_prev): Likewise.
|
|
|
|
* src/hash-table.h (Hash_Table::_ignore_length): Change type to bool.
|
|
|
|
(Hash_Table::Hash_Table): Change 3rd argument type to bool.
|
|
|
|
* src/hash-table.cc (Hash_Table::Hash_Table): Likewise.
|
|
|
|
* src/input.h (Input::_additional_code): Change type to bool.
|
|
|
|
* src/input.cc (Input::read_keys): Update.
|
|
|
|
* src/key-list.h (Key_List::_occurrence_sort, Key_List::_hash_sort,
|
|
|
|
Key_List::_additional_code): Change type to bool.
|
|
|
|
(Key_List::_determined): Change element type to bool.
|
|
|
|
(Key_List::already_determined): Change return type to bool.
|
|
|
|
* src/key-list.cc (Key_List::_determined): Change element type to bool.
|
|
|
|
(Key_List::set_determined): Update.
|
|
|
|
(Key_List::already_determined): Change return type to bool.
|
|
|
|
(Key_List::reorder, Key_List::sort, Key_List::Key_List): Update.
|
|
|
|
* src/options.h (Positions::sort): Change return type to bool.
|
|
|
|
(Options::operator[]): Likewise.
|
|
|
|
* src/options.icc (Positions::sort): Change return type to bool.
|
|
|
|
(Options::operator[]): Likewise.
|
|
|
|
* src/output.h (Output::Output): Change 5th argument type to bool.
|
|
|
|
(Output::_additional_code): Change type to bool.
|
|
|
|
* src/output.cc (Output::Output): Change 5th argument type to bool.
|
|
|
|
|
|
|
|
2002-10-16 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/*.h: Align all member names at column 24.
|
|
|
|
|
|
|
|
2002-10-15 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/input.h: New file.
|
|
|
|
* src/input.cc: New file, extracted from key-list.cc.
|
|
|
|
* src/key-list.h (Key_List): Don't inherit from Read_Line.
|
|
|
|
(Key_List::get_special_input,
|
|
|
|
Key_List::save_include_src, Key_List::get_array_type,
|
|
|
|
Key_List::strcspn, Key_List::set_output_types): Remove methods.
|
|
|
|
* src/key-list.cc (Key_List::get_special_input,
|
|
|
|
Key_List::save_include_src, Key_List::get_array_type,
|
|
|
|
Key_List::strcspn, Key_List::set_output_types, parse_line): Move to
|
|
|
|
src/input.cc.
|
|
|
|
(Key_List::read_keys): Use Input::read_keys.
|
|
|
|
(Key_List::Key_List): Update.
|
|
|
|
* src/gen-perf.cc: Update.
|
|
|
|
* src/Makefile.in (OBJECTS): Add input.o.
|
|
|
|
(input.o): New rule.
|
|
|
|
|
|
|
|
2002-10-14 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/options.cc: Don't include "vector.h".
|
|
|
|
(Options::parse_options): Don't initialize Vectors::ALPHA_SIZE here.
|
|
|
|
* src/vectors.cc (Vectors::ALPHA_SIZE): Don't initialize here.
|
|
|
|
* src/gen-perf.cc (Gen_Perf::Gen_Perf): Initialize Vectors::ALPHA_SIZE.
|
|
|
|
|
|
|
|
* src/options.h (Positions): New class.
|
|
|
|
(PositionIterator): New class.
|
|
|
|
(Options::parse_options): Renamed from Options::operator().
|
|
|
|
(Options::get_asso_max, Options::set_asso_max): Move to class Key_List.
|
|
|
|
(Options::reset, Options::get): Remove, replaced by class
|
|
|
|
PositionIterator.
|
|
|
|
(Options::get_initial_asso_value): Renamed from Options::initial_value.
|
|
|
|
(Options::key_sort): Remove, replaced by Positions::sort.
|
|
|
|
(Options): Make all fields and methods non-static.
|
|
|
|
* src/options.icc (Positions::Positions, Positions::operator[],
|
|
|
|
Positions::get_size, Positions::pointer, Positions::set_size,
|
|
|
|
Positions::sort, PositionIterator::PositionIterator,
|
|
|
|
PositionIterator::next): New methods.
|
|
|
|
(Options::get_initial_asso_value): Renamed from Options::initial_value.
|
|
|
|
(Options::get_size_multiple): New method.
|
|
|
|
(Options::get_key_positions): New method.
|
|
|
|
(Options::get_max_keysig_size): Implement using _key_positions.
|
|
|
|
* src/options.cc (Options::long_usage): Split big string into small
|
|
|
|
pieces.
|
|
|
|
(PositionStringParser): Prefix field names with _.
|
|
|
|
(Options::Options): Update.
|
|
|
|
(Options::~Options): Fix explanation of of _size_multiple. Don't print
|
|
|
|
_key_positions if it is effectively ignored.
|
|
|
|
(Options::parse_options): Renamed from Options::operator(). Update.
|
|
|
|
* src/key-list.h (Key_List): New field _size. New methods get_asso_max,
|
|
|
|
set_asso_max, get_max_keysig_size.
|
|
|
|
* src/key-list.cc (Key_List::read_keys): Don't make side effects on
|
|
|
|
options.
|
|
|
|
(Key_List::dump): Use Key_List::get_max_keysig_size() instead of
|
|
|
|
Options::get_max_keysig_size().
|
|
|
|
(Key_List::get_max_keysig_size): New function.
|
|
|
|
* src/hash-table.cc (Hash_Table::~Hash_Table): Compute the field
|
|
|
|
width on the fly if option[ALLCHARS].
|
|
|
|
* src/gen-perf.cc (Gen_Perf::Gen_Perf): Update,
|
|
|
|
Use Options::get_size_multiple() instead of Options::get_asso_max().
|
|
|
|
Use Key_List::get_asso_max() instead of Options::get_asso_max(). Use
|
|
|
|
Key_List::get_max_keysig_size() instead of
|
|
|
|
Options::get_max_keysig_size().
|
|
|
|
(Gen_Perf::affects_prev): Likewise.
|
|
|
|
(Gen_Perf::change): Likewise.
|
|
|
|
* src/keyword.cc: Update.
|
|
|
|
* src/main.cc: Update.
|
|
|
|
* src/output.cc: Update.
|
|
|
|
* tests/test-6.exp: Update.
|
|
|
|
|
|
|
|
2002-10-13 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/bool-array.*: Some polishing.
|
|
|
|
|
|
|
|
* src/options.h (Options::operator=, Options::operator!=): Remove
|
|
|
|
unused methods.
|
|
|
|
* src/options.icc (Options::operator=, Options::operator!=): Remove.
|
|
|
|
|
|
|
|
* src/*.h: Prefix all field names with _.
|
|
|
|
* src/*.cc, src/*.icc: Update.
|
|
|
|
|
|
|
|
* src/*: Simplify declarations of functions without arguments.
|
|
|
|
|
|
|
|
2002-10-04 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/output.h: New file, extracted from key-list.h.
|
|
|
|
* src/output.cc: New file, extracted from key-list.cc.
|
|
|
|
* src/key-list.h (Key_List): Make some fields protected. Move output
|
|
|
|
routines to src/output.h.
|
|
|
|
* src/key-list.cc: Move output routines to src/output.cc.
|
|
|
|
* src/gen-perf.cc (Gen_Perf::doit_all): Use class Output.
|
|
|
|
* src/Makefile.in (OBJECTS): Add output.o.
|
|
|
|
(output.o): New rule.
|
|
|
|
|
|
|
|
2002-10-03 Bruno Haible <bruno@clisp.org>
|
|
|
|
|
|
|
|
* src/iterator.h: Remove file.
|
|
|
|
* src/iterator.cc: Remove file.
|
|
|
|
* src/options.cc: (PositionStringParser): New class, taken from old
|
|
|
|
iterator.cc.
|
|
|
|
* src/Makefile.in (OBJECTS): Remove iterator.o.
|
|
|
|
(ITERATOR_H): Remove variable.
|
|
|
|
(iterator.o): Remove rule.
|
|
|
|
|
|
|
|
* src/keyword-list.h: New file.
|
|
|
|
* src/keyword-list.cc: New file.
|
|
|
|
* src/list-node.h: Remove file.
|
|
|
|
* src/list-node.cc: Remove file.
|
|
|
|
* src/keyword.h (KeywordExt::init_selchars): New declaration.
|
|
|
|
* src/keyword.cc (sort_char_set, KeywordExt::init_selchars): New, from
|
|
|
|
old list-node.cc.
|
|
|
|
* src/gen-perf.cc: Replace List_Node by KeywordExt or KeywordExt_List,
|
|
|
|
as appropriate.
|
|
|
|
* src/hash-table.h: Likewise.
|
|
|
|
* src/key-list.h: Likewise.
|
|
|
|
* src/key-list.cc: Likewise.
|
|
|
|
* src/Makefile.in (OBJECTS): Remove list-node.o, add keyword-list.o.
|
|
|
|
(LIST_NODE_H): Remove macro.
|
|
|
|
(list-node.o): Remove rule.
|
|
|
|
(keyword-list.o): New rule.
|
|
|
|
|
|
|
|
* src/keyword.h (KeywordExt): New class.
|
|
|
|
* src/keyword.cc (KeywordExt): New constructor.
|
|
|
|
* src/list-node.h (List_Node): Inherit from KeywordExt.
|
|
|
|
* src/list-node.cc: Update.
|
|
|
|
* src/gen-perf.cc: Update.
|
|
|
|
* src/hash-table.cc: Update.
|
|
|
|
* src/key-list.cc: Update.
|
|
|
|
(output_keyword_entry): Change argument type to KeywordExt*.
|
|
|
|
|
|
|
|
* src/keyword.h: New file.
|
|
|
|
* src/keyword.cc: New file.
|
|
|
|
* src/list-node.h (List_Node): Extend Keyword.
|
|
|
|
* src/list-node.cc: Update.
|
|
|
|
* src/gen-perf.cc: Update.
|
|
|
|
* src/hash-table.cc: Update.
|
|
|
|
* src/key-list.cc: Update.
|
|
|
|
* src/Makefile.in (OBJECTS): Add keyword.o.
|
|
|
|
(keyword.o): New rule.
|
|
|
|
|
|
|
|
* src/key-list.cc (Key_List::read_keys): Allocate the memory for the
|
|
|
|
hash table using 'new'.
|
|
|
|
(Key_List::output_lookup_array): Allocate the memory for the duplicates
|
|
|
|
array using 'new'.
|
|
|
|
* src/options.h (LARGE_STACK_ARRAYS): Remove definition.
|
|
|
|
* src/main.cc (main): Remove setrlimit call.
|
|
|
|
* src/configure.in: Don't test for unistd.h, sys/time.h,
|
|
|
|
sys/resource.h, getrlimit, setrlimit.
|
|
|
|
|
|
|
|
* src/bool-array.h (Bool_Array): Make all members non-static.
|
|
|
|
Add an argument to the constructor. Remove init(), rename reset() to
|
|
|
|
clear(), rename find() to set_bit().
|
|
|
|
* src/bool-array.icc: Move init() code into the constructor.
|
|
|
|
Rename reset() to clear(), rename find() to set_bit().
|
|
|
|
* src/gen-perf.h (Gen_Perf): Add collision_detector member.
|
|
|
|
* src/gen-perf.cc: Update.
|
|
|
|
|
|
|
|
* src/gen-perf.h (Gen_Perf::doit_all): Renamed from
|
|
|
|
Gen_Perf::operator ().
|
|
|
|
* src/gen-perf.cc (Gen_Perf::doit_all): Renamed from
|
|
|
|
Gen_Perf::operator ().
|
|
|
|
* src/main.cc: Update.
|
|
|
|
|
|
|
|
* src/read-line.h (Read_Line::read_next_line): Renamed from
|
|
|
|
Read_Line::get_line.
|
|
|
|
* src/read-line.icc: Likewise.
|
|
|
|
* src/read-line.cc: Update.
|
|
|
|
* src/key-list.cc: Update.
|
|
|
|
|
|
|
|
* lib/getline.h: New file.
|
|
|
|
* lib/getline.cc: New file.
|
|
|
|
* lib/Makefile.in (OBJECTS): Add getline.o.
|
|
|
|
(getline.o): New rule.
|
|
|
|
* src/read-line.h (Read_Line::readln_aux): Remove declaration.
|
|
|
|
* src/read-line.cc (Read_Line::readln_aux): Remove function.
|
|
|
|
* src/read-line.icc (Read_Line::get_line): Use ::get_line.
|
|
|
|
* src/options.h (LARGE_STACK): Remove macro.
|
|
|
|
|
|
|
|
* src/bool-array.h (STORAGE_TYPE): Remove type.
|
|
|
|
Use 'unsigned int' instead of STORAGE_TYPE.
|
|
|
|
* src/bool-array.cc: Likewise.
|
|
|
|
* src/bool-array.icc: Likewise.
|
|
|
|
* src/gen-perf.cc: Likewise.
|
|
|
|
|
|
|
|
* src/new.cc: Remove file.
|
|
|
|
* src/Makefile.in (OBJECTS): Remove new.o.
|
|
|
|
(new.o): Remove rule.
|
|
|
|
* src/configure.in: Remove test for HAVE_THROW_DECL.
|
|
|
|
* acconfig.h: Remove file.
|
|
|
|
|
|
|
|
* src/trace.h: Remove file.
|
|
|
|
* src/trace.cc: Remove file.
|
|
|
|
* src/Makefile.in (OBJECTS): Remove trace.o.
|
|
|
|
(TRACE_H): Remove variable.
|
|
|
|
(trace.o): Remove rule.
|
|
|
|
Update all dependencies.
|
|
|
|
* src/bool-array.h, src/bool-array.cc, src/bool-array.icc: Don't use T.
|
|
|
|
* src/gen-perf.cc: Likewise.
|
|
|
|
* src/hash-table.cc: Likewise.
|
|
|
|
* src/iterator.cc: Likewise.
|
|
|
|
* src/key-list.cc: Likewise.
|
|
|
|
* src/list-node.cc: Likewise.
|
|
|
|
* src/main.cc: Likewise.
|
|
|
|
* src/new.cc: Likewise.
|
|
|
|
* src/options.h, src/options.cc, src/options.icc: Likewise.
|
|
|
|
* src/read-line.h, src/read-line.cc, src/read-line.icc: Likewise.
|
|
|
|
|
|
|
|
* tests/Makefile.in: Use gperf option -I, to avoid gcc-3.x warnings.
|
|
|
|
* tests/test.c: Don't use gets(), to avoid warnings.
|
|
|
|
|
|
|
|
2001-08-02 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* doc/gperf.texi: Change bug report address to <bug-gnu-gperf@gnu.org>.
|
|
|
|
* README: Updated.
|
|
|
|
|
|
|
|
2000-12-18 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* src/configure.in: Add check for rand() in libm. Needed for BeOS.
|
|
|
|
* src/Makefile.in (LIBS): Use @GPERF_LIBM@ instead of hardwiring -lm.
|
|
|
|
|
|
|
|
2000-11-20 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* doc/help2man: Update to version 1.23.
|
|
|
|
|
2000-10-13 12:04:55 +00:00
|
|
|
2000-09-26 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* gperf-2.7.2 released.
|
|
|
|
|
|
|
|
* doc/gperf.texi: Add a second bug report address
|
|
|
|
<gperf-bugs@lists.sourceforge.net>.
|
|
|
|
* README: Updated.
|
|
|
|
|
|
|
|
2000-08-28 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* lib/getopt.h (struct option): Use "const" also when compiling in
|
|
|
|
C++ mode. Avoids warnings from Sun CC and HP-UX aCC.
|
|
|
|
|
|
|
|
* doc/Makefile.in (docdir): Change from $(datadir)/doc/@PACKAGE@ to
|
|
|
|
$(prefix)/doc/@PACKAGE@, following the newest GNU standards.
|
|
|
|
|
|
|
|
2000-08-20 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* src/version.cc: Bump version number to 2.7.2.
|
|
|
|
* doc/gperf.texi: Likewise.
|
|
|
|
|
|
|
|
* doc/texinfo.tex: Update to post-texinfo-4.0 version. @code in the
|
|
|
|
title page now chooses a larger font. The overall layout of the
|
|
|
|
text is denser.
|
|
|
|
|
|
|
|
* AUTHORS: New file.
|
|
|
|
|
|
|
|
* tests/Makefile.in (all): Add check-lang-utf8 and check-lang-ucs2.
|
|
|
|
(check-lang-utf8, check-lang-ucs2): New targets.
|
|
|
|
(clean): Remove lu8out and lu2out.
|
|
|
|
* tests/lang-utf8.gperf, tests/lang-utf8.exp: New files.
|
|
|
|
* tests/lang-ucs2.gperf, tests/test2.c, tests/lang-ucs2.in,
|
|
|
|
tests/lang-ucs2.exp: New files.
|
|
|
|
|
|
|
|
Allow the use of embedded NULs in keys.
|
|
|
|
* lib/hash.h (hashpjw): Add a length argument.
|
|
|
|
* lib/hash.cc (hashpjw): Likewise. Don't stop when encountering a NUL
|
|
|
|
character.
|
|
|
|
* src/hash-table.h (Hash_Table constructor): Add ignore_len argument.
|
|
|
|
(Hash_Table::ignore_length): New field.
|
|
|
|
(Hash_Table::insert): Renamed from Hash_Table::operator(). Remove
|
|
|
|
ignore_length argument.
|
|
|
|
* src/hash-table.cc (NIL): Remove macro.
|
|
|
|
(Hash_Table constructor): Add ignore_len argument. Use it to
|
|
|
|
initialize ignore_length.
|
|
|
|
(Hash_Table destructor): Specify explicit length of char_set and
|
|
|
|
key.
|
|
|
|
(Hash_Table::insert): Renamed from Hash_Table::operator(). Remove
|
|
|
|
ignore_length argument. Pass explicit length to hashpjw. Compare
|
|
|
|
char_set using memcmp, not strcmp.
|
|
|
|
* src/list-node.h (List_Node): Rename field length to key_length.
|
|
|
|
New field char_set_length.
|
|
|
|
(List_Node constructor): Accept key and rest, not the entire line.
|
|
|
|
* src/list-node.cc (List_Node constructor): Accept key and rest, not
|
|
|
|
the entire line. Don't NUL terminate key and char_set. Specify
|
|
|
|
explicit length of key. Initialize char_set_length field.
|
|
|
|
* src/key-list.cc: Include <ctype.h>.
|
|
|
|
(parse_line): New function.
|
|
|
|
(Key_List::read_keys): Call parse_line instead of new List_Node.
|
|
|
|
Pass option[NOLENGTH] to Hash_Table constructor, not
|
|
|
|
Hash_Table::insert. Specify explicit length of key and char_set.
|
|
|
|
(Key_List::get_occurrence): Use explicit length of char_set.
|
|
|
|
(Key_List::set_determined): Likewise.
|
|
|
|
(Key_List::already_determined): Likewise.
|
|
|
|
(output_string): Add length argument. Output unprintable characters
|
|
|
|
using octal escape sequence.
|
|
|
|
(output_keyword_entry): Use explicit length of key.
|
|
|
|
(Key_List::output_lookup_array): Specify explicit length of key.
|
|
|
|
(output_switch_case): Likewise.
|
|
|
|
(Key_List::dump): Likewise.
|
|
|
|
* src/gen-perf.h (Gen_Perf::compute_disjoint_union): Add two length
|
|
|
|
arguments.
|
|
|
|
* src/gen-perf.cc (Gen_Perf::compute_disjoint_union): Likewise. Don't
|
|
|
|
stop when encountering NUL characters. Don't NUL terminate the
|
|
|
|
result.
|
|
|
|
(Gen_Perf::hash): Use explicit length of char_set.
|
|
|
|
(Gen_Perf::change): Specify explicit length of key.
|
|
|
|
* doc/gperf.texi: Document it.
|
|
|
|
|
|
|
|
* doc/help2man: New file, help2man version 1.022.
|
|
|
|
* Makefile.devel (all): Add doc/gperf.1.
|
|
|
|
(doc/gperf.1): New target.
|
|
|
|
* doc/gperf.1: Automatically generated.
|
|
|
|
|
|
|
|
* mkinstalldirs: New file, from automake-1.4, grep-2.4.1, guile-1.4,
|
|
|
|
libtool-1.3.3, make-3.79.1, tar-1.13.
|
|
|
|
* src/Makefile.in (MKINSTALLDIRS): New variable.
|
|
|
|
(install, installdirs): Use it instead of mkdir.
|
|
|
|
* doc/Makefile.in (MKINSTALLDIRS): New variable.
|
|
|
|
(install, installdirs): Use it instead of mkdir.
|
|
|
|
|
|
|
|
* INSTALL: Update.
|
|
|
|
|
|
|
|
2000-08-19 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
|
|
|
|
|
|
|
* src/key-list.cc (Output_Compare_Memcmp): New class.
|
|
|
|
(Key_List::output_lookup_function): When option -l is given, use
|
|
|
|
memcmp instead of strcmp or strncmp.
|
|
|
|
|
|
|
|
* doc/gperf.texi: The bug report address is <bug-gnu-utils@gnu.org>.
|
|
|
|
The download address is ftp.gnu.org. Remove mention of -a and -g
|
|
|
|
options (now nops). Explain effect of -c option.
|
|
|
|
|
|
|
|
* doc/configure.in (PACKAGE): New variable.
|
|
|
|
* doc/Makefile.in (datadir, docdir): New variables.
|
|
|
|
(dvidir, htmldir): Change values.
|
|
|
|
(install, installdirs): Update.
|
|
|
|
|
|
|
|
* src/configure.in: Rename cache variable gp_cxx_throw_decl to
|
|
|
|
gp_cv_cxx_throw_decl.
|
|
|
|
|
|
|
|
* src/key-list.cc (Key_List::output_hash_function): When outputting
|
|
|
|
__inline, take advantage of C++ compilers which have inline.
|
|
|
|
|
|
|
|
* src/key-list.cc (Output_Compare_Strncmp::output_comparison):
|
|
|
|
After the call to strncmp, verify that expr2 is not longer than
|
|
|
|
`len'.
|
|
|
|
Reported by Carlo Wood <carlo@runaway.xs4all.nl>.
|
|
|
|
|
|
|
|
* src/key-list.cc (Key_List::output_lookup_function_body): Avoid
|
|
|
|
emitting the loop for dealing with duplicates if
|
|
|
|
total_duplicates == 0.
|
|
|
|
|
|
|
|
* src/key-list.cc (Key_List::read_keys): Don't accept an empty key.
|
|
|
|
|
|
|
|
* src/Makefile.in (install, installdirs, uninstall): Respect
|
|
|
|
$(DESTDIR).
|
|
|
|
* doc/Makefile.in (install, installdirs, uninstall): Likewise.
|
|
|
|
|
|
|
|
* src/options.cc (Options::print_options): Escape the arguments which
|
|
|
|
contain special characters.
|
|
|
|
|
|
|
|
* tests/c-parse.gperf: Updated from gcc-2.95.2/gcc/c-parse.gperf.
|
|
|
|
* tests/objc.gperf: New file, from gcc-2.95.2/gcc/objc/objc.gperf.
|
|
|
|
* tests/chill.gperf: New file, from gcc-2.95.2/gcc/ch/gperf.
|
|
|
|
* tests/cplusplus.gperf: New file, from gcc-2.95.2/gcc/cp/gxx.gperf.
|
|
|
|
* tests/gplus.gperf: Remove file.
|
|
|
|
* tests/java.gperf: New file, from gcc-2.95.2/gcc/java/keyword.gperf.
|
|
|
|
* tests/Makefile: Check them all.
|
|
|
|
* tests/c-parse.exp: Renamed from tests/test-1.exp.
|
|
|
|
* tests/modula2.exp: Renamed from tests/test-2.exp.
|
|
|
|
* tests/cplusplus.exp: Renamed from tests/test-3.exp.
|
|
|
|
* tests/gpc.exp: Renamed from tests/test-5.exp.
|
|
|
|
|
|
|
|
* src/key-list.cc (output_switch_case): Add trailing semicolon to
|
|
|
|
lengthptr assignment line. Fixes bug with -D and -S.
|
|
|
|
From Reini Urban <rurban@sbox.tu-graz.ac.at>. Also reported by
|
|
|
|
David Hunter.
|
|
|
|
* tests/Makefile.in (check-lang-syntax): Perform each test with -D
|
|
|
|
once without and once with duplicates.
|
|
|
|
|
|
|
|
* src/key-list.cc (output_keyword_entry): Avoid outputting a struct
|
|
|
|
initializer of the form {"key",}.
|
|
|
|
|
|
|
|
* src/iterator.cc: Don't include <stream.h>.
|
|
|
|
From Michael Deutschmann <ldeutsch@mail.netshop.net>.
|
|
|
|
|
|
|
|
* tests/Makefile.in (VALIDATE, check-lang-syntax): Use $(srcdir) where
|
|
|
|
appropriate.
|
|
|
|
Reported by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
|
|
|
|
|
|
|
|
* tests/validate: Don't run -traditional tests by default.
|
|
|
|
|
|
|
|
* src/main.cc (main): Check for write error on stdout before returning.
|
|
|
|
|
|
|
|
* src/Makefile.in (LDFLAGS): New definition, to catch the value given
|
|
|
|
at configure time.
|
|
|
|
|
|
|
|
Make the structure initializers customizable. Based on a patch by
|
|
|
|
Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
|
|
|
|
* src/options.h (Options::get_initializer_suffix,
|
|
|
|
Options::initializer_suffix): New declarations.
|
|
|
|
* src/options.icc (Options::get_initializer_suffix): New function.
|
|
|
|
* src/options.cc (DEFAULT_INITIALIZER_SUFFIX): New constant.
|
|
|
|
(Options::initializer_suffix): New variable.
|
|
|
|
(Options::short_usage): Document option "-F".
|
|
|
|
(Options::long_usage): Document option "-F".
|
|
|
|
(Options constructor): Initialize initializer_suffix.
|
|
|
|
(Options destructor): Dump initializer_suffix.
|
|
|
|
(long_options): Add option "-F".
|
|
|
|
(Options::operator()): Accept option "-F". Sets initializer_suffix.
|
|
|
|
* src/key-list.cc (output_keyword_blank_entries): Output
|
|
|
|
initializer_suffix.
|
|
|
|
* doc/gperf.texi: Document option "-F".
|
|
|
|
|
|
|
|
* COPYING: Replace with GPL version 2 (with new FSF address and Y2K
|
|
|
|
safe year format).
|
|
|
|
|
|
|
|
* doc/gpl.texinfo: New file.
|
|
|
|
* doc/gperf.texi: Document it.
|
|
|
|
* doc/Makefile.in (gperf.info, gperf.dvi, gperf.html, gperf_toc.html):
|
|
|
|
Update dependencies.
|
|
|
|
|
|
|
|
* doc/Makefile.in (MAKEINFO): Unset LANG while running makeinfo.
|
|
|
|
|
|
|
|
1998-05-20 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* doc/Makefile.in (gperf.dvi, clean): Remove gperf.cps.
|
|
|
|
(install, installdirs, uninstall): Don't install gperf.dvi. The
|
|
|
|
info and HTML documentations are sufficient for on-line use, and
|
|
|
|
users who wish to print the documentation (in PS or DVI format)
|
|
|
|
can do this directly off the source distribution.
|
|
|
|
(DVIPS): Use "-D600" instead of "-Pljfour", for portability.
|
|
|
|
|
|
|
|
1998-05-20 Akim Demaille <demaille@inf.enst.fr>
|
|
|
|
|
|
|
|
* doc/gperf.texi: Many modifications:
|
|
|
|
(Output Format): Declare `hash' and `in_word_set' as functions.
|
|
|
|
(Concept Index): New section.
|
|
|
|
(Title page): Use standard presentation.
|
|
|
|
(Top): Use @top instead of @unnumbered so that automatic master
|
|
|
|
update works.
|
|
|
|
(Motivation): Avoid spaces in @var.
|
|
|
|
(Options): Use the standard name ``Invoking ...''.
|
|
|
|
(Options): Declare also the long form of the options.
|
|
|
|
(Options): Remove redundant @itemize when @table is used.
|
|
|
|
|
|
|
|
1998-05-08 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
|
|
|
|
|
|
|
* aclocal.m4 (CL_PROG_INSTALL): Set cl_cv_path_install, not
|
|
|
|
ac_cv_path_install.
|
|
|
|
|
|
|
|
Sat May 2 13:20:54 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* gperf-2.7 released.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Sat May 2 12:31:51 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* src/version.cc (version_string): Remove the "(C++ version)" suffix.
|
|
|
|
It's redundant: the early C versions of gperf are called cperf.
|
|
|
|
Reported by Karl Berry.
|
|
|
|
* src/option.cc (Options::operator()): Trim the output of "gperf -v".
|
|
|
|
|
|
|
|
Thu Apr 16 13:22:16 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* lib/Makefile.in, src/Makefile.in: Don't use $(TARGET_ARCH).
|
|
|
|
Solaris "make" sets it to a value not understood by "cc".
|
|
|
|
|
|
|
|
Wed Apr 15 23:52:14 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* lib/Makefile.in, src/Makefile.in: Don't use implicit rules. Don't
|
|
|
|
use $<. AIX "make" and OSF/1 "make" have problems with both.
|
|
|
|
* src/gen-perf.cc, src/key-list.cc: Cast free() argument to char*,
|
|
|
|
otherwise it doesn't compile on SunOS 4.
|
|
|
|
* src/key-list.h: Declare structs outside of other declarations,
|
|
|
|
needed for OSF/1 cxx 5.5.
|
|
|
|
* lib/getopt.h: Use prototypes if __STDC__ || __cplusplus.
|
|
|
|
Don't give a prototype for getopt(), to avoid error on SunOS 4.
|
|
|
|
* lib/getopt.c: Declare strncmp, to avoid warnings.
|
|
|
|
|
|
|
|
Tue Apr 14 23:24:07 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* lib/GetOpt.{h,cc}: Remove files.
|
|
|
|
* lib/getopt.{h,c}, lib/getopt1.c: New files, from GNU libc.
|
|
|
|
* lib/configure.in (AC_INIT): Search for hash.cc, not GetOpt.cc.
|
|
|
|
* lib/Makefile.in (OBJECTS): Remove GetOpt.o, add getopt.o, getopt1.o.
|
|
|
|
(getopt.o, getopt1.o, hash.o): Use explicit building rules. Some
|
|
|
|
"make"s don't support to have both implicit rules for "%.o : %.c"
|
|
|
|
and "%.o : %.cc" in the same Makefile.
|
|
|
|
* lib/hash.{h,cc}: Remove #pragma; there are no templates here.
|
|
|
|
* src/option.h (Options::usage): Remove.
|
|
|
|
(Options::short_usage, Options::long_usage): Declare.
|
|
|
|
* src/option.cc (Options::usage): Remove.
|
|
|
|
(Options::short_usage, Options::long_usage): New functions.
|
|
|
|
(long_options): New array.
|
|
|
|
(Options::operator()): Use getopt_long instead of GetOpt::operator(),
|
|
|
|
change all references to GetOpt members.
|
|
|
|
|
|
|
|
* src/std-err.{h,cc}: Remove files.
|
|
|
|
* src/gen-perf.cc, src/key-list.cc, list-node.cc, new.cc, options.cc:
|
|
|
|
Call fprintf(stderr) instead of Std_Err::report_error().
|
|
|
|
* src/key-list.h, src/list-node.h, src/options.h: Don't use class
|
|
|
|
Std_Err any more.
|
|
|
|
* src/option.cc (program_name): New variable.
|
|
|
|
* src/Makefile.in: Remove STD_ERR_H.
|
|
|
|
(OBJECTS): Remove std-err.o.
|
|
|
|
|
|
|
|
Mon Mar 23 01:03:35 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* aclocal.m4, {lib,src,tests}/configure.in: Remove CL_CC_WORKS and
|
|
|
|
CL_CXX_WORKS, already contained in autoconf 2.12.
|
|
|
|
|
|
|
|
* src/gen-perf.cc, src/key-list.cc: Move some code from
|
|
|
|
Gen_Perf::Gen_Perf() to Key_List::output().
|
|
|
|
* src/Makefile.in: Update dependencies.
|
|
|
|
|
|
|
|
* src/options.{h,cc}: Remove option "-p".
|
|
|
|
* src/key-list.cc (Key_List::set_output_types): Rewrite.
|
|
|
|
(default_array_type, default_return_type): Remove.
|
|
|
|
* src/key-list.cc: Adjust "const" handling.
|
|
|
|
+ With option "-t" [TYPE], don't emit wrong code if there is no
|
|
|
|
space before the struct's opening brace.
|
|
|
|
|
|
|
|
Sun Mar 22 16:59:15 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* src/key-list.{h,cc}: Completely reorganized the output routines.
|
|
|
|
Rewrote from scratch the output_switch() function. Use classes
|
|
|
|
(Output_Constants, Output_Expr, Output_Compare) for abstraction.
|
|
|
|
In particular:
|
|
|
|
+ Don't emit trailing whitespace and spurious blank lines.
|
|
|
|
+ Adjust indentation of the arrays.
|
|
|
|
+ Don't emit commas at the end of array initializers and
|
|
|
|
struct initializers.
|
|
|
|
+ With option "-l" [LENTABLE], compare the length before
|
|
|
|
fetching the word from memory.
|
|
|
|
+ With option "-S" [SWITCH], emit the comparison code just once,
|
|
|
|
not once in every switch statement.
|
|
|
|
+ With option "-S" [SWITCH], choose the right switch statement
|
|
|
|
through a binary search, not a linear search.
|
|
|
|
+ With option "-S" [SWITCH], emit straightforward comparisons
|
|
|
|
instead of switch statements with just one "case" label.
|
|
|
|
+ With options "-S -p -t" [SWITCH, POINTER, TYPE], don't emit
|
|
|
|
spurious empty elements at the beginning of the wordlist array.
|
|
|
|
+ With option "-D" [DUP] and not option "-S" [SWITCH], if there
|
|
|
|
is no more room for duplicate entries in the lookup array,
|
|
|
|
don't call `assert (i != 0)'. Instead, make the array larger :-)
|
|
|
|
+ With option "-D" [DUP], if there are no duplicates, don't
|
|
|
|
automatically fall back to the non-"-D" algorithm. If the user
|
|
|
|
wants the non-"-D" algorithm, he can just not specify "-D".
|
|
|
|
+ With option "-D" [DUP] and either options "-p -t" [POINTER, TYPE]
|
|
|
|
or not option "-S" [SWITCH], don't emit spurious empty elements
|
|
|
|
at the beginning of the wordlist array.
|
|
|
|
+ With option "-D" [DUP], simplify the detection and processing
|
|
|
|
of duplicate entries in the lookup array.
|
|
|
|
+ With options "-D -l" [DUP, LENTABLE] and not option "-S" [SWITCH],
|
|
|
|
don't forget to emit the lengthtable array.
|
|
|
|
+ With options "-D -l -S" [DUP, LENTABLE, SWITCH], don't forget to
|
|
|
|
compare the lengths before comparing the strings.
|
|
|
|
|
|
|
|
* src/gen-perf.cc: No need to include <assert.h>.
|
|
|
|
* src/options.cc: Likewise.
|
|
|
|
|
|
|
|
* src/options.cc: Don't use `errno' after freopen failed.
|
|
|
|
* src/std-err.cc: `report_error' doesn't call strerror(errno) any
|
|
|
|
more. No need to include <string.h> and <errno.h>.
|
|
|
|
|
|
|
|
* tests/Makefile.in (check-*): Any difference between .exp and .out
|
|
|
|
is a failure. Don't ignore whitespace differences.
|
|
|
|
|
|
|
|
* tests/Makefile.in (check-lang-syntax): Add some more checks.
|
|
|
|
|
|
|
|
Fri Mar 20 00:54:54 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* tests/jscript.gperf: Renamed from tests/javascript.gperf, because
|
|
|
|
of Minix and SVR2 14-character filename limit.
|
|
|
|
* src/key-list.cc (output_string): New function.
|
|
|
|
(Key_List::output_switch, Key_List::output_keyword_table): Call it.
|
|
|
|
|
|
|
|
* src/options.{h,icc,cc} (get_wordlist_name): New function. Add
|
|
|
|
option -W.
|
|
|
|
* src/key-list.cc (Key_List::output_switch,
|
|
|
|
Key_List::output_keyword_table, Key_List::output_lookup_function):
|
|
|
|
Use it.
|
|
|
|
Patch from William Bader <wbader@CSEE.Lehigh.Edu>.
|
|
|
|
|
|
|
|
* src/version.cc: Bump version number directly from 2.5 to 2.7,
|
|
|
|
because Schmidt's last release from 1991 carries version number 2.6.
|
|
|
|
|
|
|
|
Tue Jul 30 00:02:39 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed a small bug in the Key_List::output_keyword_table routine
|
|
|
|
that caused an extra newline to be printed if there where no
|
|
|
|
leading blank entries... (who cares, right?!)
|
|
|
|
|
|
|
|
Mon Jul 29 22:05:40 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu)
|
|
|
|
|
|
|
|
* Modified the handling of the -E (emit enums rather than
|
|
|
|
#defines) option in conjunction with the -G option. Now, if -G
|
|
|
|
and -E are given the enums are generated outside the lookup
|
|
|
|
function, rather than within it!
|
|
|
|
|
|
|
|
Mon Apr 8 18:17:04 1991 Doug Schmidt (schmidt at net4.ics.uci.edu)
|
|
|
|
|
|
|
|
* Yucko, there was a bug in the handling of -c (and of course the
|
|
|
|
new -I command in key-list.cc). Apparently when I added the
|
|
|
|
super-duper hack that provided support for duplicate keys I
|
|
|
|
forgot to update the strcmp output...
|
|
|
|
|
|
|
|
Mon Mar 9 02:19:04 1998 Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
|
|
|
|
|
|
|
|
* Moved the documentation to doc/, put the stuff borrowed from
|
|
|
|
libg++ into lib/.
|
|
|
|
* Rewrote all Makefile.in's for better compliance with GNU standards.
|
|
|
|
* Autoconf based configuration. Rewrote all configure.in's. Added
|
|
|
|
aclocal.m4, with macros from CLISP and CLN. Added Makefile.devel.
|
|
|
|
* src/depend: Removed. Dependencies are now in src/Makefile.in.
|
|
|
|
|
|
|
|
* src/bool-array.icc: New file, contains inline functions, from both
|
|
|
|
src/bool-array.h and src/bool-array.cc.
|
|
|
|
* src/options.icc: New file, contains inline functions, from both
|
|
|
|
src/options.h and src/options.cc.
|
|
|
|
* src/read-line.icc: New file, contains inline functions, from both
|
|
|
|
src/read-line.h and src/read-line.cc.
|
|
|
|
|
|
|
|
* src/bool-array.h: Don't include <std.h>.
|
|
|
|
* src/bool-array.cc: Include <string.h>.
|
|
|
|
* src/gen-perf.cc: No need to include <ctype.h>. Don't include
|
|
|
|
<_G_config.h>.
|
|
|
|
* src/hash-table.cc: Don't include <std.h> and <builtin.h>. Include
|
|
|
|
<string.h> and lib/hash.h instead.
|
|
|
|
* src/iterator.cc: Don't include <std.h>.
|
|
|
|
* src/key-list.cc: Don't include <builtin.h>. Include <string.h> and
|
|
|
|
<stdlib.h> instead.
|
|
|
|
* src/list-node.cc: Don't include <std.h>. Include <stdlib.h> instead.
|
|
|
|
Remove `index' hack.
|
|
|
|
* src/main.cc: Don't include <_G_config.h>.
|
|
|
|
* src/new.cc: Don't include <std.h>. Include <stdlib.h> instead.
|
|
|
|
* src/options.cc: Don't include <builtin.h>. Include <string.h> and
|
|
|
|
<stdlib.h> instead.
|
|
|
|
* src/read-line.cc: Don't include <builtin.h>. Include <stdlib.h>
|
|
|
|
instead.
|
|
|
|
* src/std-err.cc: Don't include <std.h>. Include <string.h> (for Irix).
|
|
|
|
* src/vectors.h: No need to include <stdio.h>.
|
|
|
|
* src/version.cc: No need to include <stdio.h>.
|
|
|
|
|
|
|
|
* src/bool-array.h: Change `STORAGE_TYPE' from int to unsigned int.
|
|
|
|
* src/bool-array.{h,cc}: Change type of `Bool_Array::size' from int
|
|
|
|
to unsigned int.
|
|
|
|
* src/bool-array.{h,cc}: Change type of `Bool_Array::init' argument
|
|
|
|
from STORAGE_TYPE to unsigned int.
|
|
|
|
* src/gen-perf.{h,cc}: Change two `Gen_Perf::compute_disjoint_union'
|
|
|
|
argument types from `char *' to `const char *'.
|
|
|
|
* src/iterator.h: Change type of `Iterator::str' and argument of
|
|
|
|
`Iterator::Iterator' from `char *' to `const char *'.
|
|
|
|
* src/iterator.cc: Cast to `unsigned char' before calling `isdigit'.
|
|
|
|
* src/key-list.{h,cc}: Change type of `Key_List::array_type',
|
|
|
|
`Key_List::return_type', `Key_List::struct_tag',
|
|
|
|
`Key_List::include_src', `default_array_type', `default_return_type'
|
|
|
|
and return type of `Key_List::get_array_type',
|
|
|
|
`Key_List::get_special_input', `Key_List::save_include_src' from
|
|
|
|
`char *' to `const char *'.
|
|
|
|
* src/key-list.cc: Change "pretty gross" assignment.
|
|
|
|
* src/key-list.cc: Don't use `alloca', HP-UX CC lacks it.
|
|
|
|
* lib/GetOpt.cc: Likewise.
|
|
|
|
* src/key-list.cc (merge): Use iteration instead of recursion.
|
|
|
|
* src/list-node.{h,cc}: Change type of `List_Node::key',
|
|
|
|
`List_Node::rest', `List_Node::char_set' from `char *' to
|
|
|
|
`const char *'.
|
|
|
|
* src/new.cc: Don't use BUFSIZ. Conditionalize the throw() declaration.
|
|
|
|
* src/read-line.h: Don't use BUFSIZ.
|
|
|
|
* src/read-line.cc: Make CHUNK_SIZE a constant, and use allocate the
|
|
|
|
buffers on the stack by default. Use memcpy for copying buffers.
|
|
|
|
Include <string.h>.
|
|
|
|
* src/read-line.icc (get_line): Use iteration instead of tail recursion.
|
|
|
|
Don't call ungetc(EOF,stdin).
|
|
|
|
* src/std-err.{h,cc}: Change type of `Std_Err::program_name' and of
|
|
|
|
argument `Std_Err::report_error' from `char *' to `const char *'.
|
|
|
|
* src/std-err.cc: `report_error' doesn't call `exit' any more. All
|
|
|
|
callers changed to do that themselves.
|
|
|
|
* src/trace.h: Make constructor/destructor calls non-inline.
|
|
|
|
|
|
|
|
* src/key-list.cc (output_hash_function): If option[CPLUSPLUS],
|
|
|
|
always make the hash function inline.
|
|
|
|
(output): Declare the hash function inline, with the right name.
|
|
|
|
* src/options.{h,cc}, src/gen-perf.cc, src/key-list.cc: Remove
|
|
|
|
options -g, making it on by default. Remove option -a. Instead,
|
|
|
|
introduce "-L KR-C", "-L C", "-L ANSI-C", "-L C++".
|
|
|
|
* src/options.{h,cc}, src/key-list.cc: Add option -I.
|
|
|
|
* src/key-list.cc: Don't emit "const" if compiling in mode "-L KR-C".
|
|
|
|
* src/key-list.cc: Don't emit a comma at the end of an enum list.
|
|
|
|
* src/main.cc: Remove COUNT_TIME code.
|
|
|
|
* src/vectors.h, src/key-list.cc, src/options.cc, src/list-node.cc:
|
|
|
|
ALPHA_SIZE defaults to 256 now. Add option -7.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* tests/javascript.gperf: New file.
|
|
|
|
* tests/jstest*.gperf, tests/validate: New tests.
|
|
|
|
|
|
|
|
Sat Jan 31 01:38:11 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
|
|
|
|
|
|
|
|
* src/Makefile.in ($(TARGETPROG)): Add $(CFLAGS).
|
|
|
|
|
|
|
|
Wed Jan 28 01:56:00 1998 Manfred Hollstein <manfred@s-direktnet.de>
|
|
|
|
|
|
|
|
* configure.in (package_makefile_rules_frag): New and
|
|
|
|
redirect stderr from ${srcdir}/config.shared to
|
|
|
|
${package_makefile_rules_frag}.
|
|
|
|
* src/configure.in: Ditto.
|
|
|
|
* tests/configure.in: Ditto.
|
|
|
|
|
|
|
|
Fri Jan 23 08:00:41 1998 H.J. Lu (hjl@gnu.org)
|
|
|
|
|
|
|
|
* gperf.texi (@ichapter): Changed to @chapter.
|
|
|
|
|
|
|
|
Wed Jan 14 09:16:48 1998 H.J. Lu (hjl@gnu.org)
|
|
|
|
|
|
|
|
* src/key-list.cc, src/key-list.h (Key_List::strcspn): Don't
|
|
|
|
define if strcspn is defined.
|
|
|
|
|
|
|
|
Fri Jan 24 13:23:47 1997 Mike Stump <mrs@cygnus.com>
|
|
|
|
|
|
|
|
* src/new.cc (operator delete): Add the exception specification.
|
|
|
|
|
|
|
|
Mon Feb 5 19:29:16 1996 Per Bothner <bothner@kalessin.cygnus.com>
|
|
|
|
|
|
|
|
* src/read-line.cc (Read_Line::readln_aux): Handle EOF if last line
|
|
|
|
has a length which is an exact multiple of CHUNK_SIZE. (Used to throw
|
|
|
|
away the line's contents.) From Bruno Haible <haible@ilog.ilog.fr>.
|
|
|
|
* src/Makefile.in ($(TARGETPROG)): Add -lm to link line.
|
|
|
|
|
|
|
|
Tue Jun 11 13:43:50 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
|
|
|
|
|
|
|
|
* src/list-node.cc (List_Node): Reorder init of nodes to
|
|
|
|
match declaration order.
|
|
|
|
* src/hash-table.cc (Hash_Table): Likewise.
|
|
|
|
|
|
|
|
Tue Oct 10 16:37:28 1995 Mike Stump <mrs@cygnus.com>
|
|
|
|
|
|
|
|
* src/new.cc: Since malloc/delete are not paired, we cannot call
|
|
|
|
free.
|
|
|
|
|
|
|
|
Wed Jan 4 12:40:14 1995 Per Bothner <bothner@kalessin.cygnus.com>
|
|
|
|
|
|
|
|
* src/Makefile.in ($(TARGETPROG)): Link with $(LDFLAGS).
|
|
|
|
Patch from John Interrante <interran@uluru.stanford.edu>.
|
|
|
|
|
|
|
|
Sat Nov 5 19:12:48 1994 Jason Merrill (jason@phydeaux.cygnus.com)
|
|
|
|
|
|
|
|
* src/Makefile.in (LIBS): Remove.
|
|
|
|
|
|
|
|
Tue Oct 18 17:51:14 1994 Per Bothner <bothner@kalessin.cygnus.com>
|
|
|
|
|
|
|
|
* src/std-err.cc: Use stderror, instead of the non-standard
|
|
|
|
sys_nerr and sys_errlist.
|
|
|
|
|
|
|
|
Sat Sep 17 22:02:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* src/key-list.cc (output_hash_function):
|
|
|
|
Patch from William Bader <wbader@CSEE.Lehigh.Edu>.
|
|
|
|
|
|
|
|
Fri Jul 15 09:38:11 1994 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* src/std-err.cc: #include <errno.h>, and only declare
|
|
|
|
extern int errno if errno is not a macro.
|
|
|
|
|
|
|
|
Mon May 30 17:29:34 1994 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in (src_all, install): Make sure to add '/' after
|
|
|
|
`pwd` in $rootme, as expected by FLAGS_TO_PASS.
|
|
|
|
|
|
|
|
Wed May 11 00:47:22 1994 Jason Merrill (jason@deneb.cygnus.com)
|
|
|
|
|
|
|
|
Make libg++ build with gcc -ansi -pedantic-errors
|
|
|
|
* src/options.h: Lose commas at end of enumerator lists.
|
|
|
|
|
|
|
|
Sun Dec 5 19:16:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
|
|
|
|
|
|
|
|
* src/hash-table.cc (Hash_Table::~Hash_Table): Don't pass an
|
|
|
|
argument to fprintf, since it's not expecting one.
|
|
|
|
|
|
|
|
Fri Nov 26 19:03:18 1993 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* src/list-node.cc: #undef index, for the sake of broken NeXT,
|
|
|
|
|
|
|
|
Thu Nov 4 11:16:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in (install): Use INSTALL_DATA for gperf.1.
|
|
|
|
|
|
|
|
Mon Oct 25 18:40:51 1993 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* src/key-list.cc (Key_List::read_keys): Use POW macro
|
|
|
|
to increase hash table size to power of 2.
|
|
|
|
|
|
|
|
* options.h (LARGE_STACK_ARRAYS): New flag. Defaults to zero.
|
|
|
|
* gen-perf.cc, key-list.cc, read-line.cc:
|
|
|
|
Only stack-allocate large arrays if LARGE_STACK_ARRAYS is set.
|
|
|
|
* main.cc (main): Only call setrlimit (RLIMIT_STACK, ...)
|
|
|
|
if LARGE_STACK_ARRAYS.
|
|
|
|
|
|
|
|
Mon Oct 4 17:45:08 1993 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* src/gen-perf.cc: Always use ANSI rand/srand instead of BSDisms.
|
|
|
|
|
|
|
|
Wed Aug 18 12:19:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in (src_all): Make less verbose output.
|
|
|
|
|
|
|
|
Fri May 28 14:01:18 1993 Per Bothner (bothner@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* src/gen-perf.cc (Gen_Perf::change): Don't use gcc-specific
|
|
|
|
2-operand conditional expression.
|
|
|
|
* src/key-list.cc (Key_List::output_lookup_array):
|
|
|
|
Don't use variable-size stack arrays, unless compiled by g++.
|
|
|
|
|
|
|
|
Tue May 4 14:08:44 1993 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
Changes (mostly from Peter Schauer) to permit compilation
|
|
|
|
using cfront 3.0 and otherwise be ARM-conforming.
|
|
|
|
* src/key-list.h: class Key_List must use public derivation
|
|
|
|
of base class Std_Err (because Gen_Perf::operator() in gen-perf.cc
|
|
|
|
calls Std_Err::report_error).
|
|
|
|
* src/gen-perf.cc (Gen_Perf::affects_prev), src/hash-table.cc
|
|
|
|
(Hash_Table::operator()): Don't use gcc-specific 2-operand
|
|
|
|
conditional expression.
|
|
|
|
* src/iterator.cc (Iterator::operator()): Don't use gcc-specific
|
|
|
|
range construct in case label.
|
|
|
|
* key-list.cc (Key_List::output_lookup_array, Key_List::read_keys),
|
|
|
|
src/gen-perf.cc (Gen_Perf::operator(), src/read-line.cc
|
|
|
|
(Read_Line::readln_aux): If not gcc, don't allocate
|
|
|
|
variable-sized arrays on stack.
|
|
|
|
* src/new.cc (operator new): Argument type should be size_t.
|
|
|
|
* key-list.cc (Key_List::output_lookup_array, Key_List::read_keys),
|
|
|
|
new/cc (::operator new): Don't use non-standard >?= operator.
|
|
|
|
|
|
|
|
Tue Apr 27 20:11:30 1993 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* src/Makefile.in: Define TARGETPROG, and use it.
|
|
|
|
|
|
|
|
Mon Apr 19 00:29:18 1993 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in, configure.in: Re-vamped configure scheme.
|
|
|
|
* gperf.texinfo: Renamed to gperf.texi.
|
|
|
|
* src/bool-array.{h,cc}: ANSIfy bzero->memset.
|
|
|
|
|
|
|
|
Sat Jan 30 20:21:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
|
|
|
|
|
|
|
|
* tests/Makefile.in (mostlyclean): Also delete aout, cout, m3out,
|
|
|
|
pout, and preout.
|
|
|
|
|
|
|
|
Tue Dec 29 08:58:17 1992 Ian Lance Taylor (ian@cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in: pass $(FLAGS_TO_PASS) to all calls to make.
|
|
|
|
(FLAGS_TO_PASS): added INSTALL, INSTALL_DATA, INSTALL_PROGRAM.
|
|
|
|
|
|
|
|
Mon Dec 21 18:46:46 1992 Per Bothner (bothner@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* tests/expected.* renamed to *.exp to fit in 14 chars.
|
|
|
|
* tests/Makefile.in: Update accordingly.
|
|
|
|
Also rename output.* to *.out.
|
|
|
|
* src/Makefile.in (clean): Remove gperf program.
|
|
|
|
|
|
|
|
Wed Dec 9 14:33:34 1992 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* src/hash-table.cc, src/bool-array.h: ANSIfy bzero->memset.
|
|
|
|
|
|
|
|
Thu Dec 3 19:34:12 1992 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in (distclean, realclean): Don't delete
|
|
|
|
Makefile before recursing.
|
|
|
|
|
|
|
|
Fri Nov 6 13:41:49 1992 Per Bothner (bothner@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* key-list.{h,cc}: Remove MAX_INT (and similar) constant
|
|
|
|
fields from Key_List class, and use INT_MAX (etc) from limits.h.
|
|
|
|
* key-list.{h,cc}, options.{h,cc}, vectors.h: Removed all
|
|
|
|
uses of initialized const fields, as they are non-standard
|
|
|
|
- and their use was easy to do away with. Mostly, just
|
|
|
|
made the constants static non-fields in the .cc file.
|
|
|
|
|
|
|
|
Mon Nov 2 13:10:11 1992 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* tests/Makefile.in: When generating cinset.c, don't pass -C,
|
|
|
|
since -C assumes an ANSI compiler. Add the -C flag (with -a)
|
|
|
|
when generating test.out.3 instead.
|
|
|
|
* tests/expected.out.3: Update accordingly.
|
|
|
|
|
|
|
|
Wed Aug 12 11:47:54 1992 Per Bothner (bothner@cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in: Factor out common flags into $(FLAGS_TO_PASS).
|
|
|
|
* Makefile.in: 'install-info' depends on gperf.info.
|
|
|
|
|
|
|
|
Mon Aug 10 11:39:52 1992 Ian Lance Taylor (ian@dumbest.cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in, src/Makefile.in: always create installation
|
|
|
|
directories.
|
|
|
|
|
|
|
|
Mon Jul 20 15:33:21 1992 Mike Stump (mrs@cygnus.com)
|
|
|
|
|
|
|
|
* src/new.cc (operator new): Add cast from void * to char *,
|
|
|
|
since it is not a standard conversion.
|
|
|
|
|
|
|
|
Wed Jun 17 16:25:30 1992 Per Bothner (bothner@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* src/gen-perf.cc: #include <_G_config.h> for _G_SYSV.
|
|
|
|
* src/key-list.cc: alloca() hair.
|
|
|
|
* src/main.cc (main): Only call getrlimit if _G_HAVE_SYS_RESOURCE.
|
|
|
|
* Makefile,in, {src,test}/Makefile.in: Fix *clean rules.
|
|
|
|
|
|
|
|
Fri May 29 13:21:13 1992 Per Bothner (bothner@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* src/gen-perf.cc: Replace USG -> _G_SYSV.
|
|
|
|
|
|
|
|
Thu May 14 13:58:36 1992 Per Bothner (bothner@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* src/Makefile.in: Don't pass obsolete flag -DUNLIMIT_STACK.
|
|
|
|
* tests/Makefile.in (clean): Fix.
|
|
|
|
|
|
|
|
Sat Mar 7 00:03:56 1992 K. Richard Pixley (rich@rtl.cygnus.com)
|
|
|
|
|
|
|
|
* gperf.texinfo: added menu item hook.
|
|
|
|
|
|
|
|
Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
|
|
|
|
|
|
|
|
* Makefile.in, configure.in: removed traces of namesubdir,
|
|
|
|
-subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
|
|
|
|
copyrights to '92, changed some from Cygnus to FSF.
|
|
|
|
|
|
|
|
Sun Jan 26 19:21:58 1992 Per Bothner (bothner at cygnus.com)
|
|
|
|
|
|
|
|
* tests/Makefile.in: Use re-directed stdin instead of file
|
|
|
|
name in argv. This allows us to remove the filename
|
|
|
|
from the output, the expected output, and hence the diffs.
|
|
|
|
(Note that the input file is in $(srcdir), which we cannot
|
|
|
|
place in the expected out files.)
|
|
|
|
* tests/expected.out.[1235]: Edit out input filename,
|
|
|
|
to match new output.
|
|
|
|
|
|
|
|
Thu Jun 28 16:17:27 1990 Doug Schmidt (schmidt at brilliant)
|
|
|
|
|
|
|
|
* Wow, first fix on the new job! There was a dumb error
|
|
|
|
in Key_List::output_lookup_function, where I printed the
|
|
|
|
string "&wordlist[key]" instead of the correct "&wordlist[index]".
|
|
|
|
|
|
|
|
* Added a couple of #ifdefs for USG support.
|
|
|
|
|
|
|
|
Sun Jun 3 17:16:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Updated the version number to 2.5 and sent to Doug Lea for release
|
|
|
|
with the latest GNU libg++.
|
|
|
|
|
|
|
|
* Changed the error handling when a keyword file cannot be opened
|
|
|
|
(now calls perror).
|
|
|
|
|
|
|
|
Wed May 30 14:49:40 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Instrumented the source code with trace statements automagically
|
|
|
|
inserted using my new automated trace instrumentation tool!
|
|
|
|
|
|
|
|
Wed May 9 11:47:41 1990 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
|
|
|
|
|
|
|
* Really fixed the previous bug. Turns out that a small amount
|
|
|
|
of logic had to be duplicated to handle static links that occur
|
|
|
|
as part of dynamic link chains. What a pain!!!
|
|
|
|
|
|
|
|
Tue May 8 23:11:44 1990 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed a stupid bug in Key_List::output_lookup_array that was
|
|
|
|
causing incorrect counts to be generated when there were both
|
|
|
|
static and dynamic links occurring for the same hash value.
|
|
|
|
Also simplified the code that performs the logic in this routine.
|
|
|
|
|
|
|
|
Mon Apr 30 17:37:24 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed stupid bug in Key_List::output_lookup_array that was
|
|
|
|
making the generated lookup[] array contain `chars' even
|
|
|
|
when the values stored in the chars are greater than 127!
|
|
|
|
|
|
|
|
* Changed the behavior of the -G (global table) option so that it
|
|
|
|
will output the `length[]' array in the global scope along with
|
|
|
|
the `word_list[]' array.
|
|
|
|
|
|
|
|
* Fixed a stupid bug in Key_List::output_lookup_function that
|
|
|
|
would always output the complicated `duplicate-handling' lookup
|
|
|
|
logic, even when there were no duplicates in the input!
|
|
|
|
|
|
|
|
* Yikes, had to modify a bunch of stuff in key-list.cc to correctly
|
|
|
|
handle duplicate entries. Changed the generated code so that
|
|
|
|
the MIN_HASH_VALUE is no longer subtracted off when calculating
|
|
|
|
the hash value for a keyword. This required changing some other
|
|
|
|
code by substituting MAX_HASH_VALUE for TOTAL_KEYS in several places.
|
|
|
|
Finally, this means that the generated tables may contain leading
|
|
|
|
null entries, but I suppose it is better to trade-off space to get
|
|
|
|
faster performance...
|
|
|
|
|
|
|
|
Mon Mar 26 13:08:43 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Updated version number to 2.4 to reflect the latest changes.
|
|
|
|
|
|
|
|
* Changed the main program so that it always prints out gperf's
|
|
|
|
execution timings to the generated output file.
|
|
|
|
|
|
|
|
Sun Mar 25 12:39:30 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added the -Z option so that users can specify the name of the
|
|
|
|
generated class explicitly. Updated documentation to reflect
|
|
|
|
this change.
|
|
|
|
|
|
|
|
* Modified the generated C++ class interface so that the functions
|
|
|
|
are declared static (to remove the overhead of passing the `this'
|
|
|
|
pointer). This means that operator()() can no longer be used,
|
|
|
|
since it only works on non-static member functions.
|
|
|
|
Also changed things so that there is no constructor (why waste
|
|
|
|
the extra call, when it doesn't do anything, eh?)
|
|
|
|
|
|
|
|
* Modified the behavior of Key_List::output when the -L C++ option
|
|
|
|
is enabled. Previously the code generated use const data members
|
|
|
|
to record MIN_WORD_LENGTH, MIN_HASH_VALUE, etc. However, as
|
|
|
|
pointed out by James Clark this may result in suboptimal behavior
|
|
|
|
on the part of C++ compilers that can't inline these values.
|
|
|
|
Therefore, the new behavior is identical to what happens with
|
|
|
|
-L C, i.e., either #defines or function-specific enums are used.
|
|
|
|
Why sacrifice speed for some abstract notion of `code purity?' ;-)
|
|
|
|
|
|
|
|
Tue Mar 6 18:17:42 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added the -E option that defines 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).
|
|
|
|
|
|
|
|
Sat Mar 3 20:19:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added a special case to key_list::output_switch that doesn't
|
|
|
|
generate extra comparisons when the `-S' is given an argument
|
|
|
|
of 1 (the normal case). This should speed up the generated
|
|
|
|
code output a tad...
|
|
|
|
|
|
|
|
Fri Feb 23 14:21:28 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Renamed all instances of member function get_keysig_size
|
|
|
|
to get_max_keysig_size, since this is more precise...
|
|
|
|
|
|
|
|
* Changed all occurrences of charset to keysig (stands for ``key
|
|
|
|
signature'') to reflect the new naming convention used in the
|
|
|
|
USENIX paper.
|
|
|
|
|
|
|
|
Thu Feb 22 11:28:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Changed the name of the generated associated values table from
|
|
|
|
asso_value to asso_values to reflect conventions in the USENIX
|
|
|
|
C++ paper.
|
|
|
|
|
|
|
|
Thu Feb 15 23:29:03 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Updated the gperf.texinfo file to fix some formatting problems
|
|
|
|
that had crept in since last time.
|
|
|
|
|
|
|
|
Wed Feb 14 23:27:24 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed stupid bug in key-list.cc (get_special_input), wher
|
|
|
|
gperf replaced each '%' with the succeeding character.
|
|
|
|
|
|
|
|
* Added support for multiple target language generation. Currently
|
|
|
|
handled languages are C and C++, with C as the default. Updated
|
|
|
|
documentation and option handler to reflect the changes.
|
|
|
|
|
|
|
|
* Added a global destructor to new.cc and removed the #ifdef, since
|
|
|
|
the bloody thing now works with libg++.
|
|
|
|
|
|
|
|
Mon Feb 14 13:00:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Found out that my gperf paper was accepted at the upcoming
|
|
|
|
USENIX C++ Conference in San Francisco. Yow!
|
|
|
|
|
|
|
|
Tue Jan 30 09:00:29 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* #ifdef'd out the new.cc memory allocator, since there are
|
|
|
|
problems with this and the libg++ stuff.
|
|
|
|
|
|
|
|
* Changed key-list.h so that class Vectors is a public (rather
|
|
|
|
than private) base class for class Key_List. The previous
|
|
|
|
form was illegal C++, but wasn't being caught by the old
|
|
|
|
g++ compiler. Should work now... ;-)
|
|
|
|
|
|
|
|
Sun Dec 10 14:08:23 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added several changes from rfg@ics.uci.edu. These changes
|
|
|
|
help to automate the build process.
|
|
|
|
|
|
|
|
Wed Nov 15 15:49:33 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Removed conditional compilation for GATHER_STATISTICS. There's
|
|
|
|
really no good reason to avoid collecting this info at run-time,
|
|
|
|
since that section of code is *hardly* the bottleneck... ;-)
|
|
|
|
|
|
|
|
* Simplified the C output routines in Key_List::set_output_types
|
|
|
|
and Key_List::output_keyword_table a bit in order to
|
|
|
|
speed-up and clean up the code generation.
|
|
|
|
|
|
|
|
* Modified function Key_List::get_special_input so that it does
|
|
|
|
not try to `delete' a buffer that turned out to be too short.
|
|
|
|
This is important since the new memory management scheme
|
|
|
|
does not handle deletions. However, adding a small amount of
|
|
|
|
garbage won't hurt anything, since we generally don't do this
|
|
|
|
operation more than a couple times *at most*!
|
|
|
|
|
|
|
|
* Created a new file (new.cc) which includes my own overloaded
|
|
|
|
operator new. This function should dramatically reduce the
|
|
|
|
number of calls to malloc since it grabs large chunks and
|
|
|
|
doles them out in small pieces. As a result of this change
|
|
|
|
the class-specific `operator new' was removed from class List_Node.
|
|
|
|
|
|
|
|
Tue Nov 14 21:45:30 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Continued to refine the great hack. The latest trick is to
|
|
|
|
try and replace most uses of dynamic memory (i.e., calls to
|
|
|
|
new) with uses of gcc dynamic arrays (i.e., an alloca solution).
|
|
|
|
This makes life much easier for the overall process-size, since
|
|
|
|
it reduces the amount of overhead for memory management. As a
|
|
|
|
side-effect from this change there is no reason to have the
|
|
|
|
Bool_Array::dispose member function, so it's outta here!
|
|
|
|
|
|
|
|
* Fixed a stupid bug that was an disaster waiting to happen...
|
|
|
|
Instead of making the boolean array large enough to index
|
|
|
|
max_hash_value it was only large enough to index max_hash_value
|
|
|
|
- 1. Once again, an off-by-one mistake in C/C++!!!!
|
|
|
|
|
|
|
|
Mon Nov 13 19:38:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added the final great hack! This allows us to generate hash tables
|
|
|
|
for near-perfect hash functions that contain duplicates, *without*
|
|
|
|
having to use switch statements! Since many compilers die on large
|
|
|
|
switch statements this feature is essential. Furthermore, it appears
|
|
|
|
that the generated code is often *smaller* than that put out by
|
|
|
|
compilers, even though a large, sparse array must be created.
|
|
|
|
Here's the general idea:
|
|
|
|
|
|
|
|
a. Generate the wordlist as a contiguous block of keywords,
|
|
|
|
just as before when using a switch statement. This
|
|
|
|
wordlist *must* be sorted by hash value.
|
|
|
|
|
|
|
|
b. Generate the lookup array, which is an array of signed
|
|
|
|
{chars,shorts,ints}, (which ever allows full coverage of
|
|
|
|
the wordlist dimensions). If the value v, where v =
|
|
|
|
lookup[hash(str,len)], is >= 0 and < TOTAL_KEYWORDS, then we
|
|
|
|
simply use this result as a direct access into the wordlist
|
|
|
|
array to snag the keyword for comparison.
|
|
|
|
|
|
|
|
c. Otherwise, if v is < -TOTAL_KEYWORDS or > TOTAL_KEYWORDS
|
|
|
|
this is an indication that we'll need to search through
|
|
|
|
some number of duplicates hash values. Using a hash
|
|
|
|
linking scheme we'd then index into a different part of
|
|
|
|
the hash table that provides the starting index and total
|
|
|
|
length of the duplicate entries to find via linear search!
|
|
|
|
|
|
|
|
Sun Nov 12 13:48:10 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Simplified Key_List::output_min_max considerably by recognizing
|
|
|
|
that since the keyword list was already sorted by hash value finding
|
|
|
|
the min and max values is trivial!
|
|
|
|
|
|
|
|
* Improved the debugging diagnostics considerably in classes Key_List,
|
|
|
|
Hash_Table, and Gen_Perf.
|
|
|
|
|
|
|
|
* Modified the `-s' option so that a negative argument is now
|
|
|
|
interpreted to mean `allow the maximum associated value to be
|
|
|
|
about x times *smaller* than the number of input keys.' This
|
|
|
|
should help prevent massive explosion of generated hash table
|
|
|
|
size for large keysets.
|
|
|
|
|
|
|
|
Sat Nov 11 11:31:13 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added a field in class Key_List that counts the total number
|
|
|
|
of duplicate keywords, both static and dynamic.
|
|
|
|
|
|
|
|
* Added a new member function Bool_Array that deletes the dynamic
|
|
|
|
memory allocated to Bool_Array::storage_array. This space may
|
|
|
|
be needed for subsequent options, so it made sense to free it as
|
|
|
|
soon as possible...
|
|
|
|
|
|
|
|
* Renamed file/class Alpha_Vectors to Vectors, to avoid problems
|
|
|
|
with 14 character length filenames on SYSV. Also changed file
|
|
|
|
adapredefined.gperf to adadefs.gperf in the ./tests directory.
|
|
|
|
|
|
|
|
* Modified class Options by changing the member function
|
|
|
|
Options::total_positions to Options::get_charset_size and
|
|
|
|
Options::set_charset_size. These two routines now either return
|
1996-09-10 13:48:14 +00:00
|
|
|
the total charset size *or* the length of the largest keyword
|
|
|
|
if the user specifies the -k'*' (ALLCHARS) option. This change
|
|
|
|
cleans up client code.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Merged all the cperf changes into gperf.
|
|
|
|
|
1996-09-10 13:48:14 +00:00
|
|
|
* Made sure to explicitly initialize perfect.fewest_collisions to
|
|
|
|
0.
|
|
|
|
|
|
|
|
* Cleaned up some loose ends noticed by Nels Olson.
|
|
|
|
1. Removed `if (collisions <= perfect.fewest_collisions)'
|
2000-03-25 07:45:29 +00:00
|
|
|
from Gen_Perf::affects_prev since it was superfluous.
|
1996-09-10 13:48:14 +00:00
|
|
|
2. Removed the fields best_char_value and best_asso_value
|
2000-03-25 07:45:29 +00:00
|
|
|
from Gen_Perf. There were also unnecessary.
|
|
|
|
3. Fixed a braino in the Bool_Array::bool_array_reset
|
1996-09-10 13:48:14 +00:00
|
|
|
function. Since iteration numbers can never be zero
|
|
|
|
the `if (bool_array.iteration_number++ == 0)' must be
|
|
|
|
`if (++bool_array.iteration_number == 0).'
|
2000-03-25 07:45:29 +00:00
|
|
|
4. Modified Std_Err::report_error so that it correctly handles
|
1996-09-10 13:48:14 +00:00
|
|
|
"%%".
|
|
|
|
|
|
|
|
* It is important to note that -D no longer enables -S.
|
|
|
|
There is a good reason for this change, which will become
|
|
|
|
manifested in the next release... (suspense!).
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Made some subtle changes to Key_List::print_switch so that if finally
|
1996-09-10 13:48:14 +00:00
|
|
|
seems to work correctly. Needs more stress testing, however...
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Made a major change to the Key_List::print_switch function.
|
1996-09-10 13:48:14 +00:00
|
|
|
The user can now specify the number of switch statements to generate
|
|
|
|
via an argument to the -S option, i.e., -S1 means `generate 1
|
|
|
|
switch statement with all keywords in it,' -S2 means generate
|
|
|
|
2 switch statements with 1/2 the elements in each one, etc.
|
|
|
|
Hopefully this will fix the problem with C compilers not being
|
|
|
|
able to generate code for giant switch statements (but don't
|
|
|
|
hold your breath!)
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Changed Key_List::length function to Key_List::keyword_list_length.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Added a feature to main.c that prints out the starting wall-clock
|
|
|
|
time before the program begins and prints out the ending wall-clock
|
|
|
|
time when the program is finished.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Added the GATHER_STATISTICS code in hash-table.c so we can
|
1996-09-10 13:48:14 +00:00
|
|
|
keep track of how well double hashing is doing. Eventually,
|
|
|
|
GATHER_STATISTICS will be added so that all instrumentation
|
|
|
|
code can be conditionally compiled in.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Fixed a stupid bug in Key_List::print_switch routine. This
|
1996-09-10 13:48:14 +00:00
|
|
|
was necessary to make sure the generated switch statement worked
|
|
|
|
correctly when *both* `natural,' i.e., static links and dynamic
|
|
|
|
links, i.e., unresolved duplicates, hash to the same value.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Modified Bool_Array::~Bool_Array destructor so that
|
1996-09-10 13:48:14 +00:00
|
|
|
it now frees the bool_array.storage_array when it is no longer
|
|
|
|
needed. Since this array is generally very large it makes sense
|
|
|
|
to return the memory to the freelist when it is no longer in use.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Changed the interface to constructor Hash_Table::Hash_Table. This
|
|
|
|
constructor now passed a pointer to a power-of-two sized buffer that
|
|
|
|
serve as storage for the hash table. Although this weakens information
|
1996-09-10 13:48:14 +00:00
|
|
|
hiding a little bit it greatly reduces dynamic memory fragmentation,
|
|
|
|
since we can now obtain the memory via a call to alloca, rather
|
2000-03-25 07:45:29 +00:00
|
|
|
than malloc. This change modified Key_List::read_keys calling
|
1996-09-10 13:48:14 +00:00
|
|
|
interface.
|
|
|
|
|
|
|
|
* Since alloca is now being used more aggressively a conditional
|
2000-03-25 07:45:29 +00:00
|
|
|
compilation section was added in main.c. Taken from GNU GCC,
|
|
|
|
this code gets rid of any avoidable limit on stack size so that
|
|
|
|
alloca does not fail. It is only used if the -DRLIMIT_STACK
|
|
|
|
symbol is defined when gperf is compiled.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Added warnings in option.c so that user's would be informed
|
|
|
|
that -r superceeds -i on the command-line.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Rewrote Gen_Perf::affects_prev. First, the code structure
|
1996-09-10 13:48:14 +00:00
|
|
|
was cleaned up considerably (removing the need for a dreaded
|
2000-03-25 07:45:29 +00:00
|
|
|
goto!). Secondly, a major change occurred so that Gen_Perf::affects_prev
|
1996-09-10 13:48:14 +00:00
|
|
|
returns FALSE (success) when fewest_hits gets down to whatever
|
|
|
|
it was after inserting the previous key (instead of waiting for
|
|
|
|
it to reach 0). In other words, it stops trying if it can
|
|
|
|
resolve the new collisions added by a key, even if there are
|
|
|
|
still other old, unresolved collisions. This modification was
|
|
|
|
suggested by Nels Olson and seems to *greatly* increase the
|
|
|
|
speed of gperf for large keyfiles. Thanks Nels!
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* In a similar vein, inside the Gen_Perf::change routine
|
1996-09-10 13:48:14 +00:00
|
|
|
the variable `perfect.fewest_collisions is no longer initialized
|
|
|
|
with the length of the keyword list. Instead it starts out at
|
|
|
|
0 and is incremented by 1 every time change () is called.
|
|
|
|
The rationale for this behavior is that there are times when a
|
|
|
|
collision causes the number of duplicates (collisions) to
|
|
|
|
increase by a large amount when it would presumably just have
|
|
|
|
gone up by 1 if none of the asso_values were changed. That is,
|
|
|
|
at the beginning of change(), you could initialize fewest_hits
|
|
|
|
to 1+(previous value of fewest_hits) instead of to the number of
|
|
|
|
keys. Thanks again, Nels.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Replaced alloca with new in the Gen_Perf::change function.
|
1996-09-10 13:48:14 +00:00
|
|
|
This should eliminate some overhead at the expense of a little
|
|
|
|
extra memory that is never reclaimed.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Renamed Gen_Perf::merge_sets to Gen_Perf::compute_disjoint_union
|
1996-09-10 13:48:14 +00:00
|
|
|
to reflect the change in behavior.
|
|
|
|
|
|
|
|
* Added the -e option so users can supply a string containing
|
|
|
|
the characters used to separate keywords from their attributes.
|
|
|
|
The default behavior is ",\n".
|
|
|
|
|
|
|
|
* Removed the char *uniq_set field from LIST_NODE and modified
|
|
|
|
uses of uniq_set in perfect.c and keylist.c. Due to changes
|
2000-03-25 07:45:29 +00:00
|
|
|
to Gen_Perf::compute_disjoint_sets this field was no longer
|
|
|
|
necessary, and its removal makes the program smaller and
|
|
|
|
potentially faster.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Added lots of changes/fixes suggested by Nels Olson
|
|
|
|
(umls.UUCP!olson@mis.ucsf.edu). In particular:
|
2000-03-25 07:45:29 +00:00
|
|
|
1. Changed Bool_Array so that it would dynamically create
|
1996-09-10 13:48:14 +00:00
|
|
|
an array of unsigned shorts rather than ints if the
|
|
|
|
LO_CAL symbol was defined during program compilation.
|
|
|
|
This cuts the amount of dynamic memory usage in half,
|
|
|
|
which is important for large keyfile input.
|
|
|
|
2. Added some additional debugging statements that print extra
|
|
|
|
info to stderr when the -d option is enabled.
|
2000-03-25 07:45:29 +00:00
|
|
|
3. Fixed a really stupid bug in Key_List::print_switch
|
|
|
|
A right paren was placed at the wrong location, which broke
|
|
|
|
strlen ().
|
1996-09-10 13:48:14 +00:00
|
|
|
4. Fixed a subtle problem with printing case values when keylinks
|
|
|
|
appear. The logic failed to account for the fact that there
|
|
|
|
can be keylinks *and* regular node info also!
|
2000-03-25 07:45:29 +00:00
|
|
|
5. Changed the behavior of Key_List::read_keys so that it would
|
|
|
|
honor -D unequivocally, i.e., it doesn't try to turn off dup
|
|
|
|
handling if the user requests it, even if there are no
|
|
|
|
immediate links in the keyfile input.
|
1996-09-10 13:48:14 +00:00
|
|
|
6. Modified the -j option so that -j 0 means `try random values
|
|
|
|
when searching for a way to resolve collisions.'
|
2000-03-25 07:45:29 +00:00
|
|
|
7. Added a field `num_done' to the Gen_Perf struct. This is used
|
1996-09-10 13:48:14 +00:00
|
|
|
to report information collected when trying to resolve
|
|
|
|
hash collisions.
|
|
|
|
8. Modified the merge_sets algorithm to perform a disjoint
|
|
|
|
union of two multisets. This ensures that subsequent
|
2000-03-25 07:45:29 +00:00
|
|
|
processing in Gen_Perf::affect_prev doesn't
|
1996-09-10 13:48:14 +00:00
|
|
|
waste time trying to change an associated value that is
|
|
|
|
shared between two conflicting keywords.
|
2000-03-25 07:45:29 +00:00
|
|
|
9. Modified Gen_Perf::affects_prev so that it doesn't try
|
|
|
|
random jump values unless the -j 0 option is enabled.
|
|
|
|
10. Fixed a silly bug in Gen_Perf::change. This problem caused
|
|
|
|
gperf to seg fault when the -k* option was given and the
|
|
|
|
keyfile file had long keywords.
|
|
|
|
|
|
|
|
Sun Oct 29 00:18:55 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
|
|
|
|
|
|
|
* Modified class-specific new operations for Read_Line and
|
|
|
|
List_Node so they don't fail if SIZE is larger than twice
|
|
|
|
the previous buffer size. Note we double buffer size
|
|
|
|
everytime the previous buffer runs out, as a heuristic
|
|
|
|
to reduce future calls to malloc.
|
|
|
|
|
|
|
|
Sun Oct 22 13:49:43 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Updated gperf version number to 2.0. Send to Doug Lea for
|
|
|
|
incorporation into the long-awaited `official' libg++ 1.36
|
|
|
|
release!
|
|
|
|
|
|
|
|
* Thanks to Nels Olson a silly bug in Gen_Perf::change ()
|
|
|
|
was fixed. This problem caused gperf to seg fault when
|
|
|
|
the -k* option was given and the keyfile file had long
|
|
|
|
keywords.
|
|
|
|
|
|
|
|
* Modified Key_List::print_hash_function so that it output
|
|
|
|
max_hash_value + 1 (rather than just max_hash_value) for
|
|
|
|
any associated value entries that don't correspond to
|
|
|
|
keyword charset characters. This should speed up rejection
|
|
|
|
of non-keyword strings a little in some cases.
|
|
|
|
|
|
|
|
Sat Oct 21 19:28:36 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed Key_List::print_hash_function so that it no longer output
|
|
|
|
things like `return 0 + ...' Although this probably gets
|
|
|
|
optimized away by even the worst C compilers there isn't any
|
|
|
|
point tempting fate... ;-)
|
|
|
|
|
|
|
|
* Fixed class List_Node's constructor so that it wouldn't a priori
|
|
|
|
refuse to consider trying to hash keys whose length is less
|
|
|
|
than the smallest user-specified key position. It turns out
|
|
|
|
this is not a problem unless the user also specifies the -n
|
|
|
|
(NOLENGTH) option, in which case such keys most likely
|
|
|
|
don't have a prayer of being hashed correctly!
|
|
|
|
|
|
|
|
* Changed the name of the generated lookup table from `Hash_Table'
|
|
|
|
to `asso_value' to be consistent with the gperf paper.
|
|
|
|
|
|
|
|
Tue Oct 17 14:19:48 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added a flag GATHER_STATISTICS in the Makefile. If defined
|
|
|
|
during compilation this turns on certain collection facilities
|
|
|
|
that track the performance of gperf during its execution. In
|
|
|
|
particular, I want to see how many collisions occur for the
|
|
|
|
double hashing Hash_Table.
|
|
|
|
|
|
|
|
* Added a safety check so that we don't screw up if the total
|
|
|
|
number of `resets' of the Bool_Array exceeds MAX_INT. Since
|
|
|
|
this number is around 2^31 it is unlikely that this would ever
|
|
|
|
occur for most input, but why take the risk?
|
|
|
|
|
|
|
|
* Changed the behavior for the -a (ANSI) option so that the
|
1996-09-10 13:48:14 +00:00
|
|
|
generated prototypes use int rather than size_t for the LEN
|
|
|
|
parameter. It was too ugly having to #include <stddef.h> all
|
|
|
|
over the place...
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Mon Oct 16 11:00:35 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Continued to work on the gperf paper for the USENIX C++
|
|
|
|
conference. At some point this will be merged back into
|
|
|
|
the gperf documentation...
|
|
|
|
|
|
|
|
Sat Oct 14 20:29:43 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
|
|
|
|
1996-09-10 13:48:14 +00:00
|
|
|
* Added a majorly neat hack to Bool_Array, suggested by rfg.
|
|
|
|
The basic idea was to throw away the Ullman array technique.
|
|
|
|
The Ullman array was used to remove the need to reinitialize all
|
|
|
|
the Bool_Array elements to zero everytime we needed to determine
|
|
|
|
whether there were duplicate hash values in the keyword list.
|
|
|
|
The current trick uses an `iteration number' scheme, which takes
|
|
|
|
about 1/3 the space and reduces the overall program running a
|
|
|
|
time by about 20 percent for large input! The hack works as
|
|
|
|
follows:
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
1. Dynamically allocation 1 boolean array of size k.
|
1996-09-10 13:48:14 +00:00
|
|
|
2. Initialize the boolean array to zeros, and consider the first
|
|
|
|
iteration to be iteration 1.
|
|
|
|
2. Then on all subsequent iterations we `reset' the bool array by
|
|
|
|
kicking the iteration count by 1.
|
|
|
|
3. When it comes time to check whether a hash value is currently
|
|
|
|
in the boolean array we simply check its index location. If
|
|
|
|
the value stored there is *not* equal to the current iteration
|
|
|
|
number then the item is clearly *not* in the set. In that
|
|
|
|
case we assign the iteration number to that array's index
|
|
|
|
location for future reference. Otherwise, if the item at
|
|
|
|
the index location *is* equal to the iteration number we've
|
|
|
|
found a duplicate. No muss, no fuss!
|
2000-03-25 07:45:29 +00:00
|
|
|
|
|
|
|
Mon Oct 2 12:30:54 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Changed some consts in options.h to enumerals, since g++
|
|
|
|
doesn't seem to like them at the moment!
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Sat Sep 30 12:55:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed a stupid bug in Key_List::print_hash_function that manifested
|
|
|
|
itself if the `-k$' option was given (i.e., only use the key[length]
|
|
|
|
character in the hash function).
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Added support for the -C option. This makes the contents of
|
|
|
|
all generated tables `readonly'.
|
|
|
|
|
|
|
|
* Changed the handling of generated switches so that there is
|
|
|
|
only one call to str[n]?cmp. This *greatly* reduces the size of
|
|
|
|
the generated assembly code on all compilers I've seen.
|
|
|
|
|
|
|
|
* Fixed a subtle bug that occurred when the -l and -S option
|
|
|
|
was given. Code produced looked something like:
|
|
|
|
|
|
|
|
if (len != key_len || !strcmp (s1, resword->name)) return resword;
|
|
|
|
|
|
|
|
which doesn't make any sense. Clearly, this should be:
|
|
|
|
|
|
|
|
if (len == key_len && !strcmp (s1, resword->name)) return resword;
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Tue Sep 26 10:36:50 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Changed class Read_Line's definition so that it no longer
|
|
|
|
needs to know about the buffering scheme used to speed up
|
|
|
|
dynamic memory allocation of input keywords and their
|
|
|
|
associated attributes. This means that operator new is no longer
|
|
|
|
a friend of Read_Line.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Mon Sep 25 23:17:10 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Decided that Obstacks had too much overhead, so they were
|
|
|
|
removed in favor of super-efficient, low-overhead buffered
|
|
|
|
storage allocation hacks in Read_Line and List_Node.
|
|
|
|
|
|
|
|
* No longer try to inline functions that g++ complains about
|
|
|
|
(Key_List::Merge and Key_List::Merge_Sort).
|
|
|
|
|
|
|
|
Sun Sep 24 13:11:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Changed classes Read_Line and List_Node to use Obstacks in order
|
|
|
|
to cache memory allocation for keyword strings and List_Nodes.
|
|
|
|
|
|
|
|
* Continued to experiment with inheritance schemes.
|
|
|
|
|
|
|
|
* Added a new file `alpha.h', that declares static data shared
|
|
|
|
(i.e., inherited) between classes List_Node and Key_List.
|
|
|
|
|
|
|
|
Tue Sep 12 16:14:41 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Made numerous changes to incorporate multiple inheritance in
|
|
|
|
gperf.
|
|
|
|
|
|
|
|
Wed Aug 16 23:04:08 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added the -DCOMPILER_FIXED flag to the ./src/Makefile. This
|
|
|
|
implies that people trying to compile gperf need to have a
|
|
|
|
working version of the new g++ compiler (1.36.0).
|
|
|
|
|
|
|
|
* Removed some extra spaces that were being added in the generated
|
|
|
|
C code.
|
|
|
|
|
|
|
|
Mon Jul 24 17:09:46 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Fixed PRINT_HASH_FUNCTION and PRINT_LOOKUP_FUNCTION in keylist.c
|
|
|
|
so that the generated functions take an unsigned int length argument.
|
|
|
|
If -a is enabled the prototype is (const char *str, size_t len).
|
|
|
|
|
|
|
|
Fri Jul 21 13:06:15 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Fixed a typo in PRINT_KEYWORD_TABLE in keylist.cc that prevented
|
|
|
|
the indentation from working correctly.
|
|
|
|
|
1996-09-10 13:48:14 +00:00
|
|
|
* Fixed a horrible typo in PRINT_KEYWORD_TABLE in keylist.cc
|
|
|
|
that prevented links from being printed correctly.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Tue Jul 18 16:04:31 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed up readline.cc and readline.h so that they work OK
|
|
|
|
with g++ compilers that aren't completely up-to-date.
|
|
|
|
If symbol COMPILER_FIXED is defined then the behavior
|
|
|
|
that works on my more recent version of g++ is enabled.
|
|
|
|
|
1996-09-10 13:48:14 +00:00
|
|
|
Sun Jul 9 17:53:28 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Changed the ./tests subdirectory Makefile so that it
|
|
|
|
uses $(CC) instead of gcc.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Sun Jul 2 21:52:15 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Fixed a number of subtle bugs that occurred when -S was
|
|
|
|
combined with various and sundry options.
|
|
|
|
|
|
|
|
* Added the -G option, that makes the generated keyword table
|
|
|
|
a global static variable, rather than hiding it inside
|
|
|
|
the lookup function. This allows other functions to directly
|
|
|
|
access the contents in this table.
|
|
|
|
|
|
|
|
* Added the "#" feature, that allows comments inside the keyword
|
2000-03-25 07:45:29 +00:00
|
|
|
list from the input file. Comment handling takes place in readline.c.
|
|
|
|
This simplifies the code and reduces the number of malloc calls.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Also added the -H option (user can give the name of the hash
|
|
|
|
function) and the -T option (prevents the transfer of the type decl
|
|
|
|
to the output file, which is useful if the type is already defined
|
|
|
|
elsewhere).
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Thu Jun 22 20:39:39 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Modified many classes so that they would inherit Std_Err as
|
|
|
|
a base class. This makes things more abstract...
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Fri Jun 16 14:23:00 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Modified the -f (FAST) option. This now takes an argument.
|
|
|
|
The argument corresponds to the number of iterations used
|
|
|
|
to resolve collisions. -f 0 uses the length of the
|
|
|
|
keyword list (which is what -f did before). This makes
|
|
|
|
life much easier when dealing with large keyword files.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Tue Jun 6 17:53:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Added the -c (comparison) option. Enabling this
|
|
|
|
will use the strncmp function for string comparisons.
|
|
|
|
The default is to use strcmp.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Fixed a typo in key_list.cc (PRINT_SWITCH). This caused
|
|
|
|
faulty C code to be generated when the -D, -p, and -t
|
|
|
|
options were all enabled.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Thu May 25 14:07:21 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Once again, changed class Read_Line to overload global operator
|
|
|
|
new. Hopefully, this will work...!
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Sun May 21 01:51:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Modified Key_List::print_hash_function () so that it properly
|
|
|
|
formats the associated values in the hash table according to
|
|
|
|
the maximum number of digits required to represent the largest
|
|
|
|
value.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Removed the named return value from class Hash_Table's
|
|
|
|
operator (), since this causes a seg fault when -O is enabled.
|
|
|
|
No sense tripping subtle g++ bugs if we don't have to.... ;-)
|
|
|
|
|
|
|
|
* Removed the operator new hack from Read_Line, since this seemed
|
|
|
|
to create horrible bus error problems.
|
|
|
|
|
|
|
|
* Changed many class member functions and data members to be `static',
|
|
|
|
if they don't manipulate this!
|
|
|
|
|
|
|
|
Fri May 12 23:06:56 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Changed class Std_Err to use static member functions, a la
|
|
|
|
Ada or Modula 2. This eliminates the need for an explicit
|
|
|
|
error-handler class object.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Added the ``named return value'' feature to Hash_Table::operator ()
|
|
|
|
and Bool_Array::operator [], just for the heck of it.... ;-)
|
|
|
|
|
|
|
|
* Changed the previous hack in Read_Line so that we now use
|
|
|
|
the overloaded global `new' instead of NEW_STRING!
|
|
|
|
|
|
|
|
Wed May 3 17:36:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Updated to version 1.7. This reflects the recent major changes
|
|
|
|
and the new C port.
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Modified the GNU getopt.cc routine to have a class-based interface.
|
|
|
|
|
|
|
|
* Fixed a typo in Perfect.cc ~Perfect that prevented the actual maximum
|
|
|
|
hash table size from being printed (maybe the stream classes
|
|
|
|
weren't so bad after all.... ;-).
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Added support for the -f option. This generates the perfect
|
|
|
|
hash function ``fast.'' It reduces the execution time of
|
|
|
|
gperf, at the cost of minimizing the range of hash values.
|
|
|
|
|
|
|
|
Tue May 2 16:23:29 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
* Added an efficiency hack to Read_Line. Instead of making
|
|
|
|
a call to operator NEW (a.k.a. malloc) for each input string
|
|
|
|
a new member function NEW_STRING stores a large buffer from
|
|
|
|
which new strings are carved out, growing the buffer if
|
|
|
|
necessary. It might be useful to add this throughout the
|
|
|
|
program....
|
|
|
|
|
|
|
|
* Removed all unnecessary calls to DELETE. If the program is about
|
|
|
|
to exit it is silly to waste time freeing memory.
|
|
|
|
|
|
|
|
* Added the GNU getopt program to the distribution. This makes
|
|
|
|
GPERF portable to systems that don't include getopt in libc.
|
|
|
|
|
|
|
|
* Added a strcspn member to class Key_List. This also increases
|
|
|
|
portability.
|
|
|
|
|
|
|
|
* Added the get_include_src function from keylist.c as a member
|
|
|
|
function in class Key_List. Hopefully every function is
|
|
|
|
now associated with a class. This aids abstraction and
|
|
|
|
modularity.
|
1996-09-10 13:48:14 +00:00
|
|
|
|
|
|
|
* Ported gperf to C. From now on both K&R C and GNU G++ versions
|
2000-03-25 07:45:29 +00:00
|
|
|
will be supported. There will be two ChangeLog files, one
|
|
|
|
for each version of the program.
|
|
|
|
|
|
|
|
Mon May 1 16:41:45 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed a bug with -k'*'. This now prints out *all* the cases
|
|
|
|
up to the length of the longest word in the keyword set.
|
|
|
|
|
|
|
|
Sun Apr 30 12:15:25 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Removed all use of the stream classes. Too ugly, slow, and
|
|
|
|
not handled by the c++-mode formatter....
|
|
|
|
|
|
|
|
* Modified the handling of links (i.e., keywords that have
|
|
|
|
identical hash values as other keywords). This should
|
|
|
|
speed up hash function generation for keyword sets with
|
|
|
|
many duplicate entries. The trick is to treat duplicate
|
|
|
|
values as equivalence classes, so that each set of duplicate
|
|
|
|
values is represented only once in the main list processing.
|
|
|
|
|
|
|
|
* Fixed some capitialization typos and indentations mistakes in
|
|
|
|
Key_List::print_hash_function.
|
|
|
|
|
|
|
|
Sat Apr 29 12:04:03 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed a typo/logico in Key_List::print_switch that prevented
|
|
|
|
the last keyword in the keyword list to be print out. This
|
|
|
|
requires further examination.....
|
|
|
|
|
|
|
|
* Fixed a stupid bug in List_Node::List_node. If the -k'*' option
|
|
|
|
was enabled the KEY_SET string wasn't getting terminated with
|
|
|
|
'\0'!
|
|
|
|
|
|
|
|
Fri Apr 28 12:38:35 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Renamed strexp.h and strexp.cc to iterator.h and iterator.cc.
|
|
|
|
Also changed the strexp class to iterator. Continued to work
|
|
|
|
on style...
|
|
|
|
|
|
|
|
* Updated the version number to 1.6. This reflects all the
|
|
|
|
recent changes.
|
|
|
|
|
|
|
|
Thu Apr 27 00:14:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added the -D option that properly handles keyword sets that
|
|
|
|
contain duplicate hash values.
|
|
|
|
|
|
|
|
* Continued the stylistic changes. Added the #pragma once
|
|
|
|
directive to all the *.h files. Removed all #defines and
|
|
|
|
replaced them with static consts. Also moved the key_sort
|
|
|
|
routine from options.cc into the options class as a
|
|
|
|
member function.
|
|
|
|
|
|
|
|
Mon Apr 3 13:26:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
|
|
|
|
|
|
|
|
* Made massive stylistic changes to bring source code into
|
|
|
|
conformance with GNU style guidelines.
|
|
|
|
|
|
|
|
Thu Mar 30 23:28:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed up the output routines so that they generate code
|
|
|
|
corresponding to the GNU style guidelines.
|
|
|
|
|
|
|
|
Sat Mar 11 13:12:37 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed Stderr constructors so that they wouldn't try to
|
|
|
|
use the base class initializer syntax for the static
|
|
|
|
class variable Program_Name. G++ 1.34 is stricter in
|
|
|
|
enforcing the rules!
|
|
|
|
|
|
|
|
Fri Mar 10 11:24:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Removed -v and ``| more'' from the Makefile to keep rfg happy...
|
|
|
|
|
|
|
|
Thu Mar 2 12:37:30 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Sent latest GNU gperf version 1.5 to Doug Lea for inclusion
|
|
|
|
into libg++ 1.34. Note that there is a small bug with
|
|
|
|
the new %{ ... %} source inclusion facility, since it doesn't
|
|
|
|
understand comments and will barf if %{ or %} appear nested
|
|
|
|
inside the outermost delimiters. This is too trivial of
|
|
|
|
a defect to fix at the moment...
|
1996-09-10 13:48:14 +00:00
|
|
|
|
2000-03-25 07:45:29 +00:00
|
|
|
Tue Feb 28 11:19:58 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added the -K option, which allows the user to provide a
|
|
|
|
alternative name for the keyword structure component.
|
|
|
|
The default is still ``name.''
|
|
|
|
|
|
|
|
* Added the LEX and YACC-like ability to include arbitrary
|
|
|
|
text at the beginning of the generated C source code output.
|
|
|
|
This required two new functions Get_Special_Input,
|
|
|
|
Key_List::Save_Include_Src;
|
|
|
|
|
|
|
|
* Fixed memory allocation bug in Key_List::Set_Types.
|
|
|
|
Variable Return_Type needs 1 additional location
|
|
|
|
to store the "*" if the -p option is used.
|
|
|
|
|
|
|
|
* Added code to NULL terminate both Struct_Tag and Return_Type,
|
|
|
|
*after* the strncpy (stupid mistake).
|
|
|
|
|
|
|
|
Mon Feb 27 14:39:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added a new option -N. This allows the user to specify the
|
|
|
|
name to be used for the generated lookup function. The
|
|
|
|
default name is still ``in_word_set.'' This makes it
|
|
|
|
possible to completely automate the perfect hash function
|
|
|
|
generation process!
|
|
|
|
|
|
|
|
Mon Feb 20 23:33:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Corrected the Hash_Table::operator () function so that
|
|
|
|
*it* is responsible for deciding when a new key has the
|
|
|
|
same signature as a previously seen key. The key length
|
|
|
|
information is now used internally to this function to
|
|
|
|
decide whether to add to the hash table those keys with
|
|
|
|
the same key sets, but different lengths. Before, this
|
|
|
|
was handled by the Key_List::Read_Keys function. However,
|
|
|
|
this failed to work for certain duplicate keys, since
|
|
|
|
they weren't being entered into the hash table properly.
|
|
|
|
|
|
|
|
Sun Feb 19 16:02:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Modified class Options by moving the enum Option_Type out
|
|
|
|
of the class. This is to satisfy the new enumeration
|
|
|
|
scope rules in C++.
|
|
|
|
|
|
|
|
Sun Jan 15 15:12:09 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Incremented the version number upto 1.4 to reflect the new
|
|
|
|
options that affect the generated code. Send the new
|
|
|
|
distribution off to Michael for use with g++ 1.33.
|
|
|
|
|
|
|
|
* Added a fix to Key_List::Read_Keys so that it checks for links
|
|
|
|
properly when the -n option is used. Previously, it didn't
|
|
|
|
catch obvious links, which caused it to spend large amount
|
|
|
|
of time searching for a solution that could never occur!
|
|
|
|
|
|
|
|
* Modified the Key_List data structure to record *both* the
|
|
|
|
minimum and the maximum key lengths. This information
|
|
|
|
is now computed in Key_List::Read_Keys, and thus
|
|
|
|
Key_List::Print_Min_Max doesn't need to bother.
|
|
|
|
|
|
|
|
* Modifed the key position iterator scheme in options.cc to
|
|
|
|
eliminate the need for member function Options::Advance.
|
|
|
|
Now, the Options::Get function performs the advancement
|
|
|
|
automatically, obviating the need for an extra function call.
|
|
|
|
|
|
|
|
* Added the new function Options::Print_Options, to print out
|
|
|
|
the user-specified command line options to generated C
|
|
|
|
output file.
|
|
|
|
|
|
|
|
* Added a new function, Key_List::Print_Keylength_Table,
|
|
|
|
which creates a table of lengths for use in speeding
|
|
|
|
up the keyword search. This also meant that a new
|
|
|
|
option, -l (LENTABLE) is recognized. It controls
|
|
|
|
whether the length table is printed and the comparison
|
|
|
|
made in the generated function ``in_word_set.''
|
|
|
|
|
|
|
|
* Added a comment at the top of the generated C code
|
|
|
|
output file that tells what version of gperf was used.
|
|
|
|
Next, I'll also dump out the command line options
|
|
|
|
as a comment too. Thanks to Michael Tiemann for the
|
|
|
|
feedback on this.
|
|
|
|
|
|
|
|
* Fixed the -n option to make it work correctly with
|
|
|
|
other parts of the program (most notably the Perfect::Hash
|
|
|
|
function and the computation of minimum and maximum lengths.
|
|
|
|
|
|
|
|
Fri Jan 13 21:25:27 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
|
|
|
|
|
|
|
* Realized the the need to add a test that will enable
|
|
|
|
optimziation of the generated C code in the ``hash'' function
|
|
|
|
by checking whether all the requested key positions are
|
|
|
|
guaranteed to exist due to the comparison in `in_word_set.''
|
|
|
|
I'll put this in soon....
|
|
|
|
|
|
|
|
Thu Jan 12 20:09:21 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added pascal, modula3, and modula2 tests inputs to the
|
|
|
|
Makefile
|
|
|
|
|
|
|
|
* Recognised that there is a bug with the -n option. However
|
|
|
|
I'm too busy to fix it properly, right now. The problem
|
|
|
|
is that the generated #define end up being 0, since that's
|
|
|
|
my hack to make -n work. This needs complete rethinking!
|
|
|
|
|
|
|
|
Tue Jan 10 00:08:16 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Added a new option, -n, that instructs gperf to not use the
|
|
|
|
length of an identifier when computing the hash functions.
|
|
|
|
I'm not sure how useful this is!
|
|
|
|
|
|
|
|
* Retransmitted the distribution to rocky.oswego.edu. Hopefully,
|
|
|
|
this will work!
|
|
|
|
|
|
|
|
* Began fixing the indentation and capitalization to conform
|
|
|
|
to the GNU coding guidelines.
|
|
|
|
|
|
|
|
Mon Jan 9 22:23:18 1989 Doug Schmidt (schmidt at pompe.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed horrible bug in Read_Line::Readln_Aux. This was
|
|
|
|
a subtle and pernicous off-by-1 error, that overwrote
|
|
|
|
past the last character of the input string buffer. I
|
|
|
|
think this fault was killing the vax!
|
|
|
|
|
|
|
|
* Yow, fixed an oversight in List_Node::List_Node, where the
|
|
|
|
pointer field Next was uninitialized. Luckily, the new routine
|
|
|
|
seems to return 0 filled objects the first time through!
|
|
|
|
|
|
|
|
Sun Jan 8 13:43:14 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Modified the ``key linked'' diagnostic in Key_List::Read_Keys
|
|
|
|
to be more helpful and easy to read.
|
|
|
|
|
|
|
|
* Fixed the List_Node::List_Node so that it would ignore trailing
|
|
|
|
fields if the -t option was not enabled.
|
|
|
|
|
|
|
|
* Moved the List_Node declarations out of keylist.h and
|
|
|
|
into a file of its own, called listnode.cc and listnode.h
|
|
|
|
Made Set_Sort a member function of class List_Node.
|
|
|
|
|
|
|
|
* Massively updated the documentation in the gperf.texinfo file.
|
|
|
|
|
|
|
|
* Polished off the major revision to the print functions,
|
|
|
|
added a few new tests in the Makefile to check for the
|
|
|
|
validity of the program and ftp'ed the entire distribution
|
|
|
|
off to Doug Lea for libg++. ( changed it to
|
|
|
|
1.3 to reflect the major changes with the generated
|
|
|
|
C code ).
|
|
|
|
|
|
|
|
* Fixed Key_List::Print_Switch to deal with the -p and -t options.
|
|
|
|
This meant that the ``still-born'' function Key_List::
|
|
|
|
Print_Type_Switch was superflous, so I removed it.
|
|
|
|
Also, removed the restriction in Option that the -p and
|
|
|
|
-t options couldn't be used simultaneously.
|
|
|
|
|
|
|
|
* Modified List_Node::List_Node, to perform only 1 call to
|
|
|
|
``new'' when dynamically allocating memory for the Key_Set
|
|
|
|
and the Uniq_Set.
|
|
|
|
|
|
|
|
Sat Jan 7 14:10:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
|
|
|
|
|
|
|
|
* Fixed a big bug with the new policy of nesting the
|
|
|
|
wordlist inside of generated function ``in_word_set.''
|
|
|
|
I'd forgotten to declare the wordlist array as static!
|
|
|
|
( arrgh ).
|
|
|
|
|
|
|
|
* Added a new function Key_List::Set_Types, that figures out
|
|
|
|
the return type for generated function ``in_word_set,''
|
|
|
|
the user-defined ``struct tag,'' if one is used, and also
|
|
|
|
formates the array type for the static local array.
|
|
|
|
|
|
|
|
* Changed the print routines to take advantage of the
|
|
|
|
new -p option.
|
|
|
|
|
|
|
|
* Began adding the hooks to allow the return of a pointer
|
|
|
|
to a user defined struct location from the generated
|
|
|
|
``in_word_set'' function instead of the current 0 or 1
|
|
|
|
return value. Created function Key_List::Print_Type_Switch
|
|
|
|
and added option -p to class Option, allowing the user to
|
|
|
|
request generation of the aforementioned pointers returned
|
|
|
|
instead of booleans.
|
|
|
|
|
|
|
|
* Put in checks in class Option to make sure that -S and -t
|
|
|
|
options are not used simultaneously. This restriction
|
|
|
|
will be removed in subsequent releases, once I decide on
|
|
|
|
a clean way to implement it.
|
|
|
|
|
|
|
|
* Sent version 1.2 to Doug Lea for possible inclusion into
|
|
|
|
the libg++ distribution.
|
|
|
|
|
|
|
|
* Moved the static word_list array inside the generated function
|
|
|
|
in_word_set. This supports better data hiding.
|
|
|
|
|
|
|
|
* Added a texinfo file, gperf.texinfo
|
|
|
|
|
|
|
|
* Revised the Makefile to cleanup the droppings from texinfo
|
|
|
|
and changed the name of gperf.cc and gperf.h to perfect.cc
|
|
|
|
and perfect.h.
|
|
|
|
|
|
|
|
Fri Jan 6 13:04:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
|
|
|
|
|
|
|
|
* Implemented the switch statement output format. Much better
|
|
|
|
for large datasets in terms of space used.
|
|
|
|
|
|
|
|
* Added new functions to break up the Key_List::Output function.
|
|
|
|
Functions added were Key_List::Print_Switch, Key_List::Print_Min_Max,
|
|
|
|
Key_List::Print_Keyword_Table, Key_List::Print_Hash_Function,
|
|
|
|
and Key_List::Print_Lookup_Function. This simplifies the
|
|
|
|
big mess in Key_List::Output considerably!
|
|
|
|
|
|
|
|
* Added switch statement option to Options, which potentially
|
|
|
|
trades time for space in the generated lookup code.
|
|
|
|
|
|
|
|
Thu Jan 5 22:46:34 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
|
|
|
|
|
|
|
|
* Released version 1.1
|
|
|
|
|
|
|
|
* Fixed a bug with Gperf::Merge_Set, it was skipping letters shared
|
|
|
|
between the Set_1 and Set_2.
|
|
|
|
|
|
|
|
* Added the optimal min/max algorithm in Key_List::Output. This
|
|
|
|
runs in O ( 3n/2 ), rather than O ( 2n ) time.
|
|
|
|
|
|
|
|
* Changed Gperf::Sort_Set to use insertion sort, rather than
|
|
|
|
bubble sort.
|
|
|
|
|
|
|
|
* Added a check in Key_List::Output for the special case where
|
|
|
|
the keys used are 1,$. It is possible to generate more
|
|
|
|
efficient C code in this case.
|