Lines Matching refs:entry
102 entry_is_free(struct set_entry *entry)
104 return entry->key == NULL;
108 entry_is_deleted(struct set_entry *entry)
110 return entry->key == deleted_key;
114 entry_is_present(struct set_entry *entry)
116 return entry->key != NULL && entry->key != deleted_key;
205 * If delete_function is passed, it gets called on each entry present before
209 _mesa_set_destroy(struct set *ht, void (*delete_function)(struct set_entry *entry))
215 set_foreach (ht, entry) {
216 delete_function(entry);
234 * If delete_function is passed, it gets called on each entry present before
238 _mesa_set_clear(struct set *set, void (*delete_function)(struct set_entry *entry))
243 struct set_entry *entry;
246 for (entry = set->table; entry != set->table + set->size; entry++) {
247 if (entry_is_present(entry))
248 delete_function(entry);
250 entry->key = NULL;
259 * Finds a set entry with the given key and hash of that key.
261 * Returns NULL if no entry is found.
274 struct set_entry *entry = ht->table + hash_address;
276 if (entry_is_free(entry)) {
278 } else if (entry_is_present(entry) && entry->hash == hash) {
279 if (ht->key_equals_function(key, entry->key)) {
280 return entry;
317 struct set_entry *entry = ht->table + hash_address;
318 if (likely(entry->key == NULL)) {
319 entry->hash = hash;
320 entry->key = key;
362 set_foreach(&old_ht, entry) {
363 set_add_rehash(ht, entry->hash, entry->key);
386 * Find a matching entry for the given key, or insert it if it doesn't already
411 struct set_entry *entry = ht->table + hash_address;
413 if (!entry_is_present(entry)) {
414 /* Stash the first available entry we find */
416 available_entry = entry;
417 if (entry_is_free(entry))
421 if (!entry_is_deleted(entry) &&
422 entry->hash == hash &&
423 ht->key_equals_function(key, entry->key)) {
426 return entry;
435 /* There is no matching entry, create it. */
461 struct set_entry *entry = set_search_or_add(ht, hash, key, NULL);
463 if (unlikely(!entry))
466 /* Note: If a matching entry already exists, this will replace it. This is
475 entry->key = key;
476 return entry;
509 struct set_entry *entry = set_search_or_add(set, hash, key, replaced);
511 if (unlikely(!entry))
515 * be notified if we're overwriting a found entry.
517 entry->key = key;
518 return entry;
538 * This function deletes the given hash table entry.
544 _mesa_set_remove(struct set *ht, struct set_entry *entry)
546 if (!entry)
549 entry->key = deleted_key;
555 * Removes the entry with the corresponding key, if exists.
566 * Pass in NULL for the first entry, as in the start of a for loop.
569 _mesa_set_next_entry_unsafe(const struct set *ht, struct set_entry *entry)
574 if (entry == NULL)
575 entry = ht->table;
577 entry = entry + 1;
578 if (entry != ht->table + ht->size)
579 return entry->key ? entry : _mesa_set_next_entry_unsafe(ht, entry);
587 * Pass in NULL for the first entry, as in the start of a for loop. Note that
591 _mesa_set_next_entry(const struct set *ht, struct set_entry *entry)
593 if (entry == NULL)
594 entry = ht->table;
596 entry = entry + 1;
598 for (; entry != ht->table + ht->size; entry++) {
599 if (entry_is_present(entry)) {
600 return entry;
609 int (*predicate)(struct set_entry *entry))
611 struct set_entry *entry;
617 for (entry = ht->table + i; entry != ht->table + ht->size; entry++) {
618 if (entry_is_present(entry) &&
619 (!predicate || predicate(entry))) {
620 return entry;
624 for (entry = ht->table; entry != ht->table + i; entry++) {
625 if (entry_is_present(entry) &&
626 (!predicate || predicate(entry))) {
627 return entry;
657 set_foreach(a, entry) {
658 if (_mesa_set_search_pre_hashed(b, entry->hash, entry->key))