им.
class ResourceDecoder : public Object {
private:
ResourceManager * resManager;
public:
ResourceDecoder ( const char * theName,
ResourceManager * rm ) : Object ( theName )
{
resManager = rm;
metaClass = Sclasslnstance;
}
ResourceManager * getResourceManager () const {
return resManager;
}
// try to build object from data, // returns NULL on failure virtual Object * decode ( Data * ) = 0;
// kind of a hunt, whether name corresponds // to decoded type of data virtual bool checkExtension ( const Strings theName ) = 0;
static MetaClass classlnstance;
} ;
Как видно из описания, метод decode по загруженному образу файла (содержащемуся в объекте класса Data) строит объект, соответствующий содержанию файла (например, объект класса Texture для файла с текстурой), или выдает NULL, если он не может построить объект данного класса по переданным данным.
Для унификации доступа к ресурсам удобно "завернуть" весь доступ внутрь специального объекта. Основной задачей такого объекта является предоставления всем остальным частям системы доступа к ресурсам, скрывая при этом особенности, связанные с форматом ресурса и его местоположением. Интерфейс объекта ResourceManager приводится ниже.
"9
aL
class ResourceManager : public Object {
private :
Array sources; // file systems used
// to retrieve data Array decoders; // registered object loaders
Array objects; // loaded objects
PixelFormat defFormats [3]; // Formats for RGB, RGBA and
// single-component textures
public :
ResourceManager ( const char * theName );
int registerSource ( ResourceSource * system );
int unregisterSource ( const Strings theName ) ,-int registerDecoder ( ResourceDecoder * loader ); int unregisterDecoder ( const Strings theName ); data * getResource ( const Strings theName ) ,-
object * getObject ( const Strings theName );
texture * getTexture ( const Strings theName ); font * getSystemFont ();