Mercurial > hg > CbC > CbC_gcc
annotate libcpp/include/symtab.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | 77e2b8dfacca |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 /* Hash tables. |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2 Copyright (C) 2000, 2001, 2003, 2004, 2007, 2008, 2009, 2010 |
0 | 3 Free Software Foundation, Inc. |
4 | |
5 This program is free software; you can redistribute it and/or modify it | |
6 under the terms of the GNU General Public License as published by the | |
7 Free Software Foundation; either version 3, or (at your option) any | |
8 later version. | |
9 | |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
16 along with this program; see the file COPYING3. If not see | |
17 <http://www.gnu.org/licenses/>. */ | |
18 | |
19 #ifndef LIBCPP_SYMTAB_H | |
20 #define LIBCPP_SYMTAB_H | |
21 | |
22 #include "obstack.h" | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
23 |
0 | 24 #ifndef GTY |
25 #define GTY(x) /* nothing */ | |
26 #endif | |
27 | |
28 /* This is what each hash table entry points to. It may be embedded | |
29 deeply within another object. */ | |
30 typedef struct ht_identifier ht_identifier; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
31 typedef struct ht_identifier *ht_identifier_ptr; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
32 struct GTY(()) ht_identifier { |
0 | 33 const unsigned char *str; |
34 unsigned int len; | |
35 unsigned int hash_value; | |
36 }; | |
37 | |
38 #define HT_LEN(NODE) ((NODE)->len) | |
39 #define HT_STR(NODE) ((NODE)->str) | |
40 | |
41 typedef struct ht hash_table; | |
42 typedef struct ht_identifier *hashnode; | |
43 | |
44 enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC}; | |
45 | |
46 /* An identifier hash table for cpplib and the front ends. */ | |
47 struct ht | |
48 { | |
49 /* Identifiers are allocated from here. */ | |
50 struct obstack stack; | |
51 | |
52 hashnode *entries; | |
53 /* Call back, allocate a node. */ | |
54 hashnode (*alloc_node) (hash_table *); | |
55 /* Call back, allocate something that hangs off a node like a cpp_macro. | |
56 NULL means use the usual allocator. */ | |
57 void * (*alloc_subobject) (size_t); | |
58 | |
59 unsigned int nslots; /* Total slots in the entries array. */ | |
60 unsigned int nelements; /* Number of live elements. */ | |
61 | |
62 /* Link to reader, if any. For the benefit of cpplib. */ | |
63 struct cpp_reader *pfile; | |
64 | |
65 /* Table usage statistics. */ | |
66 unsigned int searches; | |
67 unsigned int collisions; | |
68 | |
69 /* Should 'entries' be freed when it is no longer needed? */ | |
70 bool entries_owned; | |
71 }; | |
72 | |
73 /* Initialize the hashtable with 2 ^ order entries. */ | |
74 extern hash_table *ht_create (unsigned int order); | |
75 | |
76 /* Frees all memory associated with a hash table. */ | |
77 extern void ht_destroy (hash_table *); | |
78 | |
79 extern hashnode ht_lookup (hash_table *, const unsigned char *, | |
80 size_t, enum ht_lookup_option); | |
81 extern hashnode ht_lookup_with_hash (hash_table *, const unsigned char *, | |
82 size_t, unsigned int, | |
83 enum ht_lookup_option); | |
84 #define HT_HASHSTEP(r, c) ((r) * 67 + ((c) - 113)); | |
85 #define HT_HASHFINISH(r, len) ((r) + (len)) | |
86 | |
87 /* For all nodes in TABLE, make a callback. The callback takes | |
88 TABLE->PFILE, the node, and a PTR, and the callback sequence stops | |
89 if the callback returns zero. */ | |
90 typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *); | |
91 extern void ht_forall (hash_table *, ht_cb, const void *); | |
92 | |
93 /* For all nodes in TABLE, call the callback. If the callback returns | |
94 a nonzero value, the node is removed from the table. */ | |
95 extern void ht_purge (hash_table *, ht_cb, const void *); | |
96 | |
97 /* Restore the hash table. */ | |
98 extern void ht_load (hash_table *ht, hashnode *entries, | |
99 unsigned int nslots, unsigned int nelements, bool own); | |
100 | |
101 /* Dump allocation statistics to stderr. */ | |
102 extern void ht_dump_statistics (hash_table *); | |
103 | |
104 #endif /* LIBCPP_SYMTAB_H */ |