(root)/
binutils-2.41/
gas/
hash.c
       1  /* hash.c -- gas hash table code
       2     Copyright (C) 1987-2023 Free Software Foundation, Inc.
       3  
       4     This file is part of GAS, the GNU Assembler.
       5  
       6     GAS is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3, or (at your option)
       9     any later version.
      10  
      11     GAS is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with GAS; see the file COPYING.  If not, write to the Free
      18     Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
      19     02110-1301, USA.  */
      20  
      21  #include "as.h"
      22  
      23  /* Hash function for a string_tuple.  */
      24  
      25  hashval_t
      26  hash_string_tuple (const void *e)
      27  {
      28    string_tuple_t *tuple = (string_tuple_t *) e;
      29    return htab_hash_string (tuple->key);
      30  }
      31  
      32  /* Equality function for a string_tuple.  */
      33  
      34  int
      35  eq_string_tuple (const void *a, const void *b)
      36  {
      37    const string_tuple_t *ea = (const string_tuple_t *) a;
      38    const string_tuple_t *eb = (const string_tuple_t *) b;
      39  
      40    return strcmp (ea->key, eb->key) == 0;
      41  }
      42  
      43  /* Insert ELEMENT into HTAB.  If REPLACE is non-zero existing elements
      44     are overwritten.  If ELEMENT already exists, a pointer to the slot
      45     is returned.  Otherwise NULL is returned.  */
      46  
      47  void **
      48  htab_insert (htab_t htab, void *element, int replace)
      49  {
      50    void **slot = htab_find_slot (htab, element, INSERT);
      51    if (*slot != NULL)
      52      {
      53        if (replace)
      54  	{
      55  	  if (htab->del_f)
      56  	    (*htab->del_f) (*slot);
      57  	  *slot = element;
      58  	}
      59        return slot;
      60      }
      61    *slot = element;
      62    return NULL;
      63  }
      64  
      65  /* Print statistics about a hash table.  */
      66  
      67  void
      68  htab_print_statistics (FILE *f, const char *name, htab_t table)
      69  {
      70    fprintf (f, "%s hash statistics:\n", name);
      71    fprintf (f, "\t%u searches\n", table->searches);
      72    fprintf (f, "\t%u collisions\n", table->collisions);
      73    fprintf (f, "\t%lu elements\n", (unsigned long) htab_elements (table));
      74    fprintf (f, "\t%lu table size\n", (unsigned long) htab_size (table));
      75  }