1193323Sed/* hash.h -- header file for gas hash table routines
2193323Sed   Copyright 1987, 1992, 1993, 1995, 1999, 2003
3193323Sed   Free Software Foundation, Inc.
4193323Sed
5193323Sed   This file is part of GAS, the GNU Assembler.
6193323Sed
7193323Sed   GAS is free software; you can redistribute it and/or modify
8193323Sed   it under the terms of the GNU General Public License as published by
9193323Sed   the Free Software Foundation; either version 2, or (at your option)
10193323Sed   any later version.
11193323Sed
12193323Sed   GAS is distributed in the hope that it will be useful,
13193323Sed   but WITHOUT ANY WARRANTY; without even the implied warranty of
14193323Sed   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15193323Sed   GNU General Public License for more details.
16193323Sed
17193323Sed   You should have received a copy of the GNU General Public License
18193323Sed   along with GAS; see the file COPYING.  If not, write to the Free
19193323Sed   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20193323Sed   02110-1301, USA.  */
21193323Sed
22200581Srdivacky#ifndef HASH_H
23193323Sed#define HASH_H
24193323Sed
25193323Sedstruct hash_control;
26193323Sed
27193323Sed/* Set the size of the hash table used.  */
28193323Sed
29193323Sedvoid set_gas_hash_table_size (unsigned long);
30193323Sed
31193323Sed/* Create a hash table.  This return a control block.  */
32193323Sed
33193323Sedextern struct hash_control *hash_new (void);
34193323Sed
35193323Sed/* Delete a hash table, freeing all allocated memory.  */
36193323Sed
37193323Sedextern void hash_die (struct hash_control *);
38193323Sed
39193323Sed/* Insert an entry into a hash table.  This returns NULL on success.
40193323Sed   On error, it returns a printable string indicating the error.  It
41193323Sed   is considered to be an error if the entry already exists in the
42193323Sed   hash table.  */
43193323Sed
44193323Sedextern const char *hash_insert (struct hash_control *,
45193323Sed				const char *key, PTR value);
46193323Sed
47193323Sed/* Insert or replace an entry in a hash table.  This returns NULL on
48193323Sed   success.  On error, it returns a printable string indicating the
49193323Sed   error.  If an entry already exists, its value is replaced.  */
50193323Sed
51193323Sedextern const char *hash_jam (struct hash_control *,
52193323Sed			     const char *key, PTR value);
53193323Sed
54193323Sed/* Replace an existing entry in a hash table.  This returns the old
55193323Sed   value stored for the entry.  If the entry is not found in the hash
56   table, this does nothing and returns NULL.  */
57
58extern PTR hash_replace (struct hash_control *, const char *key,
59			 PTR value);
60
61/* Find an entry in a hash table, returning its value.  Returns NULL
62   if the entry is not found.  */
63
64extern PTR hash_find (struct hash_control *, const char *key);
65
66/* As hash_find, but KEY is of length LEN and is not guaranteed to be
67   NUL-terminated.  */
68
69extern PTR hash_find_n (struct hash_control *, const char *key, size_t len);
70
71/* Delete an entry from a hash table.  This returns the value stored
72   for that entry, or NULL if there is no such entry.  */
73
74extern PTR hash_delete (struct hash_control *, const char *key);
75
76/* Traverse a hash table.  Call the function on every entry in the
77   hash table.  */
78
79extern void hash_traverse (struct hash_control *,
80			   void (*pfn) (const char *key, PTR value));
81
82/* Print hash table statistics on the specified file.  NAME is the
83   name of the hash table, used for printing a header.  */
84
85extern void hash_print_statistics (FILE *, const char *name,
86				   struct hash_control *);
87
88#endif /* HASH_H */
89