#include #include #include "cache.h" struct _list { char *name; void *value; }; cache::cache(loadFunc fn,int entries) { loadFn_ = fn; listMaxLen_ = entries; list_ = (struct _list *) malloc(entries * sizeof(struct _list)); listLen_ = 0; } void * cache::get(char *name) { int i; void *val; if (!name) return NULL; for (i=0; i < listLen_; i++) if (!strcmp(name,list_[i].name)) return list_[i].value; if (listLen_ >= listMaxLen_) { listMaxLen_ *= 2; list_ = (struct _list *) realloc(list_, listMaxLen_ * sizeof(struct _list)); } list_[listLen_].name = strdup(name); val = list_[listLen_].value = (*loadFn_)(name); listLen_++; return val; }