]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/hashtable.h
+2003-08-08 Bernardo Innocenti <bernie@develer.com> + + PR target/9697 + PR...
[thirdparty/gcc.git] / gcc / hashtable.h
CommitLineData
2a967f3d 1/* Hash tables.
1d088dee 2 Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
2a967f3d
NB
3
4This program is free software; you can redistribute it and/or modify it
5under the terms of the GNU General Public License as published by the
6Free Software Foundation; either version 2, or (at your option) any
7later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
17
18#ifndef GCC_HASHTABLE_H
19#define GCC_HASHTABLE_H
20
21#include "obstack.h"
43839642 22#define GTY(x) /* nothing */
2a967f3d
NB
23
24/* This is what each hash table entry points to. It may be embedded
25 deeply within another object. */
26typedef struct ht_identifier ht_identifier;
e2500fed 27struct ht_identifier GTY(())
2a967f3d 28{
2a967f3d 29 const unsigned char *str;
4977bab6 30 unsigned int len;
5e0c54e5 31 unsigned int hash_value;
2a967f3d
NB
32};
33
34#define HT_LEN(NODE) ((NODE)->len)
35#define HT_STR(NODE) ((NODE)->str)
36
2a967f3d
NB
37typedef struct ht hash_table;
38typedef struct ht_identifier *hashnode;
39
40enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC, HT_ALLOCED};
41
42/* An identifier hash table for cpplib and the front ends. */
43struct ht
44{
45 /* Identifiers are allocated from here. */
46 struct obstack stack;
47
48 hashnode *entries;
49 /* Call back. */
1d088dee 50 hashnode (*alloc_node) (hash_table *);
2a967f3d
NB
51
52 unsigned int nslots; /* Total slots in the entries array. */
53 unsigned int nelements; /* Number of live elements. */
54
55 /* Link to reader, if any. For the benefit of cpplib. */
56 struct cpp_reader *pfile;
57
58 /* Table usage statistics. */
59 unsigned int searches;
60 unsigned int collisions;
61};
62
4912a07c 63/* Initialize the hashtable with 2 ^ order entries. */
1d088dee 64extern hash_table *ht_create (unsigned int order);
bef985f3
NB
65
66/* Frees all memory associated with a hash table. */
1d088dee 67extern void ht_destroy (hash_table *);
bef985f3 68
1d088dee
AJ
69extern hashnode ht_lookup (hash_table *, const unsigned char *,
70 unsigned int, enum ht_lookup_option);
2a967f3d
NB
71
72/* For all nodes in TABLE, make a callback. The callback takes
73 TABLE->PFILE, the node, and a PTR, and the callback sequence stops
74 if the callback returns zero. */
1d088dee
AJ
75typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *);
76extern void ht_forall (hash_table *, ht_cb, const void *);
2a967f3d
NB
77
78/* Dump allocation statistics to stderr. */
1d088dee 79extern void ht_dump_statistics (hash_table *);
2a967f3d 80
2a967f3d 81#endif /* GCC_HASHTABLE_H */