1 Wed Aug 4 16:24:42 UTC 2010 Johnny Willemsen <jwillemsen@remedy.nl>
8 Don't use a seperate library, we can't embed gperf as shared library
9 because it has a GPL license
14 Mon Jul 13 15:32:00 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
20 Sun Jun 28 03:20:00 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl>
23 Use doxygen comment tags, small code improvements
26 Build a shared library that can later be used by gperf
31 Wed Jul 02 11:30:00 UTC 2008 Simon Massey <sma at prismtech dot com>
35 Update some missed ACE_OS:: in generated code. This was hi-lighted
36 by test code built with cygwin build which produced:
37 cpp.cpp: In function `const char* in_word_set(const char*, unsigned int)':
38 cpp.cpp:179: error: `strcmp' undeclared (first use this function)
40 Original modification done with "ace" changelog entry:
41 Sat Jun 30 05:11:43 UTC 2007 Abdullah Sowayan <abdullah.sowayan@lmco.com>
42 Changed code generated by gperf for usage by the IDL compiler to use functions
43 in ACE_OS instead of raw OS calls.
45 Wed Sep 20 23:26:33 UTC 2007 Ossama Othman <ossama_othman at symantec dot com>
47 * src/Key_List.cpp (output_switch):
49 No need to use the ACE_AUTO_PTR_RESET macro. The
50 ACE_Auto_Base_Array_Ptr<> class template provides the reset
53 Mon Oct 24 02:36:08 UTC 2006 Ossama Othman <ossama_othman at symantec dot com>
55 * apps/gperf/src/Key_List.cpp:
57 Addressed Coverity RESOURCE_LEAK errors.
59 Thu Sep 21 11:54:54 UTC 2006 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu>
61 * src/Key_List.cpp (output_hash_function): Fixed a bug where the
62 wrong type is chosen if max_hash_value was == UCHAR_MAX or
63 _USHRT_MAX. Thanks to Jody Hagins <jody at atdesk dot com> for
64 this fix. This fixes bug id 2655.
66 Tue Mar 14 21:08:12 UTC 2006 jiang,shanshan <shanshan.jiang@vanderbilt.edu>
68 * apps/gperf/src/Gen_Perf.cpp
69 * apps/gperf/src/Key_List.cpp
70 * apps/gperf/src/List_Node.cpp
71 * apps/gperf/src/Options.cpp
72 Updated these files to solve the warnings when setting up "VC level 4 warnings"
73 on Windows. These warnings include "unreachable code", "assignment within
74 conditional expression", "conversion from some type to another type, possible
75 loss of data", "local variable may be used without having been initialized" and
77 Thanks to Lukas Gruetzmacher <gruetzmacher at ais-dresden dot de> for
78 motivating the fix to these "VC level 4 warnings".
80 Wed Jan 4 22:55:24 UTC 2006 J.T. Conklin <jtc@acorntoolworks.com>
85 Delete-trailing-whitespace.
87 Added "Local Variables" section defining "add-log-time-format"
88 to a really ugly lambda expression that formats changelog
89 timestamps in UTC and works with both GNU Emacs and XEmacs.
91 Mon Oct 3 13:52:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
94 Fixed might be unitialized warning in Cygwin build
96 Thu Jun 9 18:34:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
99 Only generate the base pointer when it is used. Fixes bugzilla 2099.
100 Thanks to Frank Pilhofer <fp@mc.com>
102 Sat Apr 30 10:56:12 UTC 2005 Johnny Willemsen <jwillemsen@remedy.nl>
105 Use option.key_name() instead of opname_, the key name is passed
106 as -K on the commandline. Thanks to Frank Pilhofer <fp@mc.com>
108 Fri Apr 29 09:08:39 2005 Douglas C. Schmidt <schmidt@cs.wustl.edu>
110 * src/Key_List.cpp (output_binary_search_function): Added a
112 do {/* null */} while (&base == 0);
114 to silence warnings on some compilers. Thanks to Frank Pilhofer
117 Fri Aug 5 15:30:00 UTC 2004 Simon Massey <simon.massey@prismtechnologies.com>
119 * apps/gperf/tests/gperf_test.mpb
120 * apps/gperf/tests/tests.mpc
122 gperf is not built on cross compiled targets, thus tests will not run!
123 Therefore added the dependancy to the build of these test.
125 Fri Apr 23 21:18:17 2004 Ossama Othman <ossama@dre.vanderbilt.edu>
127 * src/Options.h (operator !=):
128 * src/Options.cpp (operator !=):
130 Changed return type to bool, as is the norm in modern C++.
132 Tue Jan 20 17:13:29 2004 Steve Huston <shuston@riverace.com>
134 * version.texi: Something in the autoconf build thought it wise to
135 update the date in this file. It matches the last modification
138 Thu Jun 19 14:52:05 UTC 2003 Don Hinton <dhinton@dresystems.com>
145 Added (int) casts to expected results to match the new output.
147 Tue Jun 17 11:38:36 2003 Douglas C. Schmidt <schmidt@macarena.cs.wustl.edu>
149 * src/Key_List.cpp (output_lookup_array):
150 * src/Gen_Perf.cpp (run):
151 * src/Key_List.cpp (already_determined):
152 * src/List_Node.cpp (List_Node): Added casts to prevent GCC 3.3
153 from complaining about stupid stuff... Thanks to Bala for
156 Sun Jul 28 17:04:54 2002 Douglas C. Schmidt <schmidt@ace.cs.wustl.edu>
158 * src/gperf.cpp (main): Only generate the timestamps if the
159 DEBUGGING option ('-d') is enabled. Thanks to Kier Schmitt
160 <SchmittKC@kpt.nuwc.navy.mil> for this suggestion.
162 Tue Feb 26 23:15:47 2002 Ossama Othman <ossama@uci.edu>
166 Added missing "@dircategory" entry. It is required for proper
167 installation when using `install-info'.
169 Use "@direntry" instead of "{START,END}-INFO-DIR-ENTRY"
174 Regenerated this file.
176 Mon Jan 14 14:43:53 2002 Carlos O'Ryan <coryan@uci.edu>
179 Re-generate dependencies.
181 Mon Dec 24 12:47:27 2001 Carlos O'Ryan <coryan@uci.edu>
184 Add temporary fix until something better shows up, at least it
187 Sat Sep 22 09:06:10 2001 Douglas C. Schmidt <schmidt@macarena.cs.wustl.edu>
189 * src/Makefile: Removed the rules.lib.GNU file since it didn't
190 seem to be needed and was causing problems for MinGW. Thanks to
191 Jeff McNiel <JMcNiel@datacrit.com> for reporting this.
193 Wed Sep 19 02:29:37 2001 Carlos O'Ryan <coryan@uci.edu>
196 Another minor problem in the generated Makefile, i.e. the script
197 continues to break for filenames that contain a '+' sign in them.
199 Wed Sep 12 16:06:46 2001 Krishnakumar B <kitty@cs.wustl.edu>
203 Added missing dependency in runtests and entry in realclean for
204 taoout. This fixes a long standing nagging problem.
206 Sat Sep 8 22:40:21 2001 Krishnakumar B <kitty@cs.wustl.edu>
208 * src/Key_List.cpp (output_lookup_array):
210 Removed a compilation warning on 64-bit Linux.
212 Sun Jul 29 12:17:55 2001 Douglas C. Schmidt <schmidt@ace.cs.wustl.edu>
214 * The following changes fix a bug reported by Karl Proese
215 <karl.proese@mchp.siemens.de> and Jeff Parsons.
217 * tests: Patched the *.exp files to include the new WORDLIST_SIZE
220 * src/Key_List.cpp: Generate a new const/enum that defines the
221 size of the wordlist array. This is now used to fix a nasty bug
222 where MAX_HASH_VALUE was used instead of WORDLIST_SIZE.
224 * src/Key_List.cpp (output_lookup_array): Reformatted the
225 debugging output to make it easier to tell what's going on.
227 * tests/tao.exp: Updated this file based on the expected output of
228 the new test example.
230 * tests/tao.gperf: Updated this to use a different set of keys since
231 they exercise the range of screwy inputs better than the earlier
232 contents of this file. In particular, this should detect
233 certain nasty bugs that were plaguing GPERF earlier for keyword
234 sets with a large number of duplicates.
236 * src/Key_List.cpp (read_keys): Clarified the debugging message
237 to indicate the key links are *static*.
239 * src/Options.cpp (parse_args): Fixed a stupid typo...
241 Sun Jul 1 08:33:56 2001 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
243 * tests/Makefile: For some strange reason there was a BIN2 macro
244 but no BIN macro, which caused problems...
246 * tests: Added support to check for the condition that caused
247 TAO's IDL compiler to break on keylists that have a large number
250 * src/Key_List.cpp (output_lookup_function): Fixed a tiny mistake
251 where "slot < MAX_HASH_VALUE" should have been "slot <=
252 MAX_HASH_VALUE". Thanks to Vsevolod Novikov
253 <novikov@df.nnov.rfnet.ru> and Jeff Parsons
254 <parsons@cs.wustl.edu> for helping to track this down.
256 Sat Jun 2 13:30:30 2001 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
258 * src/Makefile (INSTALL): Fixed several minor problems with the
259 Makefile so that this will build correctly on mingw. Thanks to
260 Cristian Ferretti <cristian_ferretti@yahoo.com> for pointing
263 Fri Mar 30 11:30:54 2001 Carlos O'Ryan <coryan@uci.edu>
266 And we need to patch dependencies yet another time.
268 Wed Jan 24 13:44:53 2001 Carlos O'Ryan <coryan@uci.edu>
271 And I got nailed by the same problem again:
272 Just doing 'make depend' generates invalid dependencies for some
273 reason, had to manually patch them.
275 Mon Oct 16 10:34:06 2000 Carlos O'Ryan <coryan@uci.edu>
278 Just doing 'make depend' generates invalid dependencies for some
279 reason, had to manually patch them.
281 Fri Apr 21 20:33:11 2000 Carlos O'Ryan <coryan@uci.edu>
284 Add dependencies for the runtest rule, otherwise parallel builds
287 Thu Apr 20 09:04:27 2000 Carlos O'Ryan <coryan@uci.edu>
290 Just running 'make depend' on this file introduces an spurious
291 'c++' string in the middle of the dependencies. Have no time to
294 Wed Mar 8 17:26:22 2000 Ossama Othman <ossama@uci.edu>
296 * src/Key_List.cpp (Key_List, ~Key_List, output_types):
298 Fixed memory leaks related to lack of deallocation of variables
299 that were initialized with static strings, and then
300 reinitialized with strings that were dynamically allocated.
303 Tue Feb 22 18:25:02 2000 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
310 src/Options.cpp: Renamed the DEBUG enum to DEBUGGING enum
311 to avoid problems with -DDEBUG is enabled. Thanks to
312 Tobin Bergen-Hill <tbhill@dctd.saic.com> for reporting this.
314 Sat Nov 13 18:43:53 1999 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
316 * src/Key_List.cpp: The code for output_lookup_function() was
317 not being called if option[GLOBAL] was set. Thanks to Eugene
318 Surovegin <ebs@glasnet.ru> for reporting the bug and the fix.
320 Tue Aug 31 14:47:06 1999 Pradeep Gore <pradeep@flamenco.cs.wustl.edu>
323 Fix for Bug#:250 - The Makefile now uses ACE's build commands.
324 This also gets rid of the build warning on egcs when compiling
325 with repo=1. Thanks to David, Ossama, Bala and Yamuna.
327 Thu Jul 1 09:31:32 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
330 If we are cross compiling we shouldn't compile gperf, it is not
331 going to help anyway, because we could not run it.
333 Sun Jun 27 20:40:30 1999 Douglas C. Schmidt <schmidt@ace.cs.wustl.edu>
335 * src/Key_List.cpp: Added some initializers to keep EGCS from
338 Wed Jun 23 07:24:58 1999 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
340 * src/Key_List.cpp (output_hash_function): Use conditional
341 compilation rather than a runtime check to test if
342 ACE_STANDARD_CHARACTER_SET_SIZE == ACE_EBCDIC_SIZE. This
343 suppresses a warning on DEC UNIX. Thanks to David Levine for
346 Fri Jun 18 16:54:43 1999 Irfan Pyarali <irfan@cs.wustl.edu>
348 * apps/gperf/src/Key_List.cpp (output_lookup_array): Prefixed
349 debug message with "GPERF".
351 Thu Jun 17 18:04:30 1999 Douglas C. Schmidt <schmidt@mambo.cs.wustl.edu>
353 * tests/test-[1-5].exp: Fixed all the tests to account for the new
356 Thu Jun 17 17:25:00 1999 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
358 * src/Key_List.cpp (output_hash_function): Generate an asso_values
359 table that will have the appropriate values for both EBCDIC or
360 ASCII, depending on the platform.
362 * src/Key_List.cpp (output_hash_function),
363 src/Gen_Perf.cpp (Gen_Perf),
364 src/Vectors.h: Replaced the use of ALPHA_SIZE with
365 ACE_STANDARD_CHARACTER_SET_SIZE, which works correctly for
366 EBCDIC platforms, as well as ASCII ones. Thanks to
367 Jim Rogers <jrogers@viasoft.com> for this suggestion.
369 Wed Jun 16 19:08:01 1999 Alexander Babu Arulanthu <alex@cs.wustl.edu>
371 * src/Key_List.cpp: Fixed the key_word table generation so that it
372 generates the "default fill" string for the null entries in the
373 table. Thanks to Irfan and Naga for helping in this.
375 Sun Jun 6 15:47:23 1999 Douglas C. Schmidt <schmidt@danzon.cs.wustl.edu>
377 * src/Key_List.cpp (output_switch): Make sure to generate "const
378 char *resword;" rather than "char *resword" since otherwise C++
379 compilers correctly complain.
381 * tests: Fixed a bunch of warnings related to misuses of "const
384 Sun Jun 6 10:30:09 1999 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
386 * tests/test-4.exp: Fixed another use of "index". Thanks to David
387 Levine for reporting this.
389 Sat Jun 5 23:17:39 1999 Douglas C. Schmidt <schmidt@danzon.cs.wustl.edu>
391 * Replaced all uses of "index" with "slot" to avoid problems with
392 broken C++ compilers that define a macro called "index".
394 Tue May 4 14:24:27 1999 Alexander Babu Arulanthu <alex@cs.wustl.edu>
396 * src/Options.cpp (parse_args): Removed %a flag from -v option and
397 used ACE_OS::exit (0) instead.
399 Mon Apr 26 15:42:54 1999 Ossama Othman <othman@cs.wustl.edu>
401 * tests/test-{1,2,3,4,5}.exp: Forgot to update the expected test
402 output to reflect the version string update listed below.
404 Mon Apr 26 10:42:08 1999 Ossama Othman <othman@cs.wustl.edu>
406 * src/Version.cpp (version_string): Updated version string to "2.8
407 (ACE version)" since 2.7 is used by the old Cygnus maintained
410 * src/*.{h,cpp}: Updated copyright/distribution information to GPL
413 Sun Apr 25 16:16:12 1999 Ossama Othman <othman@cs.wustl.edu>
415 * mdate-sh: Added this file to the CVS repository. It will be
416 used once the auto{conf,make} integrations are in place.
418 Sun Apr 25 16:13:40 1999 Ossama Othman <othman@cs.wustl.edu>
420 * COPYING: Updated to GPL version 2.
422 Sat Apr 24 18:18:35 1999 Ossama Othman <othman@cs.wustl.edu>
426 * gperf.texi: Added missing quote, cosmetic fix, regenerated
431 * src/Options.cpp: Merged Cygnus patch that allows the user to
432 specify a default fill expression/value in the keyword table.
433 Updated help message with new `-F' option. Made some cosmetic
434 fixes to the help message, too.
436 * tests/test.cpp: Minor spelling correction in comment
438 * tests/test-6.exp: Updated with new expected gperf output.
440 Mon Nov 9 23:37:09 1998 Vishal Kachroo <vishal@cs.wustl.edu>
442 * src/Key_List.cpp: Fixed the problem with Binary and Linear
445 Sat Oct 10 18:40:56 1998 Vishal Kachroo <vishal@merengue.cs.wustl.edu>
447 * tests/test-6.exp (Usage): copied the output of gperf -h option
448 into test-6.exp. This test was failing because it didn't have
449 the -b option previously. Thanks to David for reporting the
452 * src/Options.cpp : Changed the option case 'h' to include the
453 following line " -b/t Code for Linear Search".
455 Fri Oct 9 01:06:56 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
458 * src/Key_List.cpp (output_linear_search_function): Changed option
459 -z to -b for generating linear search. Removed <len> parameter
460 from the lookup code. We dont need <len> in the generated code
461 in the case of linear/binary search options.
463 Thu Oct 8 17:40:19 1998 Vishal Kachroo <vishal@merengue.cs.wustl.edu>
465 * src/Gen_Perf.cpp (run): added the linear search changes.
466 * src/Gen_Perf.h : added the linear search changes.
467 * src/Options.cpp : added the linear search changes.
468 * src/Options.h : added the linear search changes.
469 * src/Key_List.cpp : added the linear search changes.
470 * src/Key_List.h : added the linear search changes.
473 Wed Oct 7 01:20:35 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
476 Updated thif file to the current help message. Thanks to Hans
479 Tue Oct 6 11:51:47 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
481 * src/Key_List.cpp (Key_List): Fixed g++ warnings.
483 Tue Oct 6 02:48:37 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
485 Thanks to Vishal the following things have been done to get Binary
486 Search code generated from GPERF.
488 * src/Options.cpp (parse_args): Added the -B option for the binary
491 * src/Options.h (enum Option_Type): Added the BINARYSEARCH in the
494 * src/Key_List.cpp : Added the function
495 output_binary_search_function(void). Changed the output function
496 to include the Binary Search option. Used option[BINARYSEARCH]
497 to distinguish the binary search case from the hashing case.
499 * src/Key_List.h : Added the prototype for
500 output_binary_search_function. Also added the key_sort variable
501 to enable sorting based on key values.
503 Mon Oct 5 18:24:15 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
505 * src/Gen_Perf: Created a new function that allows us to split the
506 binary search and perfect hash logic apart. Thanks to Vishal
507 and Alex for reporting this.
509 * src/Key_List.cpp (dump): Fixed the unsigned problems with line
510 1502 YET again... Thanks to David/Darrell for reporting this.
512 Sun Oct 4 20:42:56 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
514 * src: Fixed yet another problem with switching from array-based
515 lookups to switch-based lookups. Thanks to Carlos for reporting
518 Sat Oct 3 19:36:52 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
523 * src/Key_List.cpp: Reverted all the changes done for Binary
526 Sat Oct 3 17:51:10 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
528 * tests/test-6.exp: Added the new -B option.
530 Sat Oct 3 13:47:40 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
532 * src/Key_List.cpp (output_binary_search_function): Added a new
533 line after binary search code.
535 Sat Oct 3 10:11:15 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
537 * src/Options.cpp (parse_args): Changed the option for binary
540 Fri Oct 2 21:38:54 1998 Vishal Kachroo <vishal@merengue.cs.wustl.edu>
542 * src/Options.cpp (parse_args): Added the -b option for the binary
545 * src/Options.h (enum Option_Type): Added the BINARYSEARCH in the
548 * src/Key_List.cpp : Added the function
549 output_binary_search_function (void). Changed the output
550 function to include the Binary Search option. Used
551 option[BINARYSEARCH] to distinguish the binary search case from
554 * src/Key_List.h : Added the prototype for
555 output_binary_search_function. Also added the key_sort variable
556 to enable sorting based on key values.
558 Thu Oct 1 12:40:59 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
560 * src/Options.cpp (parse_args): Comments for Vishal to incorporate
561 Binary Seach on to GPERF.
563 Wed Sep 30 16:55:53 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
565 * tests/Makefile: Updated dependencies, added a realclean target
566 to remove the output from the tests.
568 Wed Sep 30 12:41:29 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
570 * src/Key_List.cpp (dump): Fixed another signed/unsigned int
571 mismatch. Thanks to David Levine for reporting this.
573 Mon Sep 28 13:18:05 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
575 * tests: Updated all the test-*.exp files to reflect the latest
578 * src/Key_List.cpp (output_hash_function): Fixed another use of
579 int to be unsigned int.
581 * tests/test.cpp: Fixed the signature of in_word_set() to be
582 consistent with the new gperf. Thanks to David Levine and
583 Carlos O'Ryan for this fix.
585 Sun Sep 27 00:04:18 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
587 * src/Key_List.cpp (dump): Reverted back to using int for
588 keyword_width to keep certain compilers happy. Thanks to David
589 Levine for reporting this.
591 * src/Key_List: MAke sure that we don't generate the lookup table
592 twice if we're forced to change to the switch format.
594 * src/Key_List: Replaced the use of "int" with "unsigned int" for
595 parameters and hash values.
597 * src/Key_List: Fixed the code so that if we change over to using
598 the switch statement then we use the already generated keyword
599 table appropriately. This prevents unnecessary warnings from
600 some C++ compilers. Thanks to David Levine for reporting this.
602 * src/Key_List.cpp (output): If it's not possible to use the
603 lookup_array implementation of -D (e.g., because there aren't
604 enough empty slots in the lookup_array), then default to using
605 -S1 option... This fixes a nasty bug that's been in gperf for
608 * src/Key_List.cpp: (output_lookup_array): Added a "return 0" to
609 make the C++ compiler happy. Thanks to David for noticing this.
611 * tests/c++-res.exp: Added a new test for C++ keywords.
613 * tests/corba.gperf: Added a proper test for CORBA keywords.
615 Sat Sep 26 15:32:56 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
617 * src/Hash_Table.cpp (find): Fixed a bug in the increment
618 computation that arose if the -n option was given.
620 * src: Removed all set_ and get_ prefixes to be more consistent
621 with ACE programming guidelines.
623 * src: GPERF now Purifies cleanly.
625 * src/Gen_Perf: Cleaned up the code so that if errors occur they
626 get handled properly.
628 * src/List_Node: Added a destructor to remove the memory when
631 * src: Continued to tidy up the source code so that it is better
632 designed and Purifies cleanly on shutdown.
634 * src/Makefile: Removed the need for libGperf.{a,so}.
636 * src/Key_List: Changed read_keys() to return a value so that we
637 can check for errors.
639 Fri Sep 25 08:54:41 1998 David L. Levine <levine@cs.wustl.edu>
641 * src/Key_List.cpp (Key_List ctor): reordered initializers to
642 match declaration order.
644 Thu Sep 24 18:20:36 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
646 * src/Key_List: Changed char_set field to keysig to be consistent
649 * src/Hash_Table: Renamed operator() to find(). What the heck was
652 * src/gperf.cpp (main): Removed the LARGE_STACK_ARRAYS option.
655 Tue Sep 22 21:30:59 1998 David L. Levine <levine@cs.wustl.edu>
657 * tests/corba.exp: added this file, it hadn't been checked in.
659 Tue Sep 22 18:02:01 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
661 * tests/Makefile: Added a new test for CORBA keywords.
663 * tests: Added a new test for the type of input that is causing
664 problems with TAO's IDL compiler.
666 * src/Key_List.cpp (output_lookup_array): Changed the assertion
667 from assert (i != 0) to assert (i >= 0) since I think that's
668 correct... (ah, so THAT's why comments are important thinks the
671 * src/Options: Improved the comments for the '-h' option to
672 reflect current reality...
674 Thu Sep 17 11:42:53 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
676 * src/Key_List.cpp (output_lookup_array): Put 'signed' keyword
677 before 'char lookup' to avoid problems on platforms where char
678 is defined as unsigned. Thanks to Margherita Vittone Wiersma
679 <vittone@fndaub.fnal.gov> for reporting this.
681 Wed Sep 16 19:08:13 1998 David L. Levine <levine@cs.wustl.edu>
683 * Makefile: don't run build/run tests on CROSS-COMPILE platforms.
684 Thanks to Raja Ati <rati@montereynets.com> for reporting this
687 Wed Sep 16 18:18:41 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
689 * tests/Makefile: Changed CFLAGS to CCFLAGS to make aCC happy on
690 HP/UX. Thanks to John Mulhern for reporting this.
692 Tue Sep 15 18:14:08 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
694 * tests/test-6.exp (Usage): Fixed the usage so diff should no
695 longer complain... Thanks to David for reporting this.
697 Tue Sep 15 21:54:07 1998 David L. Levine <levine@cs.wustl.edu>
699 * tests/Makefile: filter timestamps from test output so that
702 Tue Sep 15 18:14:08 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
704 * tests: Updated the expected output to look for 2.7 vs 2.6
707 Thu Sep 10 16:50:21 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
710 The test programs were not linking against ACE.
712 Tue Sep 8 12:45:53 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
714 * tests/test.cpp: Added #include "ace/OS.h" so that the ACE_RCSID
715 macro is defined. Thanks to Arturo Montes
716 <mitosys@colomsat.net.co> for reporting this.
718 Sat Aug 22 08:44:15 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
720 * src/Options.cpp : Fixed the typo (-V instead of -v) under 'case
723 Fri Aug 21 11:57:57 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
725 * src/Key_List.cpp (set_output_types): Make sure that we leave an
726 extra space between the struct tag and the wordlist so the
727 compiler doesn't complain. Thanks to Andy Gokhale for reporting
730 * src/gperf.cpp: Modified the main() program so that it doesn't
731 print the starting time until AFTER we've parsed the arguments.
733 * src/Version.cpp: Updated the version to 2.7 to reflect the
736 * src/Options.cpp (operator): Added a new -V option, which just
737 exits with a value of 0. This is useful for checking if gperf
738 exists in the search path. We use the feature in TAO.
740 * src: Removed the globally overloaded new operator. This was a
741 portability pain and didn't really improve performance very
744 * src/Options.cpp (operator): Fixed '%e' to be '%r' to come up to
745 speed with ACE changes.
747 Sat Aug 15 07:59:58 1998 David L. Levine <levine@cs.wustl.edu>
749 * src/gperf.cpp (main): added ACE_UNUSED_ARGS for argc and
750 argv if ! ACE_HAS_GPERF.
752 Fri Aug 14 13:47:00 1998 David L. Levine <levine@cs.wustl.edu>
754 * src/new.cpp (delete): aded ACE_UNUSED_ARG (ptr).
756 Fri Jul 31 18:28:45 1998 Gonzalo Diethelm <gonzo@tango.cs.wustl.edu>
758 * src/Bool_Array.cpp:
760 * src/Hash_Table.cpp:
770 Added ACE_RCSID to these files.
772 Tue Jul 21 09:30:51 1998 David L. Levine <levine@cs.wustl.edu>
774 * src/gperf.cpp (main): added a trivial main () if ! ACE_HAS_GPERF,
775 so that the link succeeds.
777 Mon Jul 20 16:02:18 1998 David L. Levine <levine@cs.wustl.edu>
779 * src/Makefile: fixed INSTALL. It works with the latest
780 $ACE_ROOT/include/makeinclude/rules.lib.GNU.
782 Mon Jul 20 15:35:59 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
784 * Wrapped all the files with "#if defined (ACE_HAS_GPERF)" so that
785 it compiles on appropriate platforms.
787 Sun Jul 19 22:21:17 1998 David L. Levine <levine@cs.wustl.edu>
789 * src/new.cpp (new): wrapped assignment with parens where used
792 * src/Iterator.cpp (Iterator), List_Node.cpp (List_Node),
793 Hash_Table.cpp (Hash_Table):
794 reordered initializers to match declaration order.
796 * src/Hash_Table.cpp (~Hash_Table),
797 * src/Bool_Array.cpp (init): cast sizeof
798 to int to avoid compiler (g++/Linux alpha) warning about
799 mismatch with %d format specifier.
801 * src/new.cpp (new): use ACE_THROW_SPEC instead of
804 Sun Jul 19 13:11:59 1998 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
806 * src/new.cpp: Added support for the _RWSTD_THROW_SPEC macro for
807 DEC UNIX. Thanks to David Levine for reporting this.
809 * src/Key_List.cpp: Fixed one of those nasty "for loop counter
810 scoping glitches. Again, thanks to David Levine and DEC C++ for
811 catching this. * src/Key_List.cpp (reorder): Clarified the code
812 so that we don't write horrible C-style hacks. Thanks to David
813 Levine and the DEC C++ compiler for finding this one!
815 Tue Jun 30 15:43:16 1998 Alexander Babu Arulanthu <alex@cs.wustl.edu>
819 * src/Key_List.cpp : Added the following options to gperf.
820 - "-m" To mute warnings. (If -D option is enabled,
821 gperf doesnt say anything about duplicate hash
823 - "-M" To skip class definition while in C++ mode.
824 - "-J" To skip the line "#include <string.h>" in the
827 Thu May 14 16:37:39 1998 Douglas C. Schmidt <schmidt@flamenco.cs.wustl.edu>
829 * src: ACE'ifed most of the gperf source code, yow!
831 Sun Apr 14 14:31:10 1996 Douglas C. Schmidt (schmidt@tango.cs.wustl.edu)
833 * src: Changed things so that there's no longer any use of the
834 Read_Line and Std_Err code. All of this has been pushed into
835 the ACE components, which is where it belongs...
837 * src: Changed things so that there's no longer any use of the
838 pointless inheritance in the code. This was a result of my not
839 understanding inheritance back in 1989... ;-)
841 * Began to integrate GNU gperf into the ACE release. Started off
842 by bringing the standard GNU version up to date wrt to the
843 changes I made back in 1991!
845 Tue Oct 10 16:37:28 1995 Mike Stump <mrs@cygnus.com>
847 * src/new.cc: Since malloc/delete are not paired, we cannot call
850 Wed Jan 4 12:40:14 1995 Per Bothner <bothner@kalessin.cygnus.com>
852 * src/Makefile.in ($(TARGETPROG)): Link with $(LDFLAGS).
853 Patch from John Interrante <interran@uluru.stanford.edu>.
855 Sat Nov 5 19:12:48 1994 Jason Merrill (jason@phydeaux.cygnus.com)
857 * src/Makefile.in (LIBS): Remove.
859 Tue Oct 18 17:51:14 1994 Per Bothner <bothner@kalessin.cygnus.com>
861 * src/std-err.cc: Use stderror, instead of the non-standard
862 sys_nerr and sys_errlist.
864 Sat Sep 17 22:02:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
866 * src/key-list.cc (output_hash_function):
867 Patch from William Bader <wbader@CSEE.Lehigh.Edu>.
869 Fri Jul 15 09:38:11 1994 Per Bothner (bothner@cygnus.com)
871 * src/std-err.cc: #include <errno.h>, and only declare
872 extern int errno if errno is not a macro.
874 Mon May 30 17:29:34 1994 Per Bothner (bothner@kalessin.cygnus.com)
876 * Makefile.in (src_all, install): Make sure to add '/' after
877 `pwd` in $rootme, as expected by FLAGS_TO_PASS.
879 Wed May 11 00:47:22 1994 Jason Merrill (jason@deneb.cygnus.com)
881 Make libg++ build with gcc -ansi -pedantic-errors
882 * src/options.h: Lose commas at end of enumerator lists.
884 Sun Dec 5 19:16:40 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
886 * src/hash-table.cc (Hash_Table::~Hash_Table): Don't pass an
887 argument to fprintf, since it's not expecting one.
889 Fri Nov 26 19:03:18 1993 Per Bothner (bothner@kalessin.cygnus.com)
891 * src/list-node.cc: #undef index, for the sake of broken NeXT,
893 Thu Nov 4 11:16:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
895 * Makefile.in (install): Use INSTALL_DATA for gperf.1.
897 Mon Oct 25 18:40:51 1993 Per Bothner (bothner@kalessin.cygnus.com)
899 * src/key-list.cc (Key_List::read_keys): Use POW macro
900 to increase hash table size to power of 2.
902 * options.h (LARGE_STACK_ARRAYS): New flag. Defaults to zero.
903 * gen-perf.cc, key-list.cc, read-line.cc:
904 Only stack-allocate large arrays if LARGE_STACK_ARRAYS is set.
905 * main.cc (main): Only call setrlimit (RLIMIT_STACK, ...)
906 if LARGE_STACK_ARRAYS.
908 Mon Oct 4 17:45:08 1993 Per Bothner (bothner@kalessin.cygnus.com)
910 * src/gen-perf.cc: Always use ANSI rand/srand instead of BSDisms.
912 Wed Aug 18 12:19:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
914 * Makefile.in (src_all): Make less verbose output.
916 Fri May 28 14:01:18 1993 Per Bothner (bothner@rtl.cygnus.com)
918 * src/gen-perf.cc (Gen_Perf::change): Don't use gcc-specific
919 2-operand conditional expression.
920 * src/key-list.cc (Key_List::output_lookup_array):
921 Don't use variable-size stack arrays, unless compiled by g++.
923 Tue May 4 14:08:44 1993 Per Bothner (bothner@cygnus.com)
925 Changes (mostly from Peter Schauer) to permit compilation
926 using cfront 3.0 and otherwise be ARM-conforming.
927 * src/key-list.h: class Key_List must use public derivation
928 of base class Std_Err (because Gen_Perf::operator() in gen-perf.cc
929 calls Std_Err::report_error).
930 * src/gen-perf.cc (Gen_Perf::affects_prev), src/hash-table.cc
931 (Hash_Table::operator()): Don't use gcc-specific 2-operand
932 conditional expression.
933 * src/iterator.cc (Iterator::operator()): Don't use gcc-specific
934 range construct in case label.
935 * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys),
936 src/gen-perf.cc (Gen_Perf::operator(), src/read-line.cc
937 (Read_Line::readln_aux): If not gcc, don't allocate
938 variable-sized arrays on stack.
939 * src/new.cc (operator new): Argument type should be size_t.
940 * key-list.cc (Key_List::output_lookup_array, Key_List::read_keys),
941 new/cc (::operator new): Don't use non-standard >?= operator.
943 Tue Apr 27 20:11:30 1993 Per Bothner (bothner@cygnus.com)
945 * src/Makefile.in: Define TARGETPROG, and use it.
947 Mon Apr 19 00:29:18 1993 Per Bothner (bothner@cygnus.com)
949 * Makefile.in, configure.in: Re-vamped configure scheme.
950 * gperf.texinfo: Renamed to gperf.texi.
951 * src/bool-array.{h,cc}: ANSIfy bzero->memset.
953 Sat Jan 30 20:21:28 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
955 * tests/Makefile.in (mostlyclean): Also delete aout, cout, m3out,
958 Tue Dec 29 08:58:17 1992 Ian Lance Taylor (ian@cygnus.com)
960 * Makefile.in: pass $(FLAGS_TO_PASS) to all calls to make.
961 (FLAGS_TO_PASS): added INSTALL, INSTALL_DATA, INSTALL_PROGRAM.
963 Mon Dec 21 18:46:46 1992 Per Bothner (bothner@rtl.cygnus.com)
965 * tests/expected.* renamed to *.exp to fit in 14 chars.
966 * tests/Makefile.in: Update accordingly.
967 Also rename output.* to *.out.
968 * src/Makefile.in (clean): Remove gperf program.
970 Wed Dec 9 14:33:34 1992 Per Bothner (bothner@cygnus.com)
972 * src/hash-table.cc, src/bool-array.h: ANSIfy bzero->memset.
974 Thu Dec 3 19:34:12 1992 Per Bothner (bothner@cygnus.com)
976 * Makefile.in (distclean, realclean): Don't delete
977 Makefile before recursing.
979 Fri Nov 6 13:41:49 1992 Per Bothner (bothner@rtl.cygnus.com)
981 * key-list.{h,cc}: Remove MAX_INT (and similar) constant
982 fields from Key_List class, and use INT_MAX (etc) from limits.h.
983 * key-list.{h,cc}, options.{h,cc}, vectors.h: Removed all
984 uses of initialized const fields, as they are non-standard
985 - and their use was easy to do away with. Mostly, just
986 made the constants static non-fields in the .cc file.
988 Mon Nov 2 13:10:11 1992 Per Bothner (bothner@cygnus.com)
990 * tests/Makefile.in: When generating cinset.c, don't pass -C,
991 since -C assumes an ANSI compiler. Add the -C flag (with -a)
992 when generating test.out.3 instead.
993 * tests/expected.out.3: Update accordingly.
995 Wed Aug 12 11:47:54 1992 Per Bothner (bothner@cygnus.com)
997 * Makefile.in: Factor out common flags into $(FLAGS_TO_PASS).
998 * Makefile.in: 'install-info' depends on gperf.info.
1000 Mon Aug 10 11:39:52 1992 Ian Lance Taylor (ian@dumbest.cygnus.com)
1002 * Makefile.in, src/Makefile.in: always create installation
1005 Mon Jul 20 15:33:21 1992 Mike Stump (mrs@cygnus.com)
1007 * src/new.cc (operator new): Add cast from void * to char *,
1008 since it is not a standard conversion.
1010 Wed Jun 17 16:25:30 1992 Per Bothner (bothner@rtl.cygnus.com)
1012 * src/gen-perf.cc: #include <_G_config.h> for _G_SYSV.
1013 * src/key-list.cc: alloca() hair.
1014 * src/main.cc (main): Only call getrlimit if _G_HAVE_SYS_RESOURCE.
1015 * Makefile,in, {src,test}/Makefile.in: Fix *clean rules.
1017 Fri May 29 13:21:13 1992 Per Bothner (bothner@rtl.cygnus.com)
1019 * src/gen-perf.cc: Replace USG -> _G_SYSV.
1021 Thu May 14 13:58:36 1992 Per Bothner (bothner@rtl.cygnus.com)
1023 * src/Makefile.in: Don't pass obsolete flag -DUNLIMIT_STACK.
1024 * tests/Makefile.in (clean): Fix.
1026 Sat Mar 7 00:03:56 1992 K. Richard Pixley (rich@rtl.cygnus.com)
1028 * gperf.texinfo: added menu item hook.
1030 Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
1032 * Makefile.in, configure.in: removed traces of namesubdir,
1033 -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
1034 copyrights to '92, changed some from Cygnus to FSF.
1036 Sun Jan 26 19:21:58 1992 Per Bothner (bothner at cygnus.com)
1038 * tests/Makefile.in: Use re-directed stdin instead of file
1039 name in argv. This allows us to remove the filename
1040 from the output, the expected output, and hence the diffs.
1041 (Note that the input file is in $(srcdir), which we cannot
1042 place in the expected out files.)
1043 * tests/expected.out.[1235]: Edit out input filename,
1044 to match new output.
1046 Mon Nov 4 15:04:41 1991 Douglas C. Schmidt (schmidt at bastille.ics.uci.edu)
1048 * Need to do something about the end-of-line marker being
1049 hard-coded to '\n'...
1051 * Need to do something about the comment character being
1052 hard-coded to '#'...
1054 Fri Sep 27 09:30:15 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu)
1056 * Fixed a stupid problem with printout out a local enum with the
1057 -E option (I forgot to check for the case of 0 duplicates, so it
1058 was saying 1 duplicate instead!).
1060 Mon Aug 19 00:39:40 1991 Douglas C. Schmidt (schmidt at javel.ics.uci.edu)
1062 * Yow, all finished making gperf run with cfront/Saber C++. Not
1063 really all that hard, actually, though did need to remove some
1064 GNU specific hacks, like dynamically sized arrays and
1065 initializing class data members in their declarations, etc.
1067 * Bumped up the version # to reflect the recent changes.
1069 Sun Aug 18 22:25:32 1991 Douglas C. Schmidt (schmidt at javel.ics.uci.edu)
1071 * Changed passage of Options::usage function in Options.C to have
1072 a leading `&' so that Saber C++ wouldn't complain...
1074 * Added a new header file called gperf.h that includes system-wide
1077 * Hacked up the release to work with Saber C++! Changed all *.cc
1080 Mon Aug 5 21:18:47 1991 Douglas C. Schmidt (schmidt at net1.ics.uci.edu)
1082 * Yow, hacked in the nifty changes to the Std_Err error handling
1083 abstraction. This now adds format string support for printing
1084 out signals and the name of the function when things go wrong.
1085 Make changes throughout the source to make use of the new
1086 facilities and also to make sure all previous uses of
1087 Std_Err::report_error are now prefixed by the name of the class.
1089 Tue Jul 30 00:02:39 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu)
1091 * Make sure to add 1 to the Key_List::total_duplicates value when
1092 printing it out since any time we have more than zero duplicates
1093 we really have two or more duplicates!
1095 * Added support for the -O (optimize option). This option
1096 optimizes the generated lookup function by assuming that all
1097 input keywords are members of the keyset from the keyfile.
1099 * Added #define DUPLICATES and #define HASH_VALUE_RANGE (and of
1100 course the enum equivalent) to the generated output. Don't know
1101 how useful this will be, but it allows us to determine at a
1102 glance whether we've got a minimal perfect hash function (in
1103 which case TOTAL_KEYWORDS = HASH_VALUE_RANGE, and DUPLICATES =
1106 * Fixed a small bug in the Key_List::output_keyword_table routine
1107 that caused an extra newline to be printed if there where no
1108 leading blank entries... (who cares, right?!)
1110 Mon Jul 29 22:05:40 1991 Douglas C. Schmidt (schmidt at net4.ics.uci.edu)
1112 * Modified the handling of the -E (emit enums rather than
1113 #defines) option in conjunction with the -G option. Now, if -G
1114 and -E are given the enums are generated outside the lookup
1115 function, rather than within it!
1117 * Yow, as part of my Software Practice and Experience submission
1118 writeup I realized I needed to make the # comment character work
1119 correctly. Now if you put a backslash character ('\') in front
1120 of the # it treats the first character as a #. Naturally, to
1121 put a '\' character on the front of the line you need to escape
1123 \\I'm a line that starts with only one \
1124 # I'm a comment line
1125 \#define I'm walking a fine line... ;-)
1127 Wed Jun 26 11:21:02 1991 Douglas C. Schmidt (schmidt at bastille.ics.uci.edu)
1129 * Changed all uses of the identifier `iteration_number' to
1130 `generation_number' (also updated the paper!).
1132 Tue Apr 9 07:59:42 1991 Doug Schmidt (schmidt at net4.ics.uci.edu)
1134 * Had to change a whole bunch of little thangs in key-list.cc and
1135 list-node.cc to make the -I option work.
1137 * Changed an alloca statement in key-list.cc to reflect the
1138 strncasecmp modification (i.e., we now need to be able to
1139 allocate a longer buffer if the -I option is used).
1141 Mon Apr 8 18:17:04 1991 Doug Schmidt (schmidt at net4.ics.uci.edu)
1143 * Yucko, there was a bug in the handling of -c (and of course the
1144 new -I command in key-list.cc). Apparently when I added the
1145 super-duper hack that provided support for duplicate keys I
1146 forgot to update the strcmp output...
1148 * Boy, it has been a *long* time since I hacked this puppy. Let's
1149 see, I'm about to add long-overdue support for case-insensitive
1150 string comparisons to gperf's generated output code. We are
1151 going to employ the hitherto unused option -I to indicate this!
1153 Thu Jun 28 16:17:27 1990 Doug Schmidt (schmidt at brilliant)
1155 * Wow, first fix on the new job! There was a dumb error
1156 in Key_List::output_lookup_function, where I printed the
1157 string "&wordlist[key]" instead of the correct "&wordlist[index]".
1159 * Added a couple of #ifdefs for USG support.
1161 Sun Jun 3 17:16:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1163 * Updated the version number to 2.5 and sent to Doug Lea for release
1164 with the latest GNU libg++.
1166 * Changed the error handling when a keyword file cannot be opened
1169 Wed May 30 14:49:40 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1171 * Instrumented the source code with trace statements automagically
1172 inserted using my new automated trace instrumentation tool!
1174 Wed May 9 11:47:41 1990 Doug Schmidt (schmidt at siam.ics.uci.edu)
1176 * Really fixed the previous bug. Turns out that a small amount
1177 of logic had to be duplicated to handle static links that occur
1178 as part of dynamic link chains. What a pain!!!
1180 Tue May 8 23:11:44 1990 Doug Schmidt (schmidt at siam.ics.uci.edu)
1182 * Fixed a stupid bug in Key_List::output_lookup_array that was
1183 causing incorrect counts to be generated when there were both
1184 static and dynamic links occurring for the same hash value.
1185 Also simplified the code that performs the logic in this routine.
1187 Mon Apr 30 17:37:24 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1189 * Fixed stupid bug in Key_List::output_lookup_array that was
1190 making the generated lookup[] array contain `chars' even
1191 when the values stored in the chars are greater than 127!
1193 * Changed the behavior of the -G (global table) option so that it
1194 will output the `length[]' array in the global scope along with
1195 the `word_list[]' array.
1197 * Fixed a stupid bug in Key_List::output_lookup_function that
1198 would always output the complicated `duplicate-handling' lookup
1199 logic, even when there were no duplicates in the input!
1201 * Yikes, had to modify a bunch of stuff in key-list.cc to correctly
1202 handle duplicate entries. Changed the generated code so that
1203 the MIN_HASH_VALUE is no longer subtracted off when calculating
1204 the hash value for a keyword. This required changing some other
1205 code by substituting MAX_HASH_VALUE for TOTAL_KEYS in several places.
1206 Finally, this means that the generated tables may contain leading
1207 null entries, but I suppose it is better to trade-off space to get
1208 faster performance...
1210 Mon Mar 26 13:08:43 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1212 * Updated version number to 2.4 to reflect the latest changes.
1214 * Changed the main program so that it always prints out gperf's
1215 execution timings to the generated output file.
1217 Sun Mar 25 12:39:30 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1219 * Added the -Z option so that users can specify the name of the
1220 generated class explicitly. Updated documentation to reflect
1223 * Modified the generated C++ class interface so that the functions
1224 are declared static (to remove the overhead of passing the `this'
1225 pointer). This means that operator()() can no longer be used,
1226 since it only works on non-static member functions.
1227 Also changed things so that there is no constructor (why waste
1228 the extra call, when it doesn't do anything, eh?)
1230 * Modified the behavior of Key_List::output when the -L C++ option
1231 is enabled. Previously the code generated use const data members
1232 to record MIN_WORD_LENGTH, MIN_HASH_VALUE, etc. However, as
1233 pointed out by James Clark this may result in suboptimal behavior
1234 on the part of C++ compilers that can't inline these values.
1235 Therefore, the new behavior is identical to what happens with
1236 -L C, i.e., either #defines or function-specific enums are used.
1237 Why sacrifice speed for some abstract notion of `code purity?' ;-)
1239 Tue Mar 6 18:17:42 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1241 * Added the -E option that defines constant values using an enum
1242 local to the lookup function rather than with #defines. This
1243 also means that different lookup functions can reside in the
1244 same file. Thanks to James Clark (jjc@ai.mit.edu).
1246 Sat Mar 3 20:19:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
1248 * Added a special case to key_list::output_switch that doesn't
1249 generate extra comparisons when the `-S' is given an argument
1250 of 1 (the normal case). This should speed up the generated
1251 code output a tad...
1253 Fri Feb 23 14:21:28 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
1255 * Renamed all instances of member function get_keysig_size
1256 to get_max_keysig_size, since this is more precise...
1258 * Changed all occurrences of charset to keysig (stands for ``key
1259 signature'') to reflect the new naming convention used in the
1262 Thu Feb 22 11:28:36 1990 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1264 * Changed the name of the generated associated values table from
1265 asso_value to asso_values to reflect conventions in the USENIX
1268 Thu Feb 15 23:29:03 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
1270 * Updated the gperf.texinfo file to fix some formatting problems
1271 that had crept in since last time.
1273 Wed Feb 14 23:27:24 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
1275 * Fixed stupid bug in key-list.cc (get_special_input), wher
1276 gperf replaced each '%' with the succeeding character.
1278 * Added support for multiple target language generation. Currently
1279 handled languages are C and C++, with C as the default. Updated
1280 documentation and option handler to reflect the changes.
1282 * Added a global destructor to new.cc and removed the #ifdef, since
1283 the bloody thing now works with libg++.
1285 Mon Feb 14 13:00:00 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
1287 * Found out that my gperf paper was accepted at the upcoming
1288 USENIX C++ Conference in San Francisco. Yow!
1290 Tue Jan 30 09:00:29 1990 Doug Schmidt (schmidt at zola.ics.uci.edu)
1292 * #ifdef'd out the new.cc memory allocator, since there are
1293 problems with this and the libg++ stuff.
1295 * Changed key-list.h so that class Vectors is a public (rather
1296 than private) base class for class Key_List. The previous
1297 form was illegal C++, but wasn't being caught by the old
1298 g++ compiler. Should work now... ;-)
1300 Sun Dec 10 14:08:23 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1302 * Added several changes from rfg@ics.uci.edu. These changes
1303 help to automate the build process.
1305 Wed Nov 15 15:49:33 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1307 * Removed conditional compilation for GATHER_STATISTICS. There's
1308 really no good reason to avoid collecting this info at run-time,
1309 since that section of code is *hardly* the bottleneck... ;-)
1311 * Simplified the C output routines in Key_List::set_output_types
1312 and Key_List::output_keyword_table a bit in order to
1313 speed-up and clean up the code generation.
1315 * Modified function Key_List::get_special_input so that it does
1316 not try to `delete' a buffer that turned out to be too short.
1317 This is important since the new memory management scheme
1318 does not handle deletions. However, adding a small amount of
1319 garbage won't hurt anything, since we generally don't do this
1320 operation more than a couple times *at most*!
1322 * Created a new file (new.cc) which includes my own overloaded
1323 operator new. This function should dramatically reduce the
1324 number of calls to malloc since it grabs large chunks and
1325 doles them out in small pieces. As a result of this change
1326 the class-specific `operator new' was removed from class List_Node.
1328 Tue Nov 14 21:45:30 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1330 * Continued to refine the great hack. The latest trick is to
1331 try and replace most uses of dynamic memory (i.e., calls to
1332 new) with uses of gcc dynamic arrays (i.e., an alloca solution).
1333 This makes life much easier for the overall process-size, since
1334 it reduces the amount of overhead for memory management. As a
1335 side-effect from this change there is no reason to have the
1336 Bool_Array::dispose member function, so it's outta here!
1338 * Fixed a stupid bug that was an disaster waiting to happen...
1339 Instead of making the boolean array large enough to index
1340 max_hash_value it was only large enough to index max_hash_value
1341 - 1. Once again, an off-by-one mistake in C/C++!!!!
1343 Mon Nov 13 19:38:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1345 * Added the final great hack! This allows us to generate hash tables
1346 for near-perfect hash functions that contain duplicates, *without*
1347 having to use switch statements! Since many compilers die on large
1348 switch statements this feature is essential. Furthermore, it appears
1349 that the generated code is often *smaller* than that put out by
1350 compilers, even though a large, sparse array must be created.
1351 Here's the general idea:
1353 a. Generate the wordlist as a contiguous block of keywords,
1354 just as before when using a switch statement. This
1355 wordlist *must* be sorted by hash value.
1357 b. Generate the lookup array, which is an array of signed
1358 {chars,shorts,ints}, (which ever allows full coverage of
1359 the wordlist dimensions). If the value v, where v =
1360 lookup[hash(str,len)], is >= 0 and < TOTAL_KEYWORDS, then we
1361 simply use this result as a direct access into the wordlist
1362 array to snag the keyword for comparison.
1364 c. Otherwise, if v is < -TOTAL_KEYWORDS or > TOTAL_KEYWORDS
1365 this is an indication that we'll need to search through
1366 some number of duplicates hash values. Using a hash
1367 linking scheme we'd then index into a different part of
1368 the hash table that provides the starting index and total
1369 length of the duplicate entries to find via linear search!
1371 Sun Nov 12 13:48:10 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1373 * Simplified Key_List::output_min_max considerably by recognizing
1374 that since the keyword list was already sorted by hash value finding
1375 the min and max values is trivial!
1377 * Improved the debugging diagnostics considerably in classes Key_List,
1378 Hash_Table, and Gen_Perf.
1380 * Modified the `-s' option so that a negative argument is now
1381 interpreted to mean `allow the maximum associated value to be
1382 about x times *smaller* than the number of input keys.' This
1383 should help prevent massive explosion of generated hash table
1384 size for large keysets.
1386 Sat Nov 11 11:31:13 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1388 * Added a field in class Key_List that counts the total number
1389 of duplicate keywords, both static and dynamic.
1391 * Added a new member function Bool_Array that deletes the dynamic
1392 memory allocated to Bool_Array::storage_array. This space may
1393 be needed for subsequent options, so it made sense to free it as
1396 * Renamed file/class Alpha_Vectors to Vectors, to avoid problems
1397 with 14 character length filenames on SYSV. Also changed file
1398 adapredefined.gperf to adadefs.gperf in the ./tests directory.
1400 * Modified class Options by changing the member function
1401 Options::total_positions to Options::get_charset_size and
1402 Options::set_charset_size. These two routines now either return
1403 the total charset size *or* the length of the largest keyword
1404 if the user specifies the -k'*' (ALLCHARS) option. This change
1405 cleans up client code.
1407 * Merged all the cperf changes into gperf.
1409 * Made sure to explicitly initialize perfect.fewest_collisions to
1412 * Cleaned up some loose ends noticed by Nels Olson.
1413 1. Removed `if (collisions <= perfect.fewest_collisions)'
1414 from Gen_Perf::affects_prev since it was superfluous.
1415 2. Removed the fields best_char_value and best_asso_value
1416 from Gen_Perf. There were also unnecessary.
1417 3. Fixed a braino in the Bool_Array::bool_array_reset
1418 function. Since iteration numbers can never be zero
1419 the `if (bool_array.iteration_number++ == 0)' must be
1420 `if (++bool_array.iteration_number == 0).'
1421 4. Modified Std_Err::report_error so that it correctly handles
1424 * It is important to note that -D no longer enables -S.
1425 There is a good reason for this change, which will become
1426 manifested in the next release... (suspense!).
1428 * Made some subtle changes to Key_List::print_switch so that if finally
1429 seems to work correctly. Needs more stress testing, however...
1431 * Made a major change to the Key_List::print_switch function.
1432 The user can now specify the number of switch statements to generate
1433 via an argument to the -S option, i.e., -S1 means `generate 1
1434 switch statement with all keywords in it,' -S2 means generate
1435 2 switch statements with 1/2 the elements in each one, etc.
1436 Hopefully this will fix the problem with C compilers not being
1437 able to generate code for giant switch statements (but don't
1440 * Changed Key_List::length function to Key_List::keyword_list_length.
1442 * Added a feature to main.c that prints out the starting wall-clock
1443 time before the program begins and prints out the ending wall-clock
1444 time when the program is finished.
1446 * Added the GATHER_STATISTICS code in hash-table.c so we can
1447 keep track of how well double hashing is doing. Eventually,
1448 GATHER_STATISTICS will be added so that all instrumentation
1449 code can be conditionally compiled in.
1451 * Fixed a stupid bug in Key_List::print_switch routine. This
1452 was necessary to make sure the generated switch statement worked
1453 correctly when *both* `natural,' i.e., static links and dynamic
1454 links, i.e., unresolved duplicates, hash to the same value.
1456 * Modified Bool_Array::~Bool_Array destructor so that
1457 it now frees the bool_array.storage_array when it is no longer
1458 needed. Since this array is generally very large it makes sense
1459 to return the memory to the freelist when it is no longer in use.
1461 * Changed the interface to constructor Hash_Table::Hash_Table. This
1462 constructor now passed a pointer to a power-of-two sized buffer that
1463 serve as storage for the hash table. Although this weakens information
1464 hiding a little bit it greatly reduces dynamic memory fragmentation,
1465 since we can now obtain the memory via a call to alloca, rather
1466 than malloc. This change modified Key_List::read_keys calling
1469 * Since alloca is now being used more aggressively a conditional
1470 compilation section was added in main.c. Taken from GNU GCC,
1471 this code gets rid of any avoidable limit on stack size so that
1472 alloca does not fail. It is only used if the -DRLIMIT_STACK
1473 symbol is defined when gperf is compiled.
1475 * Added warnings in option.c so that user's would be informed
1476 that -r superceeds -i on the command-line.
1478 * Rewrote Gen_Perf::affects_prev. First, the code structure
1479 was cleaned up considerably (removing the need for a dreaded
1480 goto!). Secondly, a major change occurred so that Gen_Perf::affects_prev
1481 returns FALSE (success) when fewest_hits gets down to whatever
1482 it was after inserting the previous key (instead of waiting for
1483 it to reach 0). In other words, it stops trying if it can
1484 resolve the new collisions added by a key, even if there are
1485 still other old, unresolved collisions. This modification was
1486 suggested by Nels Olson and seems to *greatly* increase the
1487 speed of gperf for large keyfiles. Thanks Nels!
1489 * In a similar vein, inside the Gen_Perf::change routine
1490 the variable `perfect.fewest_collisions is no longer initialized
1491 with the length of the keyword list. Instead it starts out at
1492 0 and is incremented by 1 every time change () is called.
1493 The rationale for this behavior is that there are times when a
1494 collision causes the number of duplicates (collisions) to
1495 increase by a large amount when it would presumably just have
1496 gone up by 1 if none of the asso_values were changed. That is,
1497 at the beginning of change(), you could initialize fewest_hits
1498 to 1+(previous value of fewest_hits) instead of to the number of
1499 keys. Thanks again, Nels.
1501 * Replaced alloca with new in the Gen_Perf::change function.
1502 This should eliminate some overhead at the expense of a little
1503 extra memory that is never reclaimed.
1505 * Renamed Gen_Perf::merge_sets to Gen_Perf::compute_disjoint_union
1506 to reflect the change in behavior.
1508 * Added the -e option so users can supply a string containing
1509 the characters used to separate keywords from their attributes.
1510 The default behavior is ",\n".
1512 * Removed the char *uniq_set field from LIST_NODE and modified
1513 uses of uniq_set in perfect.c and keylist.c. Due to changes
1514 to Gen_Perf::compute_disjoint_sets this field was no longer
1515 necessary, and its removal makes the program smaller and
1518 * Added lots of changes/fixes suggested by Nels Olson
1519 (umls.UUCP!olson@mis.ucsf.edu). In particular:
1520 1. Changed Bool_Array so that it would dynamically create
1521 an array of unsigned shorts rather than ints if the
1522 LO_CAL symbol was defined during program compilation.
1523 This cuts the amount of dynamic memory usage in half,
1524 which is important for large keyfile input.
1525 2. Added some additional debugging statements that print extra
1526 info to stderr when the -d option is enabled.
1527 3. Fixed a really stupid bug in Key_List::print_switch
1528 A right paren was placed at the wrong location, which broke
1530 4. Fixed a subtle problem with printing case values when keylinks
1531 appear. The logic failed to account for the fact that there
1532 can be keylinks *and* regular node info also!
1533 5. Changed the behavior of Key_List::read_keys so that it would
1534 honor -D unequivocally, i.e., it doesn't try to turn off dup
1535 handling if the user requests it, even if there are no
1536 immediate links in the keyfile input.
1537 6. Modified the -j option so that -j 0 means `try random values
1538 when searching for a way to resolve collisions.'
1539 7. Added a field `num_done' to the Gen_Perf struct. This is used
1540 to report information collected when trying to resolve
1542 8. Modified the merge_sets algorithm to perform a disjoint
1543 union of two multisets. This ensures that subsequent
1544 processing in Gen_Perf::affect_prev doesn't
1545 waste time trying to change an associated value that is
1546 shared between two conflicting keywords.
1547 9. Modified Gen_Perf::affects_prev so that it doesn't try
1548 random jump values unless the -j 0 option is enabled.
1549 10. Fixed a silly bug in Gen_Perf::change. This problem caused
1550 gperf to seg fault when the -k* option was given and the
1551 keyfile file had long keywords.
1553 Sun Oct 29 00:18:55 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
1555 * Modified class-specific new operations for Read_Line and
1556 List_Node so they don't fail if SIZE is larger than twice
1557 the previous buffer size. Note we double buffer size
1558 everytime the previous buffer runs out, as a heuristic
1559 to reduce future calls to malloc.
1561 Sun Oct 22 13:49:43 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1563 * Updated gperf version number to 2.0. Send to Doug Lea for
1564 incorporation into the long-awaited `official' libg++ 1.36
1567 * Thanks to Nels Olson a silly bug in Gen_Perf::change ()
1568 was fixed. This problem caused gperf to seg fault when
1569 the -k* option was given and the keyfile file had long
1572 * Modified Key_List::print_hash_function so that it output
1573 max_hash_value + 1 (rather than just max_hash_value) for
1574 any associated value entries that don't correspond to
1575 keyword charset characters. This should speed up rejection
1576 of non-keyword strings a little in some cases.
1578 Sat Oct 21 19:28:36 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1580 * Fixed Key_List::print_hash_function so that it no longer output
1581 things like `return 0 + ...' Although this probably gets
1582 optimized away by even the worst C compilers there isn't any
1583 point tempting fate... ;-)
1585 * Fixed class List_Node's constructor so that it wouldn't a priori
1586 refuse to consider trying to hash keys whose length is less
1587 than the smallest user-specified key position. It turns out
1588 this is not a problem unless the user also specifies the -n
1589 (NOLENGTH) option, in which case such keys most likely
1590 don't have a prayer of being hashed correctly!
1592 * Changed the name of the generated lookup table from `Hash_Table'
1593 to `asso_value' to be consistent with the gperf paper.
1595 Tue Oct 17 14:19:48 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1597 * Added a flag GATHER_STATISTICS in the Makefile. If defined
1598 during compilation this turns on certain collection facilities
1599 that track the performance of gperf during its execution. In
1600 particular, I want to see how many collisions occur for the
1601 double hashing Hash_Table.
1603 * Added a safety check so that we don't screw up if the total
1604 number of `resets' of the Bool_Array exceeds MAX_INT. Since
1605 this number is around 2^31 it is unlikely that this would ever
1606 occur for most input, but why take the risk?
1608 * Changed the behavior for the -a (ANSI) option so that the
1609 generated prototypes use int rather than size_t for the LEN
1610 parameter. It was too ugly having to #include <stddef.h> all
1613 Mon Oct 16 11:00:35 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1615 * Continued to work on the gperf paper for the USENIX C++
1616 conference. At some point this will be merged back into
1617 the gperf documentation...
1619 Sat Oct 14 20:29:43 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
1621 * Added a majorly neat hack to Bool_Array, suggested by rfg.
1622 The basic idea was to throw away the Ullman array technique.
1623 The Ullman array was used to remove the need to reinitialize all
1624 the Bool_Array elements to zero everytime we needed to determine
1625 whether there were duplicate hash values in the keyword list.
1626 The current trick uses an `iteration number' scheme, which takes
1627 about 1/3 the space and reduces the overall program running a
1628 time by about 20 percent for large input! The hack works as
1631 1. Dynamically allocation 1 boolean array of size k.
1632 2. Initialize the boolean array to zeros, and consider the first
1633 iteration to be iteration 1.
1634 2. Then on all subsequent iterations we `reset' the bool array by
1635 kicking the iteration count by 1.
1636 3. When it comes time to check whether a hash value is currently
1637 in the boolean array we simply check its index location. If
1638 the value stored there is *not* equal to the current iteration
1639 number then the item is clearly *not* in the set. In that
1640 case we assign the iteration number to that array's index
1641 location for future reference. Otherwise, if the item at
1642 the index location *is* equal to the iteration number we've
1643 found a duplicate. No muss, no fuss!
1645 Mon Oct 2 12:30:54 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1647 * Changed some consts in options.h to enumerals, since g++
1648 doesn't seem to like them at the moment!
1650 Sat Sep 30 12:55:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1652 * Fixed a stupid bug in Key_List::print_hash_function that manifested
1653 itself if the `-k$' option was given (i.e., only use the key[length]
1654 character in the hash function).
1656 * Added support for the -C option. This makes the contents of
1657 all generated tables `readonly'.
1659 * Changed the handling of generated switches so that there is
1660 only one call to str[n]?cmp. This *greatly* reduces the size of
1661 the generated assembly code on all compilers I've seen.
1663 * Fixed a subtle bug that occurred when the -l and -S option
1664 was given. Code produced looked something like:
1666 if (len != key_len || !strcmp (s1, resword->name)) return resword;
1668 which doesn't make any sense. Clearly, this should be:
1670 if (len == key_len && !strcmp (s1, resword->name)) return resword;
1672 Tue Sep 26 10:36:50 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1674 * Changed class Read_Line's definition so that it no longer
1675 needs to know about the buffering scheme used to speed up
1676 dynamic memory allocation of input keywords and their
1677 associated attributes. This means that operator new is no longer
1678 a friend of Read_Line.
1680 Mon Sep 25 23:17:10 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1682 * Decided that Obstacks had too much overhead, so they were
1683 removed in favor of super-efficient, low-overhead buffered
1684 storage allocation hacks in Read_Line and List_Node.
1686 * No longer try to inline functions that g++ complains about
1687 (Key_List::Merge and Key_List::Merge_Sort).
1689 Sun Sep 24 13:11:24 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1691 * Changed classes Read_Line and List_Node to use Obstacks in order
1692 to cache memory allocation for keyword strings and List_Nodes.
1694 * Continued to experiment with inheritance schemes.
1696 * Added a new file `alpha.h', that declares static data shared
1697 (i.e., inherited) between classes List_Node and Key_List.
1699 Tue Sep 12 16:14:41 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1701 * Made numerous changes to incorporate multiple inheritance in
1704 Wed Aug 16 23:04:08 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1706 * Added the -DCOMPILER_FIXED flag to the ./src/Makefile. This
1707 implies that people trying to compile gperf need to have a
1708 working version of the new g++ compiler (1.36.0).
1710 * Removed some extra spaces that were being added in the generated
1713 Mon Jul 24 17:09:46 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1715 * Fixed PRINT_HASH_FUNCTION and PRINT_LOOKUP_FUNCTION in keylist.c
1716 so that the generated functions take an unsigned int length argument.
1717 If -a is enabled the prototype is (const char *str, size_t len).
1719 Fri Jul 21 13:06:15 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1721 * Fixed a typo in PRINT_KEYWORD_TABLE in keylist.cc that prevented
1722 the indentation from working correctly.
1724 * Fixed a horrible typo in PRINT_KEYWORD_TABLE in keylist.cc
1725 that prevented links from being printed correctly.
1727 Tue Jul 18 16:04:31 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1729 * Fixed up readline.cc and readline.h so that they work OK
1730 with g++ compilers that aren't completely up-to-date.
1731 If symbol COMPILER_FIXED is defined then the behavior
1732 that works on my more recent version of g++ is enabled.
1734 Sun Jul 9 17:53:28 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1736 * Changed the ./tests subdirectory Makefile so that it
1737 uses $(CC) instead of gcc.
1739 Sun Jul 2 21:52:15 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1741 * Fixed a number of subtle bugs that occurred when -S was
1742 combined with various and sundry options.
1744 * Added the -G option, that makes the generated keyword table
1745 a global static variable, rather than hiding it inside
1746 the lookup function. This allows other functions to directly
1747 access the contents in this table.
1749 * Added the "#" feature, that allows comments inside the keyword
1750 list from the input file. Comment handling takes place in readline.c.
1751 This simplifies the code and reduces the number of malloc calls.
1753 * Also added the -H option (user can give the name of the hash
1754 function) and the -T option (prevents the transfer of the type decl
1755 to the output file, which is useful if the type is already defined
1758 Thu Jun 22 20:39:39 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1760 * Modified many classes so that they would inherit Std_Err as
1761 a base class. This makes things more abstract...
1763 Fri Jun 16 14:23:00 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1765 * Modified the -f (FAST) option. This now takes an argument.
1766 The argument corresponds to the number of iterations used
1767 to resolve collisions. -f 0 uses the length of the
1768 keyword list (which is what -f did before). This makes
1769 life much easier when dealing with large keyword files.
1771 Tue Jun 6 17:53:27 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1773 * Added the -c (comparison) option. Enabling this
1774 will use the strncmp function for string comparisons.
1775 The default is to use strcmp.
1777 * Fixed a typo in key_list.cc (PRINT_SWITCH). This caused
1778 faulty C code to be generated when the -D, -p, and -t
1779 options were all enabled.
1781 Thu May 25 14:07:21 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
1783 * Once again, changed class Read_Line to overload global operator
1784 new. Hopefully, this will work...!
1786 Sun May 21 01:51:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1788 * Modified Key_List::print_hash_function () so that it properly
1789 formats the associated values in the hash table according to
1790 the maximum number of digits required to represent the largest
1793 * Removed the named return value from class Hash_Table's
1794 operator (), since this causes a seg fault when -O is enabled.
1795 No sense tripping subtle g++ bugs if we don't have to.... ;-)
1797 * Removed the operator new hack from Read_Line, since this seemed
1798 to create horrible bus error problems.
1800 * Changed many class member functions and data members to be `static',
1801 if they don't manipulate this!
1803 Fri May 12 23:06:56 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1805 * Changed class Std_Err to use static member functions, a la
1806 Ada or Modula 2. This eliminates the need for an explicit
1807 error-handler class object.
1809 * Added the ``named return value'' feature to Hash_Table::operator ()
1810 and Bool_Array::operator [], just for the heck of it.... ;-)
1812 * Changed the previous hack in Read_Line so that we now use
1813 the overloaded global `new' instead of NEW_STRING!
1815 Wed May 3 17:36:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1817 * Updated to version 1.7. This reflects the recent major changes
1820 * Modified the GNU getopt.cc routine to have a class-based interface.
1822 * Fixed a typo in Perfect.cc ~Perfect that prevented the actual maximum
1823 hash table size from being printed (maybe the stream classes
1824 weren't so bad after all.... ;-).
1826 * Added support for the -f option. This generates the perfect
1827 hash function ``fast.'' It reduces the execution time of
1828 gperf, at the cost of minimizing the range of hash values.
1830 Tue May 2 16:23:29 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1832 * Added an efficiency hack to Read_Line. Instead of making
1833 a call to operator NEW (a.k.a. malloc) for each input string
1834 a new member function NEW_STRING stores a large buffer from
1835 which new strings are carved out, growing the buffer if
1836 necessary. It might be useful to add this throughout the
1839 * Removed all unnecessary calls to DELETE. If the program is about
1840 to exit it is silly to waste time freeing memory.
1842 * Added the GNU getopt program to the distribution. This makes
1843 GPERF portable to systems that don't include getopt in libc.
1845 * Added a strcspn member to class Key_List. This also increases
1848 * Added the get_include_src function from keylist.c as a member
1849 function in class Key_List. Hopefully every function is
1850 now associated with a class. This aids abstraction and
1853 * Ported gperf to C. From now on both K&R C and GNU G++ versions
1854 will be supported. There will be two ChangeLog files, one
1855 for each version of the program.
1857 Mon May 1 16:41:45 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1859 * Fixed a bug with -k'*'. This now prints out *all* the cases
1860 up to the length of the longest word in the keyword set.
1862 Sun Apr 30 12:15:25 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1864 * Removed all use of the stream classes. Too ugly, slow, and
1865 not handled by the c++-mode formatter....
1867 * Modified the handling of links (i.e., keywords that have
1868 identical hash values as other keywords). This should
1869 speed up hash function generation for keyword sets with
1870 many duplicate entries. The trick is to treat duplicate
1871 values as equivalence classes, so that each set of duplicate
1872 values is represented only once in the main list processing.
1874 * Fixed some capitialization typos and indentations mistakes in
1875 Key_List::print_hash_function.
1877 Sat Apr 29 12:04:03 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1879 * Fixed a typo/logico in Key_List::print_switch that prevented
1880 the last keyword in the keyword list to be print out. This
1881 requires further examination.....
1883 * Fixed a stupid bug in List_Node::List_node. If the -k'*' option
1884 was enabled the KEY_SET string wasn't getting terminated with
1887 Fri Apr 28 12:38:35 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1889 * Renamed strexp.h and strexp.cc to iterator.h and iterator.cc.
1890 Also changed the strexp class to iterator. Continued to work
1893 * Updated the version number to 1.6. This reflects all the
1896 Thu Apr 27 00:14:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1898 * Added the -D option that properly handles keyword sets that
1899 contain duplicate hash values.
1901 * Continued the stylistic changes. Added the #pragma once
1902 directive to all the *.h files. Removed all #defines and
1903 replaced them with static consts. Also moved the key_sort
1904 routine from options.cc into the options class as a
1907 Mon Apr 3 13:26:55 1989 Doug Schmidt (schmidt at zola.ics.uci.edu)
1909 * Made massive stylistic changes to bring source code into
1910 conformance with GNU style guidelines.
1912 Thu Mar 30 23:28:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1914 * Fixed up the output routines so that they generate code
1915 corresponding to the GNU style guidelines.
1917 Sat Mar 11 13:12:37 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1919 * Fixed Stderr constructors so that they wouldn't try to
1920 use the base class initializer syntax for the static
1921 class variable Program_Name. G++ 1.34 is stricter in
1922 enforcing the rules!
1924 Fri Mar 10 11:24:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1926 * Removed -v and ``| more'' from the Makefile to keep rfg happy...
1928 Thu Mar 2 12:37:30 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1930 * Sent latest GNU gperf version 1.5 to Doug Lea for inclusion
1931 into libg++ 1.34. Note that there is a small bug with
1932 the new %{ ... %} source inclusion facility, since it doesn't
1933 understand comments and will barf if %{ or %} appear nested
1934 inside the outermost delimiters. This is too trivial of
1935 a defect to fix at the moment...
1937 Tue Feb 28 11:19:58 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1939 * Added the -K option, which allows the user to provide a
1940 alternative name for the keyword structure component.
1941 The default is still ``name.''
1943 * Added the LEX and YACC-like ability to include arbitrary
1944 text at the beginning of the generated C source code output.
1945 This required two new functions Get_Special_Input,
1946 Key_List::Save_Include_Src;
1948 * Fixed memory allocation bug in Key_List::Set_Types.
1949 Variable Return_Type needs 1 additional location
1950 to store the "*" if the -p option is used.
1952 * Added code to NULL terminate both Struct_Tag and Return_Type,
1953 *after* the strncpy (stupid mistake).
1955 Mon Feb 27 14:39:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1957 * Added a new option -N. This allows the user to specify the
1958 name to be used for the generated lookup function. The
1959 default name is still ``in_word_set.'' This makes it
1960 possible to completely automate the perfect hash function
1963 Mon Feb 20 23:33:14 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1965 * Corrected the Hash_Table::operator () function so that
1966 *it* is responsible for deciding when a new key has the
1967 same signature as a previously seen key. The key length
1968 information is now used internally to this function to
1969 decide whether to add to the hash table those keys with
1970 the same key sets, but different lengths. Before, this
1971 was handled by the Key_List::Read_Keys function. However,
1972 this failed to work for certain duplicate keys, since
1973 they weren't being entered into the hash table properly.
1975 Sun Feb 19 16:02:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
1977 * Modified class Options by moving the enum Option_Type out
1978 of the class. This is to satisfy the new enumeration
1981 Sun Jan 15 15:12:09 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
1983 * Incremented the version number upto 1.4 to reflect the new
1984 options that affect the generated code. Send the new
1985 distribution off to Michael for use with g++ 1.33.
1987 * Added a fix to Key_List::Read_Keys so that it checks for links
1988 properly when the -n option is used. Previously, it didn't
1989 catch obvious links, which caused it to spend large amount
1990 of time searching for a solution that could never occur!
1992 * Modified the Key_List data structure to record *both* the
1993 minimum and the maximum key lengths. This information
1994 is now computed in Key_List::Read_Keys, and thus
1995 Key_List::Print_Min_Max doesn't need to bother.
1997 * Modified the key position iterator scheme in options.cc to
1998 eliminate the need for member function Options::Advance.
1999 Now, the Options::Get function performs the advancement
2000 automatically, obviating the need for an extra function call.
2002 * Added the new function Options::Print_Options, to print out
2003 the user-specified command line options to generated C
2006 * Added a new function, Key_List::Print_Keylength_Table,
2007 which creates a table of lengths for use in speeding
2008 up the keyword search. This also meant that a new
2009 option, -l (LENTABLE) is recognized. It controls
2010 whether the length table is printed and the comparison
2011 made in the generated function ``in_word_set.''
2013 * Added a comment at the top of the generated C code
2014 output file that tells what version of gperf was used.
2015 Next, I'll also dump out the command line options
2016 as a comment too. Thanks to Michael Tiemann for the
2019 * Fixed the -n option to make it work correctly with
2020 other parts of the program (most notably the Perfect::Hash
2021 function and the computation of minimum and maximum lengths.
2023 Fri Jan 13 21:25:27 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
2025 * Realized the the need to add a test that will enable
2026 optimziation of the generated C code in the ``hash'' function
2027 by checking whether all the requested key positions are
2028 guaranteed to exist due to the comparison in `in_word_set.''
2029 I'll put this in soon....
2031 Thu Jan 12 20:09:21 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
2033 * Added pascal, modula3, and modula2 tests inputs to the
2036 * Recognised that there is a bug with the -n option. However
2037 I'm too busy to fix it properly, right now. The problem
2038 is that the generated #define end up being 0, since that's
2039 my hack to make -n work. This needs complete rethinking!
2041 Tue Jan 10 00:08:16 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
2043 * Added a new option, -n, that instructs gperf to not use the
2044 length of an identifier when computing the hash functions.
2045 I'm not sure how useful this is!
2047 * Retransmitted the distribution to rocky.oswego.edu. Hopefully,
2050 * Began fixing the indentation and capitalization to conform
2051 to the GNU coding guidelines.
2053 Mon Jan 9 22:23:18 1989 Doug Schmidt (schmidt at pompe.ics.uci.edu)
2055 * Fixed horrible bug in Read_Line::Readln_Aux. This was
2056 a subtle and pernicous off-by-1 error, that overwrote
2057 past the last character of the input string buffer. I
2058 think this fault was killing the vax!
2060 * Yow, fixed an oversight in List_Node::List_Node, where the
2061 pointer field Next was uninitialized. Luckily, the new routine
2062 seems to return 0 filled objects the first time through!
2064 Sun Jan 8 13:43:14 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
2066 * Modified the ``key linked'' diagnostic in Key_List::Read_Keys
2067 to be more helpful and easy to read.
2069 * Fixed the List_Node::List_Node so that it would ignore trailing
2070 fields if the -t option was not enabled.
2072 * Moved the List_Node declarations out of keylist.h and
2073 into a file of its own, called listnode.cc and listnode.h
2074 Made Set_Sort a member function of class List_Node.
2076 * Massively updated the documentation in the gperf.texinfo file.
2078 * Polished off the major revision to the print functions,
2079 added a few new tests in the Makefile to check for the
2080 validity of the program and ftp'ed the entire distribution
2081 off to Doug Lea for libg++. ( changed it to
2082 1.3 to reflect the major changes with the generated
2085 * Fixed Key_List::Print_Switch to deal with the -p and -t options.
2086 This meant that the ``still-born'' function Key_List::
2087 Print_Type_Switch was superflous, so I removed it.
2088 Also, removed the restriction in Option that the -p and
2089 -t options couldn't be used simultaneously.
2091 * Modified List_Node::List_Node, to perform only 1 call to
2092 ``new'' when dynamically allocating memory for the Key_Set
2095 Sat Jan 7 14:10:51 1989 Doug Schmidt (schmidt at glacier.ics.uci.edu)
2097 * Fixed a big bug with the new policy of nesting the
2098 wordlist inside of generated function ``in_word_set.''
2099 I'd forgotten to declare the wordlist array as static!
2102 * Added a new function Key_List::Set_Types, that figures out
2103 the return type for generated function ``in_word_set,''
2104 the user-defined ``struct tag,'' if one is used, and also
2105 formates the array type for the static local array.
2107 * Changed the print routines to take advantage of the
2110 * Began adding the hooks to allow the return of a pointer
2111 to a user defined struct location from the generated
2112 ``in_word_set'' function instead of the current 0 or 1
2113 return value. Created function Key_List::Print_Type_Switch
2114 and added option -p to class Option, allowing the user to
2115 request generation of the aforementioned pointers returned
2116 instead of booleans.
2118 * Put in checks in class Option to make sure that -S and -t
2119 options are not used simultaneously. This restriction
2120 will be removed in subsequent releases, once I decide on
2121 a clean way to implement it.
2123 * Sent version 1.2 to Doug Lea for possible inclusion into
2124 the libg++ distribution.
2126 * Moved the static word_list array inside the generated function
2127 in_word_set. This supports better data hiding.
2129 * Added a texinfo file, gperf.texinfo
2131 * Revised the Makefile to cleanup the droppings from texinfo
2132 and changed the name of gperf.cc and gperf.h to perfect.cc
2135 Fri Jan 6 13:04:45 1989 Doug Schmidt (schmidt at crimee.ics.uci.edu)
2137 * Implemented the switch statement output format. Much better
2138 for large datasets in terms of space used.
2140 * Added new functions to break up the Key_List::Output function.
2141 Functions added were Key_List::Print_Switch,
2142 Key_List::Print_Min_Max, Key_List::Print_Keyword_Table,
2143 Key_List::Print_Hash_Function, and
2144 Key_List::Print_Lookup_Function. This simplifies the big mess
2145 in Key_List::Output considerably!
2147 * Added switch statement option to Options, which potentially
2148 trades time for space in the generated lookup code.
2150 Thu Jan 5 22:46:34 1989 Doug Schmidt (schmidt at siam.ics.uci.edu)
2152 * Released version 1.1
2154 * Fixed a bug with Gperf::Merge_Set, it was skipping letters
2155 shared between the Set_1 and Set_2.
2157 * Added the optimal min/max algorithm in Key_List::Output. This
2158 runs in O (3n/2), rather than O (2n) time.
2160 * Changed Gperf::Sort_Set to use insertion sort, rather than
2163 * Added a check in Key_List::Output for the special case where
2164 the keys used are 1,$. It is possible to generate more
2165 efficient C code in this case.
2169 add-log-time-format: (lambda () (progn (setq tz (getenv "TZ")) (set-time-zone-rule "UTC") (setq time (format-time-string "%a %b %e %H:%M:%S %Z %Y" (current-time))) (set-time-zone-rule tz) time))
2170 indent-tabs-mode: nil