|
Simple Resource Manager
Submitted by |
Here's a template for a simple resource manager. To use it, subclass and
provide a Load function, then just call GetResource(filename) when you
want a resource - it'll load it if it isn't in memory already, and return
a reference to it. The resources are deleted when the resource manager's
deconstructed.
Do what you want with the code so long as I don't get the blame! There's
no doubt a few stylistic complaints to be made (the using namespace is an
obvious one if you put this in a header), I'm sure they'll get picked out
in the comments...
/*
Resource Manager template
Inherited from for each resource type
Caches the resource in question and frees it when the manager
is deleted (generally on program shutdown)
*/
#include <map
#include <string
#include <assert.h
using namespace std;
template <class R class resourcemanager {
protected:
map <string, R * resources;
public:
R &GetResource (const string &filename)
{
if (resources.find(filename) == resources.end()) //need to load resource
{
R* a = Load (filename);
assert(a != NULL); //alternatively, handle it here
resources[filename] = a;
}
return *(resources[filename]);
}
virtual ~resourcemanager()
{
//iterate along map
for (map<string, R*::iterator i = resources.begin(); i != resources.end(); i++)
delete i-second;
resources.clear();
}
protected:
virtual R *Load(const string &filename)=0;
}; |
|
The zip file viewer built into the Developer Toolbox made use
of the zlib library, as well as the zlibdll source additions.
|