diff options
author | Ken Raeburn <raeburn@cygnus> | 1995-11-28 19:21:09 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@cygnus> | 1995-11-28 19:21:09 +0000 |
commit | 6594d6b9c2069e288b56260776bcbceb43798667 (patch) | |
tree | 6cc18c631335ee2dd3972736c4afb1d454e2169d /gas/hash.h | |
parent | da954cd7b6deb1bc17f4cdb467d0cfac9a79bcb9 (diff) | |
download | gdb-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.h | 64 |
1 files changed, 30 insertions, 34 deletions
@@ -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 */ |