OSDN Git Service

* warn_summary: Add -ada subdirectory flag.
[pf3gnuchains/gcc-fork.git] / include / hashtab.h
index e6e38e4..8871710 100644 (file)
@@ -1,5 +1,5 @@
 /* An expandable hash tables datatype.  
-   Copyright (C) 1999 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
    Contributed by Vladimir Makarov (vmakarov@cygnus.com).
 
 This program is free software; you can redistribute it and/or modify
@@ -38,13 +38,19 @@ extern "C" {
 
 #include <ansidecl.h>
 
+/* The type for a hash code.  */
+typedef unsigned int hashval_t;
+
 /* Callback function pointer types.  */
 
 /* Calculate hash of a table entry.  */
-typedef unsigned int (*htab_hash) PARAMS ((const void *));
+typedef hashval_t (*htab_hash) PARAMS ((const void *));
 
 /* Compare a table entry with a possible entry.  The entry already in
-   the table always comes first.  */
+   the table always comes first, so the second element can be of a
+   different type (but in this case htab_find and htab_find_slot
+   cannot be used; instead the variants that accept a hash value
+   must be used).  */
 typedef int (*htab_eq) PARAMS ((const void *, const void *));
 
 /* Cleanup function called whenever a live element is removed from
@@ -52,9 +58,10 @@ typedef int (*htab_eq) PARAMS ((const void *, const void *));
 typedef void (*htab_del) PARAMS ((void *));
   
 /* Function called by htab_traverse for each live element.  The first
-   arg is the element, the second arg is the auxiliary pointer handed
-   to htab_traverse.  Return 1 to continue scan, 0 to stop.  */
-typedef int (*htab_trav) PARAMS ((void *, void *));
+   arg is the slot of the element (which can be passed to htab_clear_slot
+   if desired), the second arg is the auxiliary pointer handed to
+   htab_traverse.  Return 1 to continue scan, 0 to stop.  */
+typedef int (*htab_trav) PARAMS ((void **, void *));
 
 /* Hash tables are of the following type.  The structure
    (implementation) of this type is not needed for using the hash
@@ -73,7 +80,7 @@ struct htab
   htab_del del_f;
 
   /* Table itself.  */
-  void **entries;
+  PTR *entries;
 
   /* Current size (in entries) of the hash table */
   size_t size;
@@ -91,19 +98,38 @@ struct htab
   /* The following member is used for debugging.  Its value is number
      of collisions fixed for time of work with the hash table. */
   unsigned int collisions;
+
+  /* This is non-zero if we are allowed to return NULL for function calls
+     that allocate memory.  */
+  int return_allocation_failure;
 };
 
 typedef struct htab *htab_t;
 
+/* An enum saying whether we insert into the hash table or not.  */
+enum insert_option {NO_INSERT, INSERT};
+
 /* The prototypes of the package functions. */
 
 extern htab_t  htab_create     PARAMS ((size_t, htab_hash,
                                         htab_eq, htab_del));
+
+/* This function is like htab_create, but may return NULL if memory
+   allocation fails, and also signals that htab_find_slot_with_hash and
+   htab_find_slot are allowed to return NULL when inserting.  */
+extern htab_t  htab_try_create PARAMS ((size_t, htab_hash,
+                                        htab_eq, htab_del));
 extern void    htab_delete     PARAMS ((htab_t));
 extern void    htab_empty      PARAMS ((htab_t));
 
-extern void    *htab_find      PARAMS ((htab_t, const void *));
-extern void   **htab_find_slot PARAMS ((htab_t, const void *, int));
+extern PTR     htab_find       PARAMS ((htab_t, const void *));
+extern PTR     *htab_find_slot PARAMS ((htab_t, const void *,
+                                        enum insert_option));
+extern PTR     htab_find_with_hash       PARAMS ((htab_t, const void *,
+                                                  hashval_t));
+extern PTR     *htab_find_slot_with_hash  PARAMS ((htab_t, const void *,
+                                                  hashval_t,
+                                                  enum insert_option));
 extern void    htab_clear_slot PARAMS ((htab_t, void **));
 extern void    htab_remove_elt PARAMS ((htab_t, void *));
 
@@ -113,6 +139,15 @@ extern size_t      htab_size       PARAMS ((htab_t));
 extern size_t  htab_elements   PARAMS ((htab_t));
 extern double  htab_collisions PARAMS ((htab_t));
 
+/* A hash function for pointers.  */
+extern htab_hash htab_hash_pointer;
+
+/* An equality function for pointers.  */
+extern htab_eq htab_eq_pointer;
+
+/* A hash function for null-terminated strings.  */
+extern hashval_t htab_hash_string PARAMS ((const PTR));
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */