使い方(使用例)

#include <stdio.h>
#include <string.h>
#include "xl_hash.h"

#define HASH_TABLE_SIZE 1000

/* ハッシュ関数(適当) */
int str_calc_hash(XL_KEY_TYPE key){
	unsigned int sum = 0;
	int i;

	for(i = 0; i < strlen((char *)key); i++){
		sum = sum * 62423 + *((char*)key + i);
	}
	return sum % HASH_TABLE_SIZE;
}

/* foreachで使う値を出力する関数 */
void fe_print(XL_VALUE_TYPE v){
	printf("%s\n", (char *)v);
}

/* lookupで使う奇数を判定する関数 */
int lu_test(XL_VALUE_TYPE v){
	return (((char *)v)[strlen((char *)v) - 1] - '0') % 2;
}

int main(int argc, char *argv[]){
	xl_hash_type type = {strcmp, str_calc_hash, 128, 128};/* map<string, string>に相当 */
	xl_hash *hash;
	char key_buff[128], value_buff[128];
	int i;

	/* ハッシュの初期化 */
	hash = xl_hash_init_with_size(&type, HASH_TABLE_SIZE);

	/* "key_xx" => "value:xx"というエントリを20まで追加する */
	for(i = 0; i < 20; i++){
		sprintf(value_buff, "value:%d", i);
		sprintf(key_buff, "key_%d", i);
		xl_hash_add_first(hash, (XL_VALUE_TYPE)value_buff, (XL_KEY_TYPE)key_buff);
	}

	/* foreachで全ての値を出力 */
	xl_hash_foreach(hash, fe_print);

	/* lookupで奇数を含むハッシュをforeachで出力 */
	/*   この場合xl_hash_lookupで確保されたハッシュが開放されないので、一度xl_hashに代入してから使った方が良い */
	xl_hash_foreach(xl_hash_lookup(hash, lu_test), fe_test);

	/* ハッシュの開放 */
	xl_hash_free(hash);

	return 0;
}