Blame src/util/uthash/tests/test16.c

Packit Service 9e77c8
#include <stdlib.h>    /* malloc       */
Packit Service 9e77c8
#include <stddef.h>    /* offsetof     */
Packit Service 9e77c8
#include <stdio.h>     /* printf       */
Packit Service 9e77c8
#include <string.h>    /* memset       */
Packit Service 9e77c8
#include "uthash.h"
Packit Service 9e77c8
Packit Service 9e77c8
struct inner {
Packit Service 9e77c8
    int a;
Packit Service 9e77c8
    int b;
Packit Service 9e77c8
}; 
Packit Service 9e77c8
Packit Service 9e77c8
struct my_event {
Packit Service 9e77c8
    struct inner is;           /* key is aggregate of this field */ 
Packit Service 9e77c8
    char event_code;           /* and this field.                */    
Packit Service 9e77c8
    int user_id;
Packit Service 9e77c8
    UT_hash_handle hh;         /* makes this structure hashable */
Packit Service 9e77c8
};
Packit Service 9e77c8
Packit Service 9e77c8
Packit Service 9e77c8
int main(int argc, char *argv[]) {
Packit Service 9e77c8
    struct my_event *e, ev, *events = NULL;
Packit Service 9e77c8
    unsigned i, keylen;
Packit Service 9e77c8
Packit Service 9e77c8
    keylen =   offsetof(struct my_event, event_code) + sizeof(char)                         
Packit Service 9e77c8
             - offsetof(struct my_event, is);
Packit Service 9e77c8
Packit Service 9e77c8
    for(i = 0; i < 10; i++) {
Packit Service 9e77c8
        e = (struct my_event*)malloc(sizeof(struct my_event));
Packit Service 9e77c8
        memset(e,0,sizeof(struct my_event));
Packit Service 9e77c8
        e->is.a = i * (60*60*24*365);          /* i years (sec)*/
Packit Service 9e77c8
        e->is.b = 0;
Packit Service 9e77c8
        e->event_code = 'a'+(i%2);              /* meaningless */
Packit Service 9e77c8
        e->user_id = i;
Packit Service 9e77c8
Packit Service 9e77c8
        HASH_ADD( hh, events, is, keylen, e);
Packit Service 9e77c8
    }
Packit Service 9e77c8
Packit Service 9e77c8
    /* look for one specific event */
Packit Service 9e77c8
    memset(&ev,0,sizeof(struct my_event));
Packit Service 9e77c8
    ev.is.a = 5 * (60*60*24*365);          
Packit Service 9e77c8
    ev.is.b = 0;
Packit Service 9e77c8
    ev.event_code = 'b';
Packit Service 9e77c8
    HASH_FIND( hh, events, &ev.is, keylen , e);
Packit Service 9e77c8
    if (e) printf("found: user %d, unix time %d\n", e->user_id, e->is.a);
Packit Service 9e77c8
   return 0;
Packit Service 9e77c8
}