sharedresourcebundle.h

来自「java实现的简单的分形树。简单易学!是学习分形知识的很好的例子。其java语法」· C头文件 代码 · 共 64 行

H
64
字号
// --------------------------------------------------------------------------
// 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 + =
减小字号Ctrl + -
显示快捷键?