| Index: bison/src/bison/2.4.1/bison-2.4.1-src/src/uniqstr.c
|
| ===================================================================
|
| --- bison/src/bison/2.4.1/bison-2.4.1-src/src/uniqstr.c (revision 0)
|
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/src/uniqstr.c (revision 0)
|
| @@ -0,0 +1,151 @@
|
| +/* Keep a unique copy of strings.
|
| +
|
| + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
| +
|
| + This file is part of Bison, the GNU Compiler Compiler.
|
| +
|
| + This program is free software: you can redistribute it and/or modify
|
| + it under the terms of the GNU General Public License as published by
|
| + the Free Software Foundation, either version 3 of the License, or
|
| + (at your option) any later version.
|
| +
|
| + This program is distributed in the hope that it will be useful,
|
| + but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| + GNU General Public License for more details.
|
| +
|
| + You should have received a copy of the GNU General Public License
|
| + along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
| +
|
| +#include <config.h>
|
| +#include "system.h"
|
| +
|
| +#include <error.h>
|
| +#include <hash.h>
|
| +#include <quotearg.h>
|
| +
|
| +#include "uniqstr.h"
|
| +
|
| +/*-----------------------.
|
| +| A uniqstr hash table. |
|
| +`-----------------------*/
|
| +
|
| +/* Initial capacity of uniqstr hash table. */
|
| +#define HT_INITIAL_CAPACITY 257
|
| +
|
| +static struct hash_table *uniqstrs_table = NULL;
|
| +
|
| +/*-------------------------------------.
|
| +| Create the uniqstr for S if needed. |
|
| +`-------------------------------------*/
|
| +
|
| +uniqstr
|
| +uniqstr_new (char const *str)
|
| +{
|
| + uniqstr res = hash_lookup (uniqstrs_table, str);
|
| + if (!res)
|
| + {
|
| + /* First insertion in the hash. */
|
| + res = xstrdup (str);
|
| + hash_insert (uniqstrs_table, res);
|
| + }
|
| + return res;
|
| +}
|
| +
|
| +
|
| +/*------------------------------.
|
| +| Abort if S is not a uniqstr. |
|
| +`------------------------------*/
|
| +
|
| +void
|
| +uniqstr_assert (char const *str)
|
| +{
|
| + if (!hash_lookup (uniqstrs_table, str))
|
| + {
|
| + error (0, 0,
|
| + "not a uniqstr: %s", quotearg (str));
|
| + abort ();
|
| + }
|
| +}
|
| +
|
| +
|
| +/*--------------------.
|
| +| Print the uniqstr. |
|
| +`--------------------*/
|
| +
|
| +static inline bool
|
| +uniqstr_print (uniqstr ustr)
|
| +{
|
| + fprintf (stderr, "%s\n", ustr);
|
| + return true;
|
| +}
|
| +
|
| +static bool
|
| +uniqstr_print_processor (void *ustr, void *null ATTRIBUTE_UNUSED)
|
| +{
|
| + return uniqstr_print (ustr);
|
| +}
|
| +
|
| +
|
| +/*-----------------------.
|
| +| A uniqstr hash table. |
|
| +`-----------------------*/
|
| +
|
| +static bool
|
| +hash_compare_uniqstr (void const *m1, void const *m2)
|
| +{
|
| + return strcmp (m1, m2) == 0;
|
| +}
|
| +
|
| +static size_t
|
| +hash_uniqstr (void const *m, size_t tablesize)
|
| +{
|
| + return hash_string (m, tablesize);
|
| +}
|
| +
|
| +/*----------------------------.
|
| +| Create the uniqstrs table. |
|
| +`----------------------------*/
|
| +
|
| +void
|
| +uniqstrs_new (void)
|
| +{
|
| + uniqstrs_table = hash_initialize (HT_INITIAL_CAPACITY,
|
| + NULL,
|
| + hash_uniqstr,
|
| + hash_compare_uniqstr,
|
| + free);
|
| +}
|
| +
|
| +
|
| +/*-------------------------------------.
|
| +| Perform a task on all the uniqstrs. |
|
| +`-------------------------------------*/
|
| +
|
| +static void
|
| +uniqstrs_do (Hash_processor processor, void *processor_data)
|
| +{
|
| + hash_do_for_each (uniqstrs_table, processor, processor_data);
|
| +}
|
| +
|
| +
|
| +/*-----------------.
|
| +| Print them all. |
|
| +`-----------------*/
|
| +
|
| +void
|
| +uniqstrs_print (void)
|
| +{
|
| + uniqstrs_do (uniqstr_print_processor, NULL);
|
| +}
|
| +
|
| +
|
| +/*--------------------.
|
| +| Free the uniqstrs. |
|
| +`--------------------*/
|
| +
|
| +void
|
| +uniqstrs_free (void)
|
| +{
|
| + hash_free (uniqstrs_table);
|
| +}
|
|
|
| Property changes on: bison\src\bison\2.4.1\bison-2.4.1-src\src\uniqstr.c
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|