X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fdataset.inl;h=41277a1d9ff7cc93eb3b59f54136a56911e10639;hp=1df20d5d89347f9c5a88a38f29840e00d786e259;hb=0d27f859021b4af5dbb5404ef5af012546abf335;hpb=572bf1ef8d54ef5a7cba7cdf38515cb16c4c312c diff --git a/src/dataset.inl b/src/dataset.inl index 1df20d5..41277a1 100644 --- a/src/dataset.inl +++ b/src/dataset.inl @@ -1,5 +1,6 @@ #include #include +#include "logger.h" template DataSet::DataSet(T (*create_func)(), bool (*load_func)(T, const char*), bool (*done_func)(T), void (*destr_func)(T)) @@ -46,10 +47,44 @@ T DataSet::get(const char *name) const T res = create(); data[name] = res; - resman_lookup(rman, name, res); + resman_add(rman, name, res); return res; } +template +int DataSet::pending() const +{ + return resman_pending(rman); +} + +template +void DataSet::wait() const +{ + resman_waitall(rman); +} + +template +void DataSet::add_loaded_callback(LoadedCallbackFunc func, void *cls) +{ + std::pair cb; + cb.first = func; + cb.second = cls; + loaded_cb.push_back(cb); +} + +template +bool DataSet::remove_loaded_callback(LoadedCallbackFunc func) +{ + int numcb = (int)loaded_cb.size(); + for(int i=0; i::dataset_load_func(const char *fname, int id, void *cls) { DataSet *dset = (DataSet*)cls; T data = (T)resman_get_res_data(dset->rman, id); + if(!data) return -1; if(!dset->load(data, fname)) { return -1; @@ -74,14 +110,19 @@ int DataSet::dataset_done_func(int id, void *cls) int load_res = resman_get_res_result(dset->rman, id); if(load_res != 0) { - fprintf(stderr, "failed to load resource %d (%s)\n", id, resman_get_res_name(dset->rman, id)); + error_log("failed to load resource %d (%s)\n", id, resman_get_res_name(dset->rman, id)); } else { - printf("done loading resource %d (%s)\n", id, resman_get_res_name(dset->rman, id)); + info_log("done loading resource %d (%s)\n", id, resman_get_res_name(dset->rman, id)); } if(dset->done) { dset->done(data); } + + int numcb = (int)dset->loaded_cb.size(); + for(int i=0; iloaded_cb[i].first(data, dset->loaded_cb[i].second); + } return 0; }