Home | History | Annotate | Line # | Download | only in libgettextpo
      1  1.1  christos /* Copyright (C) 1995, 2000-2003, 2005-2006 Free Software Foundation, Inc.
      2  1.1  christos 
      3  1.1  christos    The GNU C Library is free software; you can redistribute it and/or
      4  1.1  christos    modify it under the terms of the GNU Library General Public License as
      5  1.1  christos    published by the Free Software Foundation; either version 2 of the
      6  1.1  christos    License, or (at your option) any later version.
      7  1.1  christos 
      8  1.1  christos    The GNU C Library is distributed in the hope that it will be useful,
      9  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     11  1.1  christos    Library General Public License for more details.
     12  1.1  christos 
     13  1.1  christos    You should have received a copy of the GNU Library General Public
     14  1.1  christos    License along with the GNU C Library; see the file COPYING.LIB.  If
     15  1.1  christos    not, write to the Free Software Foundation, Inc., 51 Franklin Street,
     16  1.1  christos    Fifth Floor, Boston, MA 02110-1301, USA.  */
     17  1.1  christos 
     18  1.1  christos #ifndef _HASH_H
     19  1.1  christos #define _HASH_H
     20  1.1  christos 
     21  1.1  christos #include "obstack.h"
     22  1.1  christos 
     23  1.1  christos #ifdef __cplusplus
     24  1.1  christos extern "C" {
     25  1.1  christos #endif
     26  1.1  christos 
     27  1.1  christos struct hash_entry;
     28  1.1  christos 
     29  1.1  christos typedef struct hash_table
     30  1.1  christos {
     31  1.1  christos   unsigned long int size;   /* Number of allocated entries.  */
     32  1.1  christos   unsigned long int filled; /* Number of used entries.  */
     33  1.1  christos   struct hash_entry *first; /* Pointer to head of list of entries.  */
     34  1.1  christos   struct hash_entry *table; /* Pointer to array of entries.  */
     35  1.1  christos   struct obstack mem_pool;  /* Memory pool holding the keys.  */
     36  1.1  christos }
     37  1.1  christos hash_table;
     38  1.1  christos 
     39  1.1  christos /* Initialize a hash table.  INIT_SIZE > 1 is the initial number of available
     40  1.1  christos    entries.
     41  1.1  christos    Return 0 upon successful completion, -1 upon memory allocation error.  */
     42  1.1  christos extern int hash_init (hash_table *htab, unsigned long int init_size);
     43  1.1  christos 
     44  1.1  christos /* Delete a hash table's contents.
     45  1.1  christos    Return 0 always.  */
     46  1.1  christos extern int hash_destroy (hash_table *htab);
     47  1.1  christos 
     48  1.1  christos /* Look up the value of a key in the given table.
     49  1.1  christos    If found, return 0 and set *RESULT to it.  Otherwise return -1.  */
     50  1.1  christos extern int hash_find_entry (hash_table *htab,
     51  1.1  christos 			    const void *key, size_t keylen,
     52  1.1  christos 			    void **result);
     53  1.1  christos 
     54  1.1  christos /* Try to insert the pair (KEY[0..KEYLEN-1], DATA) in the hash table.
     55  1.1  christos    Return non-NULL (more precisely, the address of the KEY inside the table's
     56  1.1  christos    memory pool) if successful, or NULL if there is already an entry with the
     57  1.1  christos    given key.  */
     58  1.1  christos extern const void * hash_insert_entry (hash_table *htab,
     59  1.1  christos 				       const void *key, size_t keylen,
     60  1.1  christos 				       void *data);
     61  1.1  christos 
     62  1.1  christos /* Insert the pair (KEY[0..KEYLEN-1], DATA) in the hash table.
     63  1.1  christos    Return 0.  */
     64  1.1  christos extern int hash_set_value (hash_table *htab,
     65  1.1  christos 			   const void *key, size_t keylen,
     66  1.1  christos 			   void *data);
     67  1.1  christos 
     68  1.1  christos /* Steps *PTR forward to the next used entry in the given hash table.  *PTR
     69  1.1  christos    should be initially set to NULL.  Store information about the next entry
     70  1.1  christos    in *KEY, *KEYLEN, *DATA.
     71  1.1  christos    Return 0 normally, -1 when the whole hash table has been traversed.  */
     72  1.1  christos extern int hash_iterate (hash_table *htab, void **ptr,
     73  1.1  christos 			 const void **key, size_t *keylen,
     74  1.1  christos 			 void **data);
     75  1.1  christos 
     76  1.1  christos /* Steps *PTR forward to the next used entry in the given hash table.  *PTR
     77  1.1  christos    should be initially set to NULL.  Store information about the next entry
     78  1.1  christos    in *KEY, *KEYLEN, *DATAP.  *DATAP is set to point to the storage of the
     79  1.1  christos    value; modifying **DATAP will modify the value of the entry.
     80  1.1  christos    Return 0 normally, -1 when the whole hash table has been traversed.  */
     81  1.1  christos extern int hash_iterate_modify (hash_table *htab, void **ptr,
     82  1.1  christos 				const void **key, size_t *keylen,
     83  1.1  christos 				void ***datap);
     84  1.1  christos 
     85  1.1  christos /* Given SEED > 1, return the smallest odd prime number >= SEED.  */
     86  1.1  christos extern unsigned long int next_prime (unsigned long int seed);
     87  1.1  christos 
     88  1.1  christos #ifdef __cplusplus
     89  1.1  christos }
     90  1.1  christos #endif
     91  1.1  christos 
     92  1.1  christos #endif /* not _HASH_H */
     93