hash.h 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /* hash.h -- header file for gas hash table routines
  2. Copyright (C) 1987-2015 Free Software Foundation, Inc.
  3. This file is part of GAS, the GNU Assembler.
  4. GAS is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 3, or (at your option)
  7. any later version.
  8. GAS is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GAS; see the file COPYING. If not, write to the Free
  14. Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
  15. 02110-1301, USA. */
  16. #ifndef HASH_H
  17. #define HASH_H
  18. struct hash_control;
  19. /* Set the size of the hash table used. */
  20. void set_gas_hash_table_size (unsigned long);
  21. /* Create a hash table. This return a control block. */
  22. extern struct hash_control *hash_new (void);
  23. extern struct hash_control *hash_new_sized (unsigned long);
  24. /* Delete a hash table, freeing all allocated memory. */
  25. extern void hash_die (struct hash_control *);
  26. /* Insert an entry into a hash table. This returns NULL on success.
  27. On error, it returns a printable string indicating the error. It
  28. is considered to be an error if the entry already exists in the
  29. hash table. */
  30. extern const char *hash_insert (struct hash_control *,
  31. const char *key, void *value);
  32. /* Insert or replace an entry in a hash table. This returns NULL on
  33. success. On error, it returns a printable string indicating the
  34. error. If an entry already exists, its value is replaced. */
  35. extern const char *hash_jam (struct hash_control *,
  36. const char *key, void *value);
  37. /* Replace an existing entry in a hash table. This returns the old
  38. value stored for the entry. If the entry is not found in the hash
  39. table, this does nothing and returns NULL. */
  40. extern void *hash_replace (struct hash_control *, const char *key,
  41. void *value);
  42. /* Find an entry in a hash table, returning its value. Returns NULL
  43. if the entry is not found. */
  44. extern void *hash_find (struct hash_control *, const char *key);
  45. /* As hash_find, but KEY is of length LEN and is not guaranteed to be
  46. NUL-terminated. */
  47. extern void *hash_find_n (struct hash_control *, const char *key, size_t len);
  48. /* Delete an entry from a hash table. This returns the value stored
  49. for that entry, or NULL if there is no such entry. */
  50. extern void *hash_delete (struct hash_control *, const char *key, int);
  51. /* Traverse a hash table. Call the function on every entry in the
  52. hash table. */
  53. extern void hash_traverse (struct hash_control *,
  54. void (*pfn) (const char *key, void *value));
  55. /* Print hash table statistics on the specified file. NAME is the
  56. name of the hash table, used for printing a header. */
  57. extern void hash_print_statistics (FILE *, const char *name,
  58. struct hash_control *);
  59. #endif /* HASH_H */