From: John Tsiombikas Date: Sat, 11 Nov 2017 04:57:12 +0000 (+0200) Subject: added loaded callbacks to DataSet X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=commitdiff_plain;h=8512530474f0e0827447b6c81302120592f0e297 added loaded callbacks to DataSet --- diff --git a/src/dataset.h b/src/dataset.h index a4736c4..5c4ca51 100644 --- a/src/dataset.h +++ b/src/dataset.h @@ -19,16 +19,22 @@ #ifndef DATASET_H_ #define DATASET_H_ +#include #include #include #include template class DataSet { +public: + typedef void (*LoadedCallbackFunc)(T, void*); + protected: mutable std::map data; mutable struct resman *rman; + std::vector > loaded_cb; + T (*create)(); bool (*load)(T, const char*); bool (*done)(T); @@ -46,6 +52,9 @@ public: void update(); T get(const char *name) const; + + void add_loaded_callback(LoadedCallbackFunc func, void *cls = 0); + bool remove_loaded_callback(LoadedCallbackFunc func); }; #include "dataset.inl" diff --git a/src/dataset.inl b/src/dataset.inl index ca01ea2..954081e 100644 --- a/src/dataset.inl +++ b/src/dataset.inl @@ -51,6 +51,28 @@ T DataSet::get(const char *name) const return res; } +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_done_func(int id, void *cls) 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; }