📄 sharedresourcebundle.h
字号:
// --------------------------------------------------------------------------
// Dingus project - a collection of subsystems for game/graphics applications
// --------------------------------------------------------------------------
#ifndef __SHARED_RESOURCE_BUNDLE_H
#define __SHARED_RESOURCE_BUNDLE_H
#include "ResourceBundle.h"
#include "ResourceId.h"
namespace dingus {
template<typename T, typename RESDATA>
class CSharedResourceBundle : public IResourceBundle {
private:
typedef std::map<CResourceId, std::pair<RESDATA,T*> > TResourceMap;
public:
CSharedResourceBundle() {}
virtual ~CSharedResourceBundle() { }
T* getResourceById( CResourceId const& id ) {
T* resource = findResource( id );
assert( resource );
return resource;
}
// NOTE: deletes the resource, so make sure no one references it!
void unregisterResource( const CResourceId& id ) {
T* resource = findResource( id );
if( resource ) {
deleteResource( *resource );
mResourceMap.erase( id );
}
}
void clear() {
for( TResourceMap::iterator it = mResourceMap.begin(); it != mResourceMap.end(); ) {
assert( it->second.second );
deleteResource( *it->second.second );
it = mResourceMap.erase( it );
}
}
protected:
void registerResource( CResourceId const& id, T& resource, const RESDATA& data ) {
mResourceMap.insert( std::make_pair( id, std::make_pair(data, &resource ) ) );
}
T* findResource( CResourceId const& id ) {
TResourceMap::const_iterator it = mResourceMap.find( id );
return ( ( it != mResourceMap.end() ) ? it->second.second : NULL );
}
virtual void deleteResource( T& resource ) = 0;
protected:
TResourceMap mResourceMap;
};
}; // namespace
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -