merge from gcc
This commit is contained in:
parent
0d828caf1e
commit
c3cca4c912
4 changed files with 42 additions and 32 deletions
|
@ -1,3 +1,8 @@
|
|||
2005-06-30 Daniel Berlin <dberlin@dberlin.org>
|
||||
|
||||
* hashtab.h (HTAB_DELETED_ENTRY): New macro.
|
||||
(HTAB_EMPTY_ENTRY): New macro.
|
||||
|
||||
2005-06-20 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* libiberty.h (strverscmp): Prototype.
|
||||
|
|
|
@ -81,6 +81,15 @@ typedef void (*htab_free) (void *);
|
|||
typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
|
||||
typedef void (*htab_free_with_arg) (void *, void *);
|
||||
|
||||
/* This macro defines reserved value for empty table entry. */
|
||||
|
||||
#define HTAB_EMPTY_ENTRY ((PTR) 0)
|
||||
|
||||
/* This macro defines reserved value for table entry which contained
|
||||
a deleted element. */
|
||||
|
||||
#define HTAB_DELETED_ENTRY ((PTR) 1)
|
||||
|
||||
/* Hash tables are of the following type. The structure
|
||||
(implementation) of this type is not needed for using the hash
|
||||
tables. All work with hash table should be executed only through
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2005-06-30 Daniel Berlin <dberlin@dberlin.org>
|
||||
|
||||
* hashtab.c (EMPTY_ENTRY): Moved and renamed.
|
||||
(DELETED_ENTRY): Ditto.
|
||||
|
||||
2005-06-20 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* strverscmp.c: New.
|
||||
|
|
|
@ -64,15 +64,6 @@ Boston, MA 02110-1301, USA. */
|
|||
#define CHAR_BIT 8
|
||||
#endif
|
||||
|
||||
/* This macro defines reserved value for empty table entry. */
|
||||
|
||||
#define EMPTY_ENTRY ((PTR) 0)
|
||||
|
||||
/* This macro defines reserved value for table entry which contained
|
||||
a deleted element. */
|
||||
|
||||
#define DELETED_ENTRY ((PTR) 1)
|
||||
|
||||
static unsigned int higher_prime_index (unsigned long);
|
||||
static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int);
|
||||
static hashval_t htab_mod (hashval_t, htab_t);
|
||||
|
@ -290,7 +281,7 @@ htab_mod_m2 (hashval_t hash, htab_t htab)
|
|||
|
||||
/* This function creates table with length slightly longer than given
|
||||
source length. Created hash table is initiated as empty (all the
|
||||
hash table entries are EMPTY_ENTRY). The function returns the
|
||||
hash table entries are HTAB_EMPTY_ENTRY). The function returns the
|
||||
created hash table, or NULL if memory allocation fails. */
|
||||
|
||||
htab_t
|
||||
|
@ -401,7 +392,7 @@ htab_delete (htab_t htab)
|
|||
|
||||
if (htab->del_f)
|
||||
for (i = size - 1; i >= 0; i--)
|
||||
if (entries[i] != EMPTY_ENTRY && entries[i] != DELETED_ENTRY)
|
||||
if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
|
||||
(*htab->del_f) (entries[i]);
|
||||
|
||||
if (htab->free_f != NULL)
|
||||
|
@ -427,7 +418,7 @@ htab_empty (htab_t htab)
|
|||
|
||||
if (htab->del_f)
|
||||
for (i = size - 1; i >= 0; i--)
|
||||
if (entries[i] != EMPTY_ENTRY && entries[i] != DELETED_ENTRY)
|
||||
if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
|
||||
(*htab->del_f) (entries[i]);
|
||||
|
||||
memset (entries, 0, size * sizeof (PTR));
|
||||
|
@ -448,9 +439,9 @@ find_empty_slot_for_expand (htab_t htab, hashval_t hash)
|
|||
PTR *slot = htab->entries + index;
|
||||
hashval_t hash2;
|
||||
|
||||
if (*slot == EMPTY_ENTRY)
|
||||
if (*slot == HTAB_EMPTY_ENTRY)
|
||||
return slot;
|
||||
else if (*slot == DELETED_ENTRY)
|
||||
else if (*slot == HTAB_DELETED_ENTRY)
|
||||
abort ();
|
||||
|
||||
hash2 = htab_mod_m2 (hash, htab);
|
||||
|
@ -461,9 +452,9 @@ find_empty_slot_for_expand (htab_t htab, hashval_t hash)
|
|||
index -= size;
|
||||
|
||||
slot = htab->entries + index;
|
||||
if (*slot == EMPTY_ENTRY)
|
||||
if (*slot == HTAB_EMPTY_ENTRY)
|
||||
return slot;
|
||||
else if (*slot == DELETED_ENTRY)
|
||||
else if (*slot == HTAB_DELETED_ENTRY)
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
|
@ -523,7 +514,7 @@ htab_expand (htab_t htab)
|
|||
{
|
||||
PTR x = *p;
|
||||
|
||||
if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
|
||||
if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
|
||||
{
|
||||
PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
|
||||
|
||||
|
@ -556,8 +547,8 @@ htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash)
|
|||
index = htab_mod (hash, htab);
|
||||
|
||||
entry = htab->entries[index];
|
||||
if (entry == EMPTY_ENTRY
|
||||
|| (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
||||
if (entry == HTAB_EMPTY_ENTRY
|
||||
|| (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
||||
return entry;
|
||||
|
||||
hash2 = htab_mod_m2 (hash, htab);
|
||||
|
@ -569,8 +560,8 @@ htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash)
|
|||
index -= size;
|
||||
|
||||
entry = htab->entries[index];
|
||||
if (entry == EMPTY_ENTRY
|
||||
|| (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
||||
if (entry == HTAB_EMPTY_ENTRY
|
||||
|| (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
|
@ -615,9 +606,9 @@ htab_find_slot_with_hash (htab_t htab, const PTR element,
|
|||
first_deleted_slot = NULL;
|
||||
|
||||
entry = htab->entries[index];
|
||||
if (entry == EMPTY_ENTRY)
|
||||
if (entry == HTAB_EMPTY_ENTRY)
|
||||
goto empty_entry;
|
||||
else if (entry == DELETED_ENTRY)
|
||||
else if (entry == HTAB_DELETED_ENTRY)
|
||||
first_deleted_slot = &htab->entries[index];
|
||||
else if ((*htab->eq_f) (entry, element))
|
||||
return &htab->entries[index];
|
||||
|
@ -631,9 +622,9 @@ htab_find_slot_with_hash (htab_t htab, const PTR element,
|
|||
index -= size;
|
||||
|
||||
entry = htab->entries[index];
|
||||
if (entry == EMPTY_ENTRY)
|
||||
if (entry == HTAB_EMPTY_ENTRY)
|
||||
goto empty_entry;
|
||||
else if (entry == DELETED_ENTRY)
|
||||
else if (entry == HTAB_DELETED_ENTRY)
|
||||
{
|
||||
if (!first_deleted_slot)
|
||||
first_deleted_slot = &htab->entries[index];
|
||||
|
@ -649,7 +640,7 @@ htab_find_slot_with_hash (htab_t htab, const PTR element,
|
|||
if (first_deleted_slot)
|
||||
{
|
||||
htab->n_deleted--;
|
||||
*first_deleted_slot = EMPTY_ENTRY;
|
||||
*first_deleted_slot = HTAB_EMPTY_ENTRY;
|
||||
return first_deleted_slot;
|
||||
}
|
||||
|
||||
|
@ -688,13 +679,13 @@ htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash)
|
|||
PTR *slot;
|
||||
|
||||
slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
|
||||
if (*slot == EMPTY_ENTRY)
|
||||
if (*slot == HTAB_EMPTY_ENTRY)
|
||||
return;
|
||||
|
||||
if (htab->del_f)
|
||||
(*htab->del_f) (*slot);
|
||||
|
||||
*slot = DELETED_ENTRY;
|
||||
*slot = HTAB_DELETED_ENTRY;
|
||||
htab->n_deleted++;
|
||||
}
|
||||
|
||||
|
@ -706,13 +697,13 @@ void
|
|||
htab_clear_slot (htab_t htab, PTR *slot)
|
||||
{
|
||||
if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
|
||||
|| *slot == EMPTY_ENTRY || *slot == DELETED_ENTRY)
|
||||
|| *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY)
|
||||
abort ();
|
||||
|
||||
if (htab->del_f)
|
||||
(*htab->del_f) (*slot);
|
||||
|
||||
*slot = DELETED_ENTRY;
|
||||
*slot = HTAB_DELETED_ENTRY;
|
||||
htab->n_deleted++;
|
||||
}
|
||||
|
||||
|
@ -726,7 +717,7 @@ htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info)
|
|||
{
|
||||
PTR *slot;
|
||||
PTR *limit;
|
||||
|
||||
|
||||
slot = htab->entries;
|
||||
limit = slot + htab_size (htab);
|
||||
|
||||
|
@ -734,7 +725,7 @@ htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info)
|
|||
{
|
||||
PTR x = *slot;
|
||||
|
||||
if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
|
||||
if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
|
||||
if (!(*callback) (slot, info))
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue