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>
|
2005-06-20 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* libiberty.h (strverscmp): Prototype.
|
* 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_alloc_with_arg) (void *, size_t, size_t);
|
||||||
typedef void (*htab_free_with_arg) (void *, void *);
|
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
|
/* Hash tables are of the following type. The structure
|
||||||
(implementation) of this type is not needed for using the hash
|
(implementation) of this type is not needed for using the hash
|
||||||
tables. All work with hash table should be executed only through
|
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>
|
2005-06-20 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* strverscmp.c: New.
|
* strverscmp.c: New.
|
||||||
|
|
|
@ -64,15 +64,6 @@ Boston, MA 02110-1301, USA. */
|
||||||
#define CHAR_BIT 8
|
#define CHAR_BIT 8
|
||||||
#endif
|
#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 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_1 (hashval_t, hashval_t, hashval_t, int);
|
||||||
static hashval_t htab_mod (hashval_t, htab_t);
|
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
|
/* This function creates table with length slightly longer than given
|
||||||
source length. Created hash table is initiated as empty (all the
|
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. */
|
created hash table, or NULL if memory allocation fails. */
|
||||||
|
|
||||||
htab_t
|
htab_t
|
||||||
|
@ -401,7 +392,7 @@ htab_delete (htab_t htab)
|
||||||
|
|
||||||
if (htab->del_f)
|
if (htab->del_f)
|
||||||
for (i = size - 1; i >= 0; i--)
|
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]);
|
(*htab->del_f) (entries[i]);
|
||||||
|
|
||||||
if (htab->free_f != NULL)
|
if (htab->free_f != NULL)
|
||||||
|
@ -427,7 +418,7 @@ htab_empty (htab_t htab)
|
||||||
|
|
||||||
if (htab->del_f)
|
if (htab->del_f)
|
||||||
for (i = size - 1; i >= 0; i--)
|
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]);
|
(*htab->del_f) (entries[i]);
|
||||||
|
|
||||||
memset (entries, 0, size * sizeof (PTR));
|
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;
|
PTR *slot = htab->entries + index;
|
||||||
hashval_t hash2;
|
hashval_t hash2;
|
||||||
|
|
||||||
if (*slot == EMPTY_ENTRY)
|
if (*slot == HTAB_EMPTY_ENTRY)
|
||||||
return slot;
|
return slot;
|
||||||
else if (*slot == DELETED_ENTRY)
|
else if (*slot == HTAB_DELETED_ENTRY)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
hash2 = htab_mod_m2 (hash, htab);
|
hash2 = htab_mod_m2 (hash, htab);
|
||||||
|
@ -461,9 +452,9 @@ find_empty_slot_for_expand (htab_t htab, hashval_t hash)
|
||||||
index -= size;
|
index -= size;
|
||||||
|
|
||||||
slot = htab->entries + index;
|
slot = htab->entries + index;
|
||||||
if (*slot == EMPTY_ENTRY)
|
if (*slot == HTAB_EMPTY_ENTRY)
|
||||||
return slot;
|
return slot;
|
||||||
else if (*slot == DELETED_ENTRY)
|
else if (*slot == HTAB_DELETED_ENTRY)
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -523,7 +514,7 @@ htab_expand (htab_t htab)
|
||||||
{
|
{
|
||||||
PTR x = *p;
|
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));
|
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);
|
index = htab_mod (hash, htab);
|
||||||
|
|
||||||
entry = htab->entries[index];
|
entry = htab->entries[index];
|
||||||
if (entry == EMPTY_ENTRY
|
if (entry == HTAB_EMPTY_ENTRY
|
||||||
|| (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
|| (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
||||||
return entry;
|
return entry;
|
||||||
|
|
||||||
hash2 = htab_mod_m2 (hash, htab);
|
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;
|
index -= size;
|
||||||
|
|
||||||
entry = htab->entries[index];
|
entry = htab->entries[index];
|
||||||
if (entry == EMPTY_ENTRY
|
if (entry == HTAB_EMPTY_ENTRY
|
||||||
|| (entry != DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
|| (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -615,9 +606,9 @@ htab_find_slot_with_hash (htab_t htab, const PTR element,
|
||||||
first_deleted_slot = NULL;
|
first_deleted_slot = NULL;
|
||||||
|
|
||||||
entry = htab->entries[index];
|
entry = htab->entries[index];
|
||||||
if (entry == EMPTY_ENTRY)
|
if (entry == HTAB_EMPTY_ENTRY)
|
||||||
goto empty_entry;
|
goto empty_entry;
|
||||||
else if (entry == DELETED_ENTRY)
|
else if (entry == HTAB_DELETED_ENTRY)
|
||||||
first_deleted_slot = &htab->entries[index];
|
first_deleted_slot = &htab->entries[index];
|
||||||
else if ((*htab->eq_f) (entry, element))
|
else if ((*htab->eq_f) (entry, element))
|
||||||
return &htab->entries[index];
|
return &htab->entries[index];
|
||||||
|
@ -631,9 +622,9 @@ htab_find_slot_with_hash (htab_t htab, const PTR element,
|
||||||
index -= size;
|
index -= size;
|
||||||
|
|
||||||
entry = htab->entries[index];
|
entry = htab->entries[index];
|
||||||
if (entry == EMPTY_ENTRY)
|
if (entry == HTAB_EMPTY_ENTRY)
|
||||||
goto empty_entry;
|
goto empty_entry;
|
||||||
else if (entry == DELETED_ENTRY)
|
else if (entry == HTAB_DELETED_ENTRY)
|
||||||
{
|
{
|
||||||
if (!first_deleted_slot)
|
if (!first_deleted_slot)
|
||||||
first_deleted_slot = &htab->entries[index];
|
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)
|
if (first_deleted_slot)
|
||||||
{
|
{
|
||||||
htab->n_deleted--;
|
htab->n_deleted--;
|
||||||
*first_deleted_slot = EMPTY_ENTRY;
|
*first_deleted_slot = HTAB_EMPTY_ENTRY;
|
||||||
return first_deleted_slot;
|
return first_deleted_slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,13 +679,13 @@ htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash)
|
||||||
PTR *slot;
|
PTR *slot;
|
||||||
|
|
||||||
slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
|
slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
|
||||||
if (*slot == EMPTY_ENTRY)
|
if (*slot == HTAB_EMPTY_ENTRY)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (htab->del_f)
|
if (htab->del_f)
|
||||||
(*htab->del_f) (*slot);
|
(*htab->del_f) (*slot);
|
||||||
|
|
||||||
*slot = DELETED_ENTRY;
|
*slot = HTAB_DELETED_ENTRY;
|
||||||
htab->n_deleted++;
|
htab->n_deleted++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -706,13 +697,13 @@ void
|
||||||
htab_clear_slot (htab_t htab, PTR *slot)
|
htab_clear_slot (htab_t htab, PTR *slot)
|
||||||
{
|
{
|
||||||
if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
|
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 ();
|
abort ();
|
||||||
|
|
||||||
if (htab->del_f)
|
if (htab->del_f)
|
||||||
(*htab->del_f) (*slot);
|
(*htab->del_f) (*slot);
|
||||||
|
|
||||||
*slot = DELETED_ENTRY;
|
*slot = HTAB_DELETED_ENTRY;
|
||||||
htab->n_deleted++;
|
htab->n_deleted++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,7 +725,7 @@ htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info)
|
||||||
{
|
{
|
||||||
PTR x = *slot;
|
PTR x = *slot;
|
||||||
|
|
||||||
if (x != EMPTY_ENTRY && x != DELETED_ENTRY)
|
if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
|
||||||
if (!(*callback) (slot, info))
|
if (!(*callback) (slot, info))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue