See what's going on with flipcode!




This section of the archives stores flipcode's complete Developer Toolbox collection, featuring a variety of mini-articles and source code contributions from our readers.

 

  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.

 

Copyright 1999-2008 (C) FLIPCODE.COM and/or the original content author(s). All rights reserved.
Please read our Terms, Conditions, and Privacy information.