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