aboutsummaryrefslogtreecommitdiff
path: root/gas/hash.h
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1995-11-28 19:21:09 +0000
committerKen Raeburn <raeburn@cygnus>1995-11-28 19:21:09 +0000
commit6594d6b9c2069e288b56260776bcbceb43798667 (patch)
tree6cc18c631335ee2dd3972736c4afb1d454e2169d /gas/hash.h
parentda954cd7b6deb1bc17f4cdb467d0cfac9a79bcb9 (diff)
downloadgdb-6594d6b9c2069e288b56260776bcbceb43798667.zip
gdb-6594d6b9c2069e288b56260776bcbceb43798667.tar.gz
gdb-6594d6b9c2069e288b56260776bcbceb43798667.tar.bz2
Clean up hash code, parameterize some actions, tweak some parameters. Hash
table entries, table allocation and control structure are larger now, but collisions are reduced and string compares even further reduced. Dump lots more statistics, especially hash code data, for --statistics. Dump statistics even in error cases. Details in ChangeLog.
Diffstat (limited to 'gas/hash.h')
-rw-r--r--gas/hash.h64
1 files changed, 30 insertions, 34 deletions
diff --git a/gas/hash.h b/gas/hash.h
index 4e151f9..43c7556 100644
--- a/gas/hash.h
+++ b/gas/hash.h
@@ -1,59 +1,55 @@
/* hash.h - for hash.c
- Copyright (C) 1987 Free Software Foundation, Inc.
-
+ Copyright (C) 1987, 1992 Free Software Foundation, Inc.
+
This file is part of GAS, the GNU Assembler.
-
+
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
-
+
GAS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to
- the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef hashH
#define hashH
struct hash_entry
{
- char * hash_string; /* points to where the symbol string is */
- /* NULL means slot is not used */
- /* DELETED means slot was deleted */
- char * hash_value; /* user's datum, associated with symbol */
+ const char *hash_string; /* points to where the symbol string is */
+ /* NULL means slot is not used */
+ /* DELETED means slot was deleted */
+ PTR hash_value; /* user's datum, associated with symbol */
+ unsigned long h;
};
-#define HASH_STATLENGTH (6)
-struct hash_control
-{
- struct hash_entry * hash_where; /* address of hash table */
- int hash_sizelog; /* Log of ( hash_mask + 1 ) */
- int hash_mask; /* masks a hash into index into table */
- int hash_full; /* when hash_stat[STAT_USED] exceeds this, */
- /* grow table */
- struct hash_entry * hash_wall; /* point just after last (usable) entry */
- /* here we have some statistics */
- int hash_stat[HASH_STATLENGTH]; /* lies & statistics */
- /* we need STAT_USED & STAT_SIZE */
-};
+struct hash_control;
+/* returns control block */
+struct hash_control *hash_new PARAMS ((void));
+void hash_die PARAMS ((struct hash_control *));
+/* returns previous value */
+PTR hash_delete PARAMS ((struct hash_control *, const char *str));
+/* returns previous value */
+PTR hash_replace PARAMS ((struct hash_control *, const char *str, PTR val));
+/* returns error string or null */
+const char *hash_insert PARAMS ((struct hash_control *, const char *str,
+ PTR val));
+/* returns value */
+PTR hash_find PARAMS ((struct hash_control *, const char *str));
+/* returns error text or null (internal) */
+const char *hash_jam PARAMS ((struct hash_control *, const char *str,
+ PTR val));
-/* returns */
-struct hash_control * hash_new(); /* [control block] */
-void hash_die();
-void hash_say();
-char * hash_delete(); /* previous value */
-char * hash_relpace(); /* previous value */
-char * hash_insert(); /* error string */
-char * hash_apply(); /* 0 means OK */
-char * hash_find(); /* value */
-char * hash_jam(); /* error text (internal) */
-#endif /* #ifdef hashH */
+void hash_print_statistics PARAMS ((FILE *, const char *,
+ struct hash_control *));
+#endif /* #ifdef hashH */
/* end of hash.c */