]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resourcemanager.h
Make is_resource_loaded const as it should be
[libs/gl.git] / source / resourcemanager.h
index a1ff7aee2fc32adda60d12b0a63166c635e81822..5cc427f729cabaa4ec15eec927283d38297f4a68 100644 (file)
@@ -13,6 +13,14 @@ namespace GL {
 
 class ResourceWatcher;
 
+class resource_load_error: public std::runtime_error
+{
+public:
+       resource_load_error(const std::string &, const std::exception &);
+       virtual ~resource_load_error() throw() { }
+};
+
+
 class ResourceManager
 {
 public:
@@ -23,6 +31,15 @@ public:
                LOAD_MANUALLY
        };
 
+       struct ResourceLocation
+       {
+               DataFile::Collection *collection;
+               std::string name;
+
+               ResourceLocation();
+               ResourceLocation(DataFile::Collection &, const std::string &);
+       };
+
 private:
        struct ManagedResource
        {
@@ -32,12 +49,12 @@ private:
                        LOAD_QUEUED,
                        LOADING,
                        LOAD_FINISHED,
-                       LOADED
+                       LOADED,
+                       LOAD_ERROR
                };
 
                Resource *resource;
-               DataFile::Collection *collection;
-               std::string name;
+               ResourceLocation location;
                IO::Seekable *io;
                Resource::AsyncLoader *loader;
                State state;
@@ -68,6 +85,7 @@ private:
                LoadQueue sync_queue;
                unsigned capacity;
                unsigned size;
+               std::list<resource_load_error> error_queue;
                volatile bool done;
 
        public:
@@ -116,7 +134,10 @@ public:
        void add_resource(Resource &);
        void *get_data_for_resource(const Resource &);
        void set_resource_location(Resource &, DataFile::Collection &, const std::string &);
+       void set_resource_location(Resource &, const ResourceLocation &);
+       const ResourceLocation *get_resource_location(const Resource &) const;
        void load_resource(Resource &);
+       bool is_resource_loaded(const Resource &) const;
        void resource_used(const Resource &);
        void remove_resource(Resource &);