ocaml-memcached / test / data / genhash.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libhashkit/hashkit.h>

typedef struct {
    char *name;
    uint32_t (*hashfunc)(const char *key, size_t key_length);
} hashdesc_t;

static hashdesc_t hashfuncs[] = {
    { "crc32", libhashkit_crc32 },
    { "murmur", libhashkit_murmur },
};
#define NHASHES (sizeof(hashfuncs) / sizeof(hashdesc_t))

static void usage(void)
{
    int i;

    printf("Usage: genhash <hashname>\n");
    printf("Available hash functions:\n");
    for (i = 0; i < NHASHES; i++)
        printf("\t%s\n", hashfuncs[i].name);
}

int main(int argc, char *argv[])
{
    int i;
    char buf[BUFSIZ];
    uint32_t (*hash)(const char *key, size_t key_length);

    if (argc != 2) {
        usage();
        exit(1);
    }

    for (i = 0; i < NHASHES; i++)
        if (!strcmp(hashfuncs[i].name, argv[1])) {
            hash = hashfuncs[i].hashfunc;
            break;
        }

    if (i == NHASHES) {
        usage();
        exit(2);
    }

    while (fgets(buf, BUFSIZ, stdin) != NULL) {
        buf[strlen(buf) - 1] = '\0';
        uint32_t h = hash(buf, strlen(buf));
        printf("%s\t%d\n", buf, h);
    }
    return 0;
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.