nuclear@0: #include nuclear@0: #include nuclear@0: #include "datapath.h" nuclear@0: nuclear@0: template nuclear@0: DataSet::DataSet(T (*load_func)(const char*), void (*destr_func)(T)) nuclear@0: { nuclear@0: load = load_func; nuclear@0: destroy = destr_func; nuclear@0: } nuclear@0: nuclear@0: template nuclear@0: DataSet::~DataSet() nuclear@0: { nuclear@0: clear(); nuclear@0: } nuclear@0: nuclear@0: template nuclear@0: void DataSet::clear() nuclear@0: { nuclear@0: if(destroy) { nuclear@0: typename std::map::iterator it = data.begin(); nuclear@0: while(it != data.end()) { nuclear@0: destroy(it++->second); nuclear@0: } nuclear@0: } nuclear@0: data.clear(); nuclear@0: } nuclear@0: nuclear@0: template nuclear@0: T DataSet::get(const char *name) const nuclear@0: { nuclear@0: typename std::map::const_iterator iter = data.find(name); nuclear@0: if(iter != data.end()) { nuclear@0: return iter->second; nuclear@0: } nuclear@0: nuclear@5: std::string path = datafile_path(name); nuclear@0: if(path.empty()) { nuclear@0: fprintf(stderr, "can't find data file: %s\n", name); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: T res = load(path.c_str()); nuclear@0: if(res) { nuclear@0: data[name] = res; nuclear@0: } nuclear@0: return res; nuclear@0: }