X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fq.c;h=fc9f8684256548e89cde59b87623f6ee75a781db;hb=10b60d36fcf6cc9532bf397866c5bdc3393246eb;hp=1d27b4238ce810113c649a33ac0668096bb4b8ba;hpb=fec1ab31707e68c2396b186e0e4928632402d649;p=swftools.git diff --git a/lib/q.c b/lib/q.c index 1d27b42..fc9f868 100644 --- a/lib/q.c +++ b/lib/q.c @@ -1159,6 +1159,34 @@ char dict_del(dict_t*h, const void*key) return 0; } +char dict_del2(dict_t*h, const void*key, void*data) +{ + if(!h->num) + return 0; + unsigned int hash = h->key_type->hash(key) % h->hashsize; + dictentry_t*head = h->slots[hash]; + dictentry_t*e = head, *prev=0; + while(e) { + if(h->key_type->equals(e->key, key) && e->data == data) { + dictentry_t*next = e->next; + h->key_type->free(e->key); + memset(e, 0, sizeof(dictentry_t)); + rfx_free(e); + if(e == head) { + h->slots[hash] = next; + } else { + assert(prev); + prev->next = next; + } + h->num--; + return 1; + } + prev = e; + e = e->next; + } + return 0; +} + dictentry_t* dict_get_slot(dict_t*h, const void*key) { if(!h->num)