This is hash.c in view mode; [Download] [Up]
/* Simple hash table */ #include "zstr.h" #include "hash.h" static HENTRY *freentry=0; unsigned long hash(s) char *s; { unsigned long accu=0; while(*s) accu=hnext(accu,*s++); return accu; } HASH *htmk(len) { HASH *t=(HASH *)malloc(sizeof(HASH)); t->len=len-1; t->tab=(HENTRY **)calloc(sizeof(HENTRY *),len); return t; } void htrm(ht) HASH *ht; { free(ht->tab); free(ht); } void *htadd(ht,name,val) HASH *ht; char *name; void *val; { int idx=hash(name)&ht->len; HENTRY *entry; if(!freentry) { int x; entry=(HENTRY *)malloc(sizeof(HENTRY)*64); for(x=0;x!=64;++x) entry[x].next=freentry, freentry=entry+x; } entry=freentry; freentry=entry->next; entry->next=ht->tab[idx]; ht->tab[idx]=entry; entry->name=name; return entry->val=val; } void *htfind(ht,name) HASH *ht; char *name; { HENTRY *e; for(e=ht->tab[hash(name)&ht->len];e;e=e->next) if(!zcmp(e->name,name)) return e->val; return 0; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.