move xhash to another repo
This commit is contained in:
parent
708af9f00f
commit
43dccb30a4
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "extlib/xhash"]
|
||||||
|
path = extlib/xhash
|
||||||
|
url = git://github.com/wasabiz/xhash.git
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 350f8895bf888aceea87c38e38e19adfd604f9d2
|
|
@ -1,100 +0,0 @@
|
||||||
#ifndef XHASH_H__
|
|
||||||
#define XHASH_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2013 by Yuichi Nishiwaki <yuichi.nishiwaki@gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/* simple string to int hash table */
|
|
||||||
|
|
||||||
#define XHASH_INIT_SIZE 11
|
|
||||||
|
|
||||||
struct xh_entry {
|
|
||||||
struct xh_entry *next;
|
|
||||||
const char *key;
|
|
||||||
int val;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct xhash {
|
|
||||||
struct xh_entry **buckets;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline struct xhash *
|
|
||||||
xh_new()
|
|
||||||
{
|
|
||||||
struct xhash *x;
|
|
||||||
|
|
||||||
x = (struct xhash *)malloc(sizeof(struct xhash));
|
|
||||||
x->size = XHASH_INIT_SIZE;
|
|
||||||
x->buckets = (struct xh_entry **)calloc(XHASH_INIT_SIZE, sizeof(struct xh_entry *));
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
xh_hash(const char *str)
|
|
||||||
{
|
|
||||||
int hash = 0;
|
|
||||||
|
|
||||||
while (*str) {
|
|
||||||
hash = hash * 31 + *str++;
|
|
||||||
}
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct xh_entry *
|
|
||||||
xh_get(struct xhash *x, const char *key)
|
|
||||||
{
|
|
||||||
int idx;
|
|
||||||
struct xh_entry *e;
|
|
||||||
|
|
||||||
idx = xh_hash(key) % x->size;
|
|
||||||
for (e = x->buckets[idx]; e; e = e->next) {
|
|
||||||
if (strcmp(key, e->key) == 0)
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct xh_entry *
|
|
||||||
xh_put(struct xhash *x, const char *key, int val)
|
|
||||||
{
|
|
||||||
int idx;
|
|
||||||
struct xh_entry *e;
|
|
||||||
|
|
||||||
if ((e = xh_get(x, key))) {
|
|
||||||
e->val = val;
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
idx = xh_hash(key) % x->size;
|
|
||||||
e = (struct xh_entry *)malloc(sizeof(struct xh_entry));
|
|
||||||
e->next = x->buckets[idx];
|
|
||||||
e->key = strdup(key);
|
|
||||||
e->val = val;
|
|
||||||
|
|
||||||
return x->buckets[idx] = e;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
xh_destory(struct xhash *x)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
struct xh_entry *e, *d;
|
|
||||||
|
|
||||||
for (i = 0; i < x->size; ++i) {
|
|
||||||
e = x->buckets[i];
|
|
||||||
while (e) {
|
|
||||||
d = e->next;
|
|
||||||
free((void*)e->key);
|
|
||||||
free(e);
|
|
||||||
e = d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue