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