00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_RESOURE_H
00023 #define FIFE_RESOURE_H
00024
00025
00026 #include <string>
00027
00028
00029
00030
00031
00032
00033
00034 #include "util/base/sharedptr.h"
00035
00036 namespace FIFE {
00037
00038 typedef std::size_t ResourceHandle;
00039
00040 class IResource;
00041
00042 class IResourceLoader {
00043 public:
00044 IResourceLoader() { }
00045 virtual ~IResourceLoader() { }
00046
00047 virtual void load(IResource* resource) = 0;
00048 };
00049
00050 class IResource {
00051 public:
00052 enum ResourceState {
00053 RES_INVALID = 0,
00054 RES_NOT_LOADED,
00055 RES_LOADED
00056 };
00057
00058 IResource(const std::string& name, IResourceLoader* loader = 0)
00059 : m_name(name),
00060 m_loader(loader),
00061 m_state(RES_NOT_LOADED),
00062 m_handle(m_curhandle++) { }
00063
00064 virtual ~IResource() { }
00065
00066 virtual const std::string& getName() { return m_name; }
00067
00068 ResourceHandle getHandle() { return m_handle; }
00069
00070 virtual ResourceState getState() { return m_state; }
00071 virtual void setState(const ResourceState& state) { m_state = state; }
00072
00073 virtual size_t getSize() = 0;
00074
00075 virtual void load() = 0;
00076 virtual void free() = 0;
00077
00078 protected:
00079 std::string m_name;
00080 IResourceLoader* m_loader;
00081 ResourceState m_state;
00082
00083 private:
00084 ResourceHandle m_handle;
00085 static ResourceHandle m_curhandle;
00086 };
00087
00088 typedef SharedPtr<IResource> ResourcePtr;
00089
00090 }
00091
00092 #endif