Resource Manager B – Source Code
Header
#pragma once
#ifndef AVS_ICANOS_SYSTEM_RESOURCEMANAGERB_HPP
#define AVS_ICANOS_SYSTEM_RESOURCEMANAGERB_HPP
#include <a title="Core" href="http://sfmlcoder.wordpress.com/icanos/system/core/">"Core.hpp"</a>
#include "Exceptions.hpp"
#include <map>
namespace Icanos {
namespace System {
template <class Resource> class ResourceManagerB {
typedef std::pair<URI, Resource*> ResourcePair;
typedef std::map<URI, Resource*> ResourceList;
ResourceList Resources;
public:
~ResourceManagerB() { UnloadAll(); }
URI& Load(URI& Uri);
template <class S> URI& Load(URI& Uri) { return Load(Uri); }
void Unload(URI& Uri);
void UnloadAll();
Resource* Get(URI& Uri);
template <class T> Resource* Get(URI& Uri) { Get(Uri); }
};
}
}
template <class Resource>
Icanos::System::URI& Icanos::System::ResourceManagerB<Resource>::Load(URI& Uri)
{
if (Resources.find(Uri) == Resources.end())
{
Resource* temp = new (std::nothrow) Resource(Uri);
if (!temp)
throw Exceptions::BadResourceAllocation();
Resources.insert(ResourcePair(Uri, temp));
}
return Uri;
}
template <class Resource>
void Icanos::System::ResourceManagerB<Resource>::Unload(URI& Uri)
{
ResourceList::const_iterator itr = Resources.find(Uri);
if (itr != Resources.end())
{
delete itr->second;
Resources.erase(Uri);
}
}
template <class Resource>
void Icanos::System::ResourceManagerB<Resource>::UnloadAll()
{
ResourceList::iterator itr;
for (itr = Resources.begin(); itr != Resources.end(); itr++)
delete itr->second;
Resources.clear();
}
template <class Resource>
Resource* Icanos::System::ResourceManagerB<Resource>::Get(URI& Uri)
{
ResourceList::const_iterator itr;
if ((itr = Resources.find(Uri)) != Resources.end())
return itr->second;
return 0;
}
#endif
(No source file: template class)
Like this:
Be the first to like this page.