]> Dogcows Code - chaz/yoink/blobdiff - src/moof/resource.hh
converted image management to resource handles
[chaz/yoink] / src / moof / resource.hh
index 7616d69c280ecde861e9857c1a1138bd3127a4d8..5f1a71ab41e366596ef890f26806fd9f4d097173 100644 (file)
@@ -17,6 +17,8 @@
  * Interface for textures, sounds, and other types of resources.
  */
 
+#include "config.h"
+
 #include <cstdio>
 #include <map>
 #include <stdexcept>
 
 #include <moof/debug.hh>
 
-#if HAVE_CONFIG_H
-#include "../config.h"
-#endif
-
 
 namespace moof {
 
@@ -58,12 +56,6 @@ public:
         */
        static void add_search_paths(const std::string& paths);
 
-       /**
-        * Add directories to search when looking for resource files.
-        * \param pathList The list of directory paths.
-        */
-       static void add_search_paths(const std::vector<std::string>& pathList);
-
 
        /**
         * Get the path to a resource of a given name.
@@ -73,6 +65,8 @@ public:
         */
        static bool find(const std::string& file);
 
+       static std::string find_file(const std::string& name);
+
        /**
         * Get the path to a resource of a given name and open it if a resource
         * was found.
@@ -94,9 +88,11 @@ public:
        template <class T>
        static void register_type(const std::string& extension)
        {
-               if (!type_lookup_) type_lookup_ = type_lookup_ptr(new type_lookup);
+               //if (!type_lookup_) type_lookup_ = type_lookup_ptr(new type_lookup);
                loader_ptr loader(new specific_loader<T>);
-               (*type_lookup_)[extension] = loader;
+               //(*type_lookup_)[extension] = loader;
+               //type_lookup_[extension] = loader;
+               manage_loader(extension, loader, true);
        }
 
        /**
@@ -107,7 +103,10 @@ public:
         */
        static void unregister_type(const std::string& extension)
        {
-               type_lookup_->erase(extension);
+               //type_lookup_.erase(extension);
+               //type_lookup_->erase(extension);
+               loader_ptr loader;
+               manage_loader(extension, loader, true);
        }
 
 
@@ -170,6 +169,8 @@ public:
         */
        static int reload_as_needed();
 
+       static void print_types();
+
 
 private:
 
@@ -194,6 +195,7 @@ private:
 
                virtual resource* load(const std::string& path)
                {
+                       log_info("loading resource of type ", typeid(T).name());
                        return new resource(new T(path));
                }
        };
@@ -218,7 +220,7 @@ private:
 
                virtual ~specific_unloader()
                {
-                       log_warning("unloading resource of type ", typeid(T).name());
+                       log_info("unloading resource of type ", typeid(T).name());
                        delete object_;
                }
 
@@ -244,8 +246,11 @@ private:
        loader_ptr              loader_;
 
        typedef std::map<std::string,loader_ptr> type_lookup;
-       typedef boost::shared_ptr<type_lookup> type_lookup_ptr;
-       static type_lookup_ptr type_lookup_;
+       //typedef boost::shared_ptr<type_lookup> type_lookup_ptr;
+       //static type_lookup_ptr type_lookup_;
+       //static type_lookup type_lookup_;
+
+       static void manage_loader(const std::string& extension, loader_ptr& loader, bool set = false);
 
 #ifdef USE_HOTLOADING
        int wd_;
@@ -280,6 +285,9 @@ public:
        resource_handle(resource_ptr ptr) :
                resource_(ptr) {}
 
+       explicit resource_handle(const std::string& path) :
+               resource_(resource::load(path)) {}
+
 
        /**
         * Get whether or not the handle is dereferenceable to the type of this
This page took 0.023981 seconds and 4 git commands to generate.