nuclear@0: /** DataSet is a generic resource database with fast O(logn) lookups by name nuclear@0: * it can be used for texture managers, mesh managers, sound effect managers etc nuclear@0: * nuclear@0: * The constructor takes a load function and a destructor function to be called nuclear@0: * when a nonexistent resource is requested and needs to be loaded, and when nuclear@0: * the DataSet is destroyed. The destructor is optional and can be set to null nuclear@0: * if not needed. nuclear@0: * nuclear@0: * Requesting a resource works by simply calling get, example: nuclear@0: * ---------------------------------------------------------- nuclear@0: * \code nuclear@0: * Texture *load_texture(const char *fname); nuclear@0: * void free_texture(Texture *tex); nuclear@0: * nuclear@0: * DataSet texman(load_texture, free_texture); nuclear@0: * Texture *foo = texman.get("foo.png"); nuclear@0: * \endcode nuclear@0: */ nuclear@0: #ifndef DATASET_H_ nuclear@0: #define DATASET_H_ nuclear@0: nuclear@0: #include nuclear@0: #include nuclear@24: #include nuclear@0: nuclear@15: namespace goatgfx { nuclear@15: nuclear@0: template nuclear@0: class DataSet { nuclear@0: protected: nuclear@0: mutable std::map data; nuclear@24: mutable struct resman *rman; nuclear@0: nuclear@24: T (*create)(); nuclear@24: bool (*load)(T, const char*); nuclear@24: bool (*done)(T); nuclear@0: void (*destroy)(T); nuclear@0: nuclear@24: static int dataset_load_func(const char *fname, int id, void *cls); nuclear@24: static int dataset_done_func(int id, void *cls); nuclear@24: static void dataset_destroy_func(int id, void *cls); nuclear@24: nuclear@0: public: nuclear@24: DataSet(T (*create_func)(), bool (*load_func)(T, const char*), bool (*done_func)(T) = 0, void (*destr_func)(T) = 0); nuclear@0: ~DataSet(); nuclear@0: nuclear@0: void clear(); nuclear@24: void update(); nuclear@0: nuclear@0: T get(const char *name) const; nuclear@0: }; nuclear@0: nuclear@15: } // namespace goatgfx nuclear@15: nuclear@0: #include "dataset.inl" nuclear@0: nuclear@0: #endif // DATASET_H_