Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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