HFL(3) Library Functions Manual HFL(3)

hfl - hash api for C-lang


typedef struct hfl_node_tag {
 

int tp; //int/dbl/ptr/str(or struct) == 'i'/'d'/'p'/'s'
 

char* key;
 

int i;
 

double d;
 

void* p;
 

void* s;
 

//..inner data
 

} hfl_nt;
 
 

typedef struct hfl_tag{
 

uint32_t cnt;
 

//..inner data
 

} hfl_t;
 
 

hfl_t* hfl_new([uint32_t sz]);
 

void* hfl_free(hfl_t* obj);
 

hfl_nt* hfl_unset(hfl_t* obj, char* k);
 

hfl_nt* hfl_find(hfl_t* obj, char* k);
 
 

#define hfl_set_i(obj,k,v)
 

#define hfl_set_d(obj,k,v)
 

#define hfl_set_p(obj,k,v)
 

#define hfl_set_s(obj,k,ptr,[sz])
 

#define hfl_foreach(node, obj)
 
 
 
 

 #include "hfl.h"
 
 int main(int argc, char** argv){
 	hfl_t* obj = hfl_new();
 	hfl_nt* rp = hfl_set_i(obj, "k1", 12);
 	puts(rp->key);	// "k1"
 	int tp = rp->tp;	// int == 'i'
 	hfl_unset(obj, "k1");	//del
 
 	rp = hfl_set_s(obj, "k2", "hw");
 	puts(rp->s);	// "hw"
 	rp = hfl_find(obj, "k2");
 	puts(rp->s);	// "hw"
 	
 	float n = 12.3;
 	rp = hfl_set_s(obj, "k3", &n, sizeof(float) );
 	// ag4 isnt >> strdup()
 	// ag4 exist >> malloc()
 	n = *(float*)(rp->s);
 	
 	hfl_foreach(p, obj){
 		puts(p->key);
 		hfl_set_i(obj, p->key, 2);	//ok, replace/update
 		hfl_unset(obj, p->key);	//ok
 		// hfl_set_i(obj, "new", 2);	//NG, add newkey
 		p->i = 10;	//ok
 	}
 	
 	rp = hfl_unset(obj, "k2");
 	rp = hfl_find(obj, "k2");	//rp == NULL;
 	int cnt = obj->cnt;	//holding keys
 	
 	hfl_free(obj);
 	return 0;
 }
 //~$ cc src.c libhfl.a

c99 hsearch() allows only 1 hash tb in 1 pg. hfl allows to hold many hashtb.
	--- bench mark: c_arr, c99hash, hfl, ghash
	  FAST: c_arr(1) < c99hash == hfl == ghash (20) :SLOW
consume time of get/set is almost the same.
 
 
hfl_set_s(obj, key, vptr, [memsz]) saves mem using strdup()/malloc(). use malloc() if ag4 exist and not 0. buffmem is freed when hfl_free().

-

suc/fail == ptr, int 0 / NULL, int not0

output emsg and exit(1) if fatal err

-

POSIX.1-2001+

Copyright 2022 momi-g, GPLv3+

2022-06-08 v1.0.1 (2022-05-29 v1.0.0)

https://probablydance.com/2017/02/26/i-wrote-the-fastest-hashtable/
 
https://github.com/skarupke/flat_hash_map