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@0: nuclear@0: template nuclear@0: class DataSet { nuclear@0: protected: nuclear@0: mutable std::map data; nuclear@0: nuclear@0: T (*load)(const char*); nuclear@0: void (*destroy)(T); nuclear@0: nuclear@0: public: nuclear@0: DataSet(T (*load_func)(const char*), void (*destr_func)(T) = 0); nuclear@0: ~DataSet(); nuclear@0: nuclear@0: void clear(); nuclear@0: nuclear@0: T get(const char *name) const; nuclear@0: }; nuclear@0: nuclear@0: #include "dataset.inl" nuclear@0: nuclear@0: #endif // DATASET_H_