hashtable passes the test!
This commit is contained in:
parent
c7a3fb10b5
commit
a8dd8de77b
@ -28,14 +28,27 @@ void Hashtable_free(Hashtable* ht){
|
||||
|
||||
uint32 Hashtable_height(Hashtable* ht){ return HT_HEIGHTS[ht->hein]; }
|
||||
|
||||
Autoarr2(KeyValuePair)* getrow(Hashtable* ht, char* key){
|
||||
|
||||
uint16 rown=HT_HEIGHTS[ht->hein]%ihash(key);
|
||||
if(rown>=HT_HEIGHTS[ht->hein]){
|
||||
ht->rows=realloc(ht->rows,HT_HEIGHTS[++ht->hein]*sizeof(Autoarr2(KeyValuePair)));
|
||||
for(uint16 i=HT_HEIGHTS[ht->hein-1];i<HT_HEIGHTS[ht->hein];i++)
|
||||
void Hashtable_resize(Hashtable* ht){
|
||||
Autoarr2(KeyValuePair)* newrows=malloc(HT_HEIGHTS[++ht->hein]*sizeof(Autoarr2(KeyValuePair)));
|
||||
for(uint16 i=0;i<HT_HEIGHTS[ht->hein];i++)
|
||||
ht->rows[i]=Autoarr2_create(KeyValuePair,4,16);
|
||||
for(uint16 i=0;i<HT_HEIGHTS[ht->hein-1];i++){
|
||||
Autoarr2(KeyValuePair)* ar=ht->rows+i;
|
||||
for(uint16 k=0;k<Autoarr2_length(ar);k++){
|
||||
KeyValuePair p=Autoarr2_get(ar,k);
|
||||
uint16 newrown=ihash(p.key)%HT_HEIGHTS[ht->hein];
|
||||
Autoarr2(KeyValuePair)* newar=newrows+newrown;
|
||||
Autoarr2_add(newar,p);
|
||||
}
|
||||
}
|
||||
ht->rows=newrows;
|
||||
}
|
||||
|
||||
Autoarr2(KeyValuePair)* getrow(Hashtable* ht, char* key){
|
||||
uint16 rown=ihash(key)%HT_HEIGHTS[ht->hein];
|
||||
if(rown>=HT_HEIGHTS[ht->hein])
|
||||
Hashtable_resize(ht);
|
||||
return ht->rows+rown;
|
||||
}
|
||||
|
||||
|
||||
@ -9,11 +9,10 @@ uint32 mystrlen(char* str){
|
||||
|
||||
//allocates new char[] and copies src there
|
||||
char* mystrcpy(char* src){
|
||||
uint32 len=mystrlen(src);dbg(len);
|
||||
uint32 len=mystrlen(src);
|
||||
char* dst=malloc(len*sizeof(char));
|
||||
while(len-->0)
|
||||
dst[len]=src[len];
|
||||
printf("dst: %s\n",dst);
|
||||
return dst;
|
||||
}
|
||||
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
int main(){
|
||||
setlocale(LC_ALL, "en-US.Unicode");
|
||||
printf("\e[92mdtsod parser in c language!\e[97m\n");
|
||||
//optime("test_all",1,{test_all();});
|
||||
test_hashtable();
|
||||
optime("test_all",1,{test_all();});
|
||||
//test_hashtable();
|
||||
printf("\e[0m\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ void print_hashtable(Hashtable* ht){
|
||||
|
||||
void hashtable_fill(Hashtable* ht){
|
||||
char* key=malloc(20);
|
||||
for(uint32 i=0;i<255;i++){
|
||||
for(uint32 i=0;i<100;i++){
|
||||
sprintf(key,"key__%u",i);
|
||||
Hashtable_add(ht,key,Uni(UInt32,i));
|
||||
}
|
||||
@ -23,7 +23,7 @@ void hashtable_fill(Hashtable* ht){
|
||||
|
||||
void hashtable_printval(Hashtable* ht){
|
||||
char* key=malloc(20);
|
||||
for(uint32 i=0;i<255;i++){
|
||||
for(uint32 i=0;i<100;i++){
|
||||
sprintf(key,"key__%u",i);
|
||||
printuni(Hashtable_get(ht,key));
|
||||
printf(" ");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user