source: trunk/src/binutils/include/hashtab.h@ 1722

Last change on this file since 1722 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 6.4 KB
Line 
1/* An expandable hash tables datatype.
2 Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
3 Contributed by Vladimir Makarov ([email protected]).
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation; either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
18
19/* This package implements basic hash table functionality. It is possible
20 to search for an entry, create an entry and destroy an entry.
21
22 Elements in the table are generic pointers.
23
24 The size of the table is not fixed; if the occupancy of the table
25 grows too high the hash table will be expanded.
26
27 The abstract data implementation is based on generalized Algorithm D
28 from Knuth's book "The art of computer programming". Hash table is
29 expanded by creation of new hash table and transferring elements from
30 the old table to the new table. */
31
32#ifndef __HASHTAB_H__
33#define __HASHTAB_H__
34
35#ifdef __cplusplus
36extern "C" {
37#endif /* __cplusplus */
38
39#include "ansidecl.h"
40
41#ifndef GTY
42#define GTY(X)
43#endif
44
45/* The type for a hash code. */
46typedef unsigned int hashval_t;
47
48/* Callback function pointer types. */
49
50/* Calculate hash of a table entry. */
51typedef hashval_t (*htab_hash) PARAMS ((const void *));
52
53/* Compare a table entry with a possible entry. The entry already in
54 the table always comes first, so the second element can be of a
55 different type (but in this case htab_find and htab_find_slot
56 cannot be used; instead the variants that accept a hash value
57 must be used). */
58typedef int (*htab_eq) PARAMS ((const void *, const void *));
59
60/* Cleanup function called whenever a live element is removed from
61 the hash table. */
62typedef void (*htab_del) PARAMS ((void *));
63
64/* Function called by htab_traverse for each live element. The first
65 arg is the slot of the element (which can be passed to htab_clear_slot
66 if desired), the second arg is the auxiliary pointer handed to
67 htab_traverse. Return 1 to continue scan, 0 to stop. */
68typedef int (*htab_trav) PARAMS ((void **, void *));
69
70/* Memory-allocation function, with the same functionality as calloc().
71 Iff it returns NULL, the hash table implementation will pass an error
72 code back to the user, so if your code doesn't handle errors,
73 best if you use xcalloc instead. */
74typedef PTR (*htab_alloc) PARAMS ((size_t, size_t));
75
76/* We also need a free() routine. */
77typedef void (*htab_free) PARAMS ((PTR));