public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] libibery/hashtab: add new functions
@ 2020-08-17 14:03 Martin Liška
  2020-08-17 14:06 ` Martin Liška
  0 siblings, 1 reply; 4+ messages in thread
From: Martin Liška @ 2020-08-17 14:03 UTC (permalink / raw)
  To: gcc-patches

Hey.

I'm working on bintuils where I would like to port a hash table
implementation in gas/hash.[ch] to libiberty one.

But it would be handy for me to add 2 new functions.

Thoughts?
Thanks,
Martin

include/ChangeLog:

	* hashtab.h (htab_insert): New function.
	(htab_print_statistics): Likewise.

libiberty/ChangeLog:

	* hashtab.c (htab_insert): New function.
	(htab_print_statistics): Likewise.
---
  include/hashtab.h   |  6 ++++++
  libiberty/hashtab.c | 23 +++++++++++++++++++++++
  2 files changed, 29 insertions(+)

diff --git a/include/hashtab.h b/include/hashtab.h
index 6cca342b989..bcaee909bcf 100644
--- a/include/hashtab.h
+++ b/include/hashtab.h
@@ -37,6 +37,7 @@ extern "C" {
  #endif /* __cplusplus */
  
  #include "ansidecl.h"
+#include <stdio.h>
  
  /* The type for a hash code.  */
  typedef unsigned int hashval_t;
@@ -172,6 +173,7 @@ extern void **	htab_find_slot (htab_t, const void *, enum insert_option);
  extern void *	htab_find_with_hash (htab_t, const void *, hashval_t);
  extern void **	htab_find_slot_with_hash (htab_t, const void *,
  					  hashval_t, enum insert_option);
+extern void	htab_insert (htab_t, void *);
  extern void	htab_clear_slot	(htab_t, void **);
  extern void	htab_remove_elt	(htab_t, const void *);
  extern void	htab_remove_elt_with_hash (htab_t, const void *, hashval_t);
@@ -183,6 +185,10 @@ extern size_t	htab_size (htab_t);
  extern size_t	htab_elements (htab_t);
  extern double	htab_collisions	(htab_t);
  
+extern void	htab_print_statistics (FILE *f, htab_t table,
+				       const char *name,
+				       const char *prefix);
+
  /* A hash function for pointers.  */
  extern htab_hash htab_hash_pointer;
  
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
index 225e9e540a7..fb3152ec9c6 100644
--- a/libiberty/hashtab.c
+++ b/libiberty/hashtab.c
@@ -704,6 +704,15 @@ htab_find_slot (htab_t htab, const PTR element, enum insert_option insert)
  				   insert);
  }
  
+/* Insert ELEMENT into HTAB.  If the element exists, it is overwritten.  */
+
+void
+htab_insert (htab_t htab, PTR element)
+{
+  void **slot = htab_find_slot (htab, element, INSERT);
+  *slot = element;
+}
+
  /* This function deletes an element with the given value from hash
     table (the hash is computed from the element).  If there is no matching
     element in the hash table, this function does nothing.  */
@@ -803,6 +812,20 @@ htab_collisions (htab_t htab)
    return (double) htab->collisions / (double) htab->searches;
  }
  
+/* Print statistics about a hash table.  */
+
+void
+htab_print_statistics (FILE *f, htab_t table, const char *name,
+		       const char *prefix)
+{
+  fprintf (f, "%s hash statistics:\n", name);
+  fprintf (f, "%s%u searches\n", prefix, table->searches);
+  fprintf (f, "%s%lu elements\n", prefix, htab_elements (table));
+  fprintf (f, "%s%lu table size\n", prefix, htab_size (table));
+  fprintf (f, "%s%.2f collisions per search\n",
+	   prefix, htab_collisions (table));
+}
+
  /* Hash P as a null-terminated string.
  
     Copied from gcc/hashtable.c.  Zack had the following to say with respect
-- 
2.28.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] libibery/hashtab: add new functions
  2020-08-17 14:03 [PATCH] libibery/hashtab: add new functions Martin Liška
@ 2020-08-17 14:06 ` Martin Liška
  2020-08-17 23:38   ` Ian Lance Taylor
  0 siblings, 1 reply; 4+ messages in thread
From: Martin Liška @ 2020-08-17 14:06 UTC (permalink / raw)
  To: gcc-patches; +Cc: Ian Lance Taylor, Alan Modra

Adding libiberty maintainer to CC.

On 8/17/20 4:03 PM, Martin Liška wrote:
> Hey.
> 
> I'm working on bintuils where I would like to port a hash table
> implementation in gas/hash.[ch] to libiberty one.
> 
> But it would be handy for me to add 2 new functions.
> 
> Thoughts?
> Thanks,
> Martin
> 
> include/ChangeLog:
> 
>      * hashtab.h (htab_insert): New function.
>      (htab_print_statistics): Likewise.
> 
> libiberty/ChangeLog:
> 
>      * hashtab.c (htab_insert): New function.
>      (htab_print_statistics): Likewise.
> ---
>   include/hashtab.h   |  6 ++++++
>   libiberty/hashtab.c | 23 +++++++++++++++++++++++
>   2 files changed, 29 insertions(+)
> 
> diff --git a/include/hashtab.h b/include/hashtab.h
> index 6cca342b989..bcaee909bcf 100644
> --- a/include/hashtab.h
> +++ b/include/hashtab.h
> @@ -37,6 +37,7 @@ extern "C" {
>   #endif /* __cplusplus */
> 
>   #include "ansidecl.h"
> +#include <stdio.h>
> 
>   /* The type for a hash code.  */
>   typedef unsigned int hashval_t;
> @@ -172,6 +173,7 @@ extern void **    htab_find_slot (htab_t, const void *, enum insert_option);
>   extern void *    htab_find_with_hash (htab_t, const void *, hashval_t);
>   extern void **    htab_find_slot_with_hash (htab_t, const void *,
>                         hashval_t, enum insert_option);
> +extern void    htab_insert (htab_t, void *);
>   extern void    htab_clear_slot    (htab_t, void **);
>   extern void    htab_remove_elt    (htab_t, const void *);
>   extern void    htab_remove_elt_with_hash (htab_t, const void *, hashval_t);
> @@ -183,6 +185,10 @@ extern size_t    htab_size (htab_t);
>   extern size_t    htab_elements (htab_t);
>   extern double    htab_collisions    (htab_t);
> 
> +extern void    htab_print_statistics (FILE *f, htab_t table,
> +                       const char *name,
> +                       const char *prefix);
> +
>   /* A hash function for pointers.  */
>   extern htab_hash htab_hash_pointer;
> 
> diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
> index 225e9e540a7..fb3152ec9c6 100644
> --- a/libiberty/hashtab.c
> +++ b/libiberty/hashtab.c
> @@ -704,6 +704,15 @@ htab_find_slot (htab_t htab, const PTR element, enum insert_option insert)
>                      insert);
>   }
> 
> +/* Insert ELEMENT into HTAB.  If the element exists, it is overwritten.  */
> +
> +void
> +htab_insert (htab_t htab, PTR element)
> +{
> +  void **slot = htab_find_slot (htab, element, INSERT);
> +  *slot = element;
> +}
> +
>   /* This function deletes an element with the given value from hash
>      table (the hash is computed from the element).  If there is no matching
>      element in the hash table, this function does nothing.  */
> @@ -803,6 +812,20 @@ htab_collisions (htab_t htab)
>     return (double) htab->collisions / (double) htab->searches;
>   }
> 
> +/* Print statistics about a hash table.  */
> +
> +void
> +htab_print_statistics (FILE *f, htab_t table, const char *name,
> +               const char *prefix)
> +{
> +  fprintf (f, "%s hash statistics:\n", name);
> +  fprintf (f, "%s%u searches\n", prefix, table->searches);
> +  fprintf (f, "%s%lu elements\n", prefix, htab_elements (table));
> +  fprintf (f, "%s%lu table size\n", prefix, htab_size (table));
> +  fprintf (f, "%s%.2f collisions per search\n",
> +       prefix, htab_collisions (table));
> +}
> +
>   /* Hash P as a null-terminated string.
> 
>      Copied from gcc/hashtable.c.  Zack had the following to say with respect


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] libibery/hashtab: add new functions
  2020-08-17 14:06 ` Martin Liška
@ 2020-08-17 23:38   ` Ian Lance Taylor
  2020-08-19 10:47     ` Martin Liška
  0 siblings, 1 reply; 4+ messages in thread
From: Ian Lance Taylor @ 2020-08-17 23:38 UTC (permalink / raw)
  To: Martin Liška; +Cc: gcc-patches, Alan Modra

On Mon, Aug 17, 2020 at 7:06 AM Martin Liška <mliska@suse.cz> wrote:
>
> Adding libiberty maintainer to CC.

I guess I'm not sure why either of these belong in libiberty.
htab_insert can be written elsewhere as needed.  And while perhaps
some sort of stats API would be reasonable, I don't think it should be
something that prints values to a FILE.

Ian


> On 8/17/20 4:03 PM, Martin Liška wrote:
> > Hey.
> >
> > I'm working on bintuils where I would like to port a hash table
> > implementation in gas/hash.[ch] to libiberty one.
> >
> > But it would be handy for me to add 2 new functions.
> >
> > Thoughts?
> > Thanks,
> > Martin
> >
> > include/ChangeLog:
> >
> >      * hashtab.h (htab_insert): New function.
> >      (htab_print_statistics): Likewise.
> >
> > libiberty/ChangeLog:
> >
> >      * hashtab.c (htab_insert): New function.
> >      (htab_print_statistics): Likewise.
> > ---
> >   include/hashtab.h   |  6 ++++++
> >   libiberty/hashtab.c | 23 +++++++++++++++++++++++
> >   2 files changed, 29 insertions(+)
> >
> > diff --git a/include/hashtab.h b/include/hashtab.h
> > index 6cca342b989..bcaee909bcf 100644
> > --- a/include/hashtab.h
> > +++ b/include/hashtab.h
> > @@ -37,6 +37,7 @@ extern "C" {
> >   #endif /* __cplusplus */
> >
> >   #include "ansidecl.h"
> > +#include <stdio.h>
> >
> >   /* The type for a hash code.  */
> >   typedef unsigned int hashval_t;
> > @@ -172,6 +173,7 @@ extern void **    htab_find_slot (htab_t, const void *, enum insert_option);
> >   extern void *    htab_find_with_hash (htab_t, const void *, hashval_t);
> >   extern void **    htab_find_slot_with_hash (htab_t, const void *,
> >                         hashval_t, enum insert_option);
> > +extern void    htab_insert (htab_t, void *);
> >   extern void    htab_clear_slot    (htab_t, void **);
> >   extern void    htab_remove_elt    (htab_t, const void *);
> >   extern void    htab_remove_elt_with_hash (htab_t, const void *, hashval_t);
> > @@ -183,6 +185,10 @@ extern size_t    htab_size (htab_t);
> >   extern size_t    htab_elements (htab_t);
> >   extern double    htab_collisions    (htab_t);
> >
> > +extern void    htab_print_statistics (FILE *f, htab_t table,
> > +                       const char *name,
> > +                       const char *prefix);
> > +
> >   /* A hash function for pointers.  */
> >   extern htab_hash htab_hash_pointer;
> >
> > diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
> > index 225e9e540a7..fb3152ec9c6 100644
> > --- a/libiberty/hashtab.c
> > +++ b/libiberty/hashtab.c
> > @@ -704,6 +704,15 @@ htab_find_slot (htab_t htab, const PTR element, enum insert_option insert)
> >                      insert);
> >   }
> >
> > +/* Insert ELEMENT into HTAB.  If the element exists, it is overwritten.  */
> > +
> > +void
> > +htab_insert (htab_t htab, PTR element)
> > +{
> > +  void **slot = htab_find_slot (htab, element, INSERT);
> > +  *slot = element;
> > +}
> > +
> >   /* This function deletes an element with the given value from hash
> >      table (the hash is computed from the element).  If there is no matching
> >      element in the hash table, this function does nothing.  */
> > @@ -803,6 +812,20 @@ htab_collisions (htab_t htab)
> >     return (double) htab->collisions / (double) htab->searches;
> >   }
> >
> > +/* Print statistics about a hash table.  */
> > +
> > +void
> > +htab_print_statistics (FILE *f, htab_t table, const char *name,
> > +               const char *prefix)
> > +{
> > +  fprintf (f, "%s hash statistics:\n", name);
> > +  fprintf (f, "%s%u searches\n", prefix, table->searches);
> > +  fprintf (f, "%s%lu elements\n", prefix, htab_elements (table));
> > +  fprintf (f, "%s%lu table size\n", prefix, htab_size (table));
> > +  fprintf (f, "%s%.2f collisions per search\n",
> > +       prefix, htab_collisions (table));
> > +}
> > +
> >   /* Hash P as a null-terminated string.
> >
> >      Copied from gcc/hashtable.c.  Zack had the following to say with respect
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] libibery/hashtab: add new functions
  2020-08-17 23:38   ` Ian Lance Taylor
@ 2020-08-19 10:47     ` Martin Liška
  0 siblings, 0 replies; 4+ messages in thread
From: Martin Liška @ 2020-08-19 10:47 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, Alan Modra

On 8/18/20 1:38 AM, Ian Lance Taylor wrote:
> I guess I'm not sure why either of these belong in libiberty.
> htab_insert can be written elsewhere as needed.  And while perhaps
> some sort of stats API would be reasonable, I don't think it should be
> something that prints values to a FILE.

Understood. I put these functions directly to a gas subdirectory.

Thanks,
Martin

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-08-19 10:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-17 14:03 [PATCH] libibery/hashtab: add new functions Martin Liška
2020-08-17 14:06 ` Martin Liška
2020-08-17 23:38   ` Ian Lance Taylor
2020-08-19 10:47     ` Martin Liška

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).