enum update_type genhash_fun_update(genhash_t* h, const void* k, size_t klen, void *(*upd)(const void *, const void *, size_t *, void *), void (*fr)(void*), void *arg, const void *def, size_t deflen) { struct genhash_entry_t *p; enum update_type rv=0; size_t newSize = 0; (void)deflen; p=genhash_find_entry(h, k, klen); if(p) { void *newValue=upd(k, p->value, &newSize, arg); free_value(h, p->value); p->value=dup_value(h, newValue, newSize); fr(newValue); rv=MODIFICATION; } else { void *newValue=upd(k, def, &newSize, arg); genhash_store(h, k, klen, newValue, newSize); fr(newValue); rv=NEW; } return rv; }
enum update_type genhash_fun_update(genhash_t* h, const void* k, void *(*upd)(const void *, const void *), void (*fr)(void*), const void *def) { struct genhash_entry_t *p; enum update_type rv=0; p=genhash_find_entry(h, k); if(p) { void *newValue=upd(k, p->value); void *k2=h->ops.dupKey(k); h->ops.freeKey(p->key); p->key=k2; void *v2=h->ops.dupValue(newValue); h->ops.freeValue(p->value); p->value=v2; fr(newValue); rv=MODIFICATION; } else { void *newValue=upd(k, def); genhash_store(h, k, newValue); fr(newValue); rv=NEW; } return rv; }
enum update_type genhash_update(genhash_t* h, const void* k, const void* v) { struct genhash_entry_t *p; enum update_type rv=0; p=genhash_find_entry(h, k); if(p) { void *k2=h->ops.dupKey(k); h->ops.freeKey(p->key); p->key=k2; void *v2=h->ops.dupValue(v); h->ops.freeValue(p->value); p->value=v2; rv=MODIFICATION; } else { genhash_store(h, k, v); rv=NEW; } return rv; }
void* genhash_find(genhash_t *h, const void* k, size_t klen) { struct genhash_entry_t *p; void *rv=NULL; p=genhash_find_entry(h, k, klen); if(p) { rv=p->value; } return rv; }
enum update_type genhash_update(genhash_t* h, const void* k, size_t klen, const void* v, size_t vlen) { struct genhash_entry_t *p; enum update_type rv=0; p=genhash_find_entry(h, k, klen); if(p) { free_value(h, p->value); p->value=dup_value(h, v, vlen); rv=MODIFICATION; } else { genhash_store(h, k, klen, v, vlen); rv=NEW; } return rv; }