Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}