This commit is contained in:
Timerix22 2022-02-14 21:23:11 +03:00
parent e5ada61339
commit daeb29299f
2 changed files with 24 additions and 12 deletions

View File

@ -1,24 +1,26 @@
#include "Hashtable.h" #include "Hashtable.h"
Hashtable Hashtable_create(uint16 height,my_type type){ Hashtable Hashtable_create(uint16 height){
Hashtable h={ Hashtable h={
.type=type,
.height=height, .height=height,
.rows=malloc(height*sizeof(Autoarr)) .rows=malloc(height*sizeof(Autoarr*))
}; };
for(uint16 i=0;i<height;i++)
h.rows[i]=Autoarr_create(100,8,type);
return h; return h;
} }
void Hashtable_clear(Hashtable* ht){ void Hashtable_clear(Hashtable* ht){
for(uint16 i=0;i<ht->height;i++) for(uint16 i=0;i<ht->height;i++)
Autoarr_clear((Autoarr*)(ht->rows+i)); Autoarr_clear(ht->rows[i]);
free(ht->rows); free(ht->rows);
ht->type=Null;
} }
void Hashtable_add_uni(Hashtable* ht,uint32 hash, Unitype val){ void Hashtable_add_kvpair(Hashtable* ht, KeyValuePair pair){
uint16 i=ht->height%ihash(pair.key);
if(!ht->rows[i])
ht->rows[i]=Autoarr_create(100,4,ht->type);
Autoarr_add_kvpair(ht->rows[i],pair);
} }
void Hashtable_add(Hashtable* ht, char* key, Unitype value){
Hashtable_add_kvpair(ht,(KeyValuePair){key,value});
}

View File

@ -5,11 +5,21 @@
#include "hash.h" #include "hash.h"
typedef struct Hashtable{ typedef struct Hashtable{
my_type type; // data type uint16 height; // amount of rows
uint16 height; // amount of rows Autoarr** rows; // Autoarr[height]s
Autoarr* rows; // Autoarr[height]s
} Hashtable; } Hashtable;
Hashtable Hashtable_create(uint16 height,my_type type); Hashtable Hashtable_create(uint16 height,my_type type);
void Hashtable_clear(Hashtable* ht); void Hashtable_clear(Hashtable* ht);
typedef struct KeyValuePair{
char* key;
Unitype value;
} KeyValuePair;
const uint16 Hashtable_HTINY=61;
const uint16 Hashtable_HSMALL=631;
const uint16 Hashtable_HMED=3889;
const uint16 Hashtable_HLARGE=19441;
const uint16 Hashtable_HMAX=65536;