conworlds

annotate src/dataset.inl @ 13:283cdfa7dda2

added a crapload of code from goat3dgfx
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 24 Aug 2014 09:41:24 +0300
parents
children
rev   line source
nuclear@13 1 #include <stdio.h>
nuclear@13 2 #include <string.h>
nuclear@13 3
nuclear@13 4 template <typename T>
nuclear@13 5 DataSet<T>::DataSet(T (*load_func)(const char*), void (*destr_func)(T))
nuclear@13 6 {
nuclear@13 7 load = load_func;
nuclear@13 8 destroy = destr_func;
nuclear@13 9 }
nuclear@13 10
nuclear@13 11 template <typename T>
nuclear@13 12 DataSet<T>::~DataSet()
nuclear@13 13 {
nuclear@13 14 clear();
nuclear@13 15 }
nuclear@13 16
nuclear@13 17 template <typename T>
nuclear@13 18 void DataSet<T>::clear()
nuclear@13 19 {
nuclear@13 20 if(destroy) {
nuclear@13 21 typename std::map<std::string, T>::iterator it = data.begin();
nuclear@13 22 while(it != data.end()) {
nuclear@13 23 destroy(it++->second);
nuclear@13 24 }
nuclear@13 25 }
nuclear@13 26 data.clear();
nuclear@13 27 }
nuclear@13 28
nuclear@13 29 template <typename T>
nuclear@13 30 T DataSet<T>::get(const char *name) const
nuclear@13 31 {
nuclear@13 32 typename std::map<std::string, T>::const_iterator iter = data.find(name);
nuclear@13 33 if(iter != data.end()) {
nuclear@13 34 return iter->second;
nuclear@13 35 }
nuclear@13 36
nuclear@13 37 const char *fname, *slash;
nuclear@13 38 if((slash = strrchr(name, '/'))) {
nuclear@13 39 fname = slash + 1;
nuclear@13 40 } else {
nuclear@13 41 fname = name;
nuclear@13 42 }
nuclear@13 43
nuclear@13 44 std::string path = fname;
nuclear@13 45 if(path.empty()) {
nuclear@13 46 fprintf(stderr, "can't find data file: %s\n", name);
nuclear@13 47 return 0;
nuclear@13 48 }
nuclear@13 49
nuclear@13 50 T res = load(path.c_str());
nuclear@13 51 if(res) {
nuclear@13 52 data[name] = res;
nuclear@13 53 }
nuclear@13 54 return res;
nuclear@13 55 }